Files
aiagent/backend/app/models/node_template.py
2026-01-19 00:09:36 +08:00

67 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
节点模板模型
用于管理和复用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
}