67 lines
2.9 KiB
Python
67 lines
2.9 KiB
Python
|
|
"""
|
|||
|
|
节点模板模型
|
|||
|
|
用于管理和复用LLM节点的提示词模板
|
|||
|
|
"""
|
|||
|
|
from sqlalchemy import Column, String, Text, Integer, DateTime, JSON, ForeignKey, Boolean, func
|
|||
|
|
from sqlalchemy.dialects.mysql import CHAR
|
|||
|
|
from sqlalchemy.orm import relationship
|
|||
|
|
from app.core.database import Base
|
|||
|
|
import uuid
|
|||
|
|
|
|||
|
|
|
|||
|
|
class NodeTemplate(Base):
|
|||
|
|
"""节点模板表"""
|
|||
|
|
__tablename__ = "node_templates"
|
|||
|
|
|
|||
|
|
id = Column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4()), comment="模板ID")
|
|||
|
|
name = Column(String(100), nullable=False, comment="模板名称")
|
|||
|
|
description = Column(Text, comment="模板描述")
|
|||
|
|
category = Column(String(50), comment="分类: text_generation/data_analysis/code_generation/translation/summarization/qa/other")
|
|||
|
|
tags = Column(JSON, comment="标签列表")
|
|||
|
|
|
|||
|
|
# 模板内容
|
|||
|
|
prompt = Column(Text, nullable=False, comment="提示词模板(支持变量占位符,如 {{variable}})")
|
|||
|
|
variables = Column(JSON, comment="变量定义列表,格式: [{\"name\": \"var1\", \"type\": \"text\", \"required\": true, \"description\": \"变量描述\"}]")
|
|||
|
|
|
|||
|
|
# 默认配置
|
|||
|
|
provider = Column(String(50), default="deepseek", comment="默认LLM提供商")
|
|||
|
|
model = Column(String(100), default="deepseek-chat", comment="默认模型")
|
|||
|
|
temperature = Column(String(10), default="0.7", comment="默认温度参数")
|
|||
|
|
max_tokens = Column(Integer, default=1500, comment="默认最大token数")
|
|||
|
|
|
|||
|
|
# 元数据
|
|||
|
|
is_public = Column(Boolean, default=False, comment="是否公开")
|
|||
|
|
is_featured = Column(Boolean, default=False, comment="是否精选")
|
|||
|
|
use_count = Column(Integer, default=0, comment="使用次数")
|
|||
|
|
user_id = Column(CHAR(36), ForeignKey("users.id"), nullable=False, comment="创建者ID")
|
|||
|
|
created_at = Column(DateTime, default=func.now(), comment="创建时间")
|
|||
|
|
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), comment="更新时间")
|
|||
|
|
|
|||
|
|
# 关系
|
|||
|
|
user = relationship("User", backref="node_templates")
|
|||
|
|
|
|||
|
|
def __repr__(self):
|
|||
|
|
return f"<NodeTemplate(id={self.id}, name={self.name})>"
|
|||
|
|
|
|||
|
|
def to_dict(self):
|
|||
|
|
"""转换为字典"""
|
|||
|
|
return {
|
|||
|
|
"id": self.id,
|
|||
|
|
"name": self.name,
|
|||
|
|
"description": self.description,
|
|||
|
|
"category": self.category,
|
|||
|
|
"tags": self.tags or [],
|
|||
|
|
"prompt": self.prompt,
|
|||
|
|
"variables": self.variables or [],
|
|||
|
|
"provider": self.provider,
|
|||
|
|
"model": self.model,
|
|||
|
|
"temperature": self.temperature,
|
|||
|
|
"max_tokens": self.max_tokens,
|
|||
|
|
"is_public": self.is_public,
|
|||
|
|
"is_featured": self.is_featured,
|
|||
|
|
"use_count": self.use_count,
|
|||
|
|
"user_id": self.user_id,
|
|||
|
|
"created_at": self.created_at.isoformat() if self.created_at else None,
|
|||
|
|
"updated_at": self.updated_at.isoformat() if self.updated_at else None
|
|||
|
|
}
|