Files
ai-agent-admin/backend-fastapi/ai_platform/models/agent.py
T
2026-06-08 18:14:59 +08:00

96 lines
5.2 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.
"""
智能体模型
"""
from sqlalchemy import Column, String, Text, Float, Integer, Boolean, JSON, Index
from app.base_model import BaseModel
class Agent(BaseModel):
"""
智能体定义
智能体是一个能够自主决策、调用工具、多轮推理的 AI 实体
支持两种模式:
- autonomous: 自主规划模式 - Agent 自动拆解任务并执行
- dialog_flow: 对话流模式 - 按预定义流程与用户交互
"""
__tablename__ = "ai_agent"
application_id = Column(String(21), nullable=True, index=True, comment="所属应用ID(逻辑外键关联core_application")
is_global = Column(Boolean, default=False, comment="是否在子应用中可见")
name = Column(String(100), nullable=False, comment="智能体名称")
code = Column(String(100), unique=True, nullable=False, comment="智能体编码")
description = Column(Text, default="", comment="智能体描述")
avatar = Column(String(500), default="", comment="头像 URL")
mode = Column(String(20), default="autonomous", comment="运行模式: autonomous/dialog_flow")
status = Column(String(20), default="draft", comment="状态: draft/published/disabled")
persona = Column(JSON, default=dict, comment="人设配置")
system_prompt = Column(Text, default="", comment="系统提示词")
model_id = Column(String(21), nullable=True, index=True, comment="默认模型ID(逻辑外键关联ai_llm_model")
temperature = Column(Float, default=0.7, comment="温度参数(0-2")
top_p = Column(Float, default=1.0, comment="top_p 参数")
max_tokens = Column(Integer, default=4096, comment="最大输出 Token")
max_iterations = Column(Integer, default=10, comment="最大推理轮数")
welcome_message = Column(Text, default="", comment="开场白")
suggested_questions = Column(JSON, default=list, comment="推荐问题列表")
workflow_id = Column(String(21), nullable=True, index=True, comment="关联工作流ID(逻辑外键关联ai_workflow")
enable_memory = Column(Boolean, default=False, comment="是否启用对话记忆")
memory_window = Column(Integer, default=10, comment="记忆窗口大小(最近 N 轮对话)")
enable_streaming = Column(Boolean, default=True, comment="是否启用流式输出(自主规划模式)")
knowledge_base_ids = Column(JSON, default=list, comment="关联的知识库ID列表")
knowledge_config = Column(JSON, default=dict, comment="知识库检索配置(top_k/score_threshold/retrieval_mode等)")
is_public = Column(Boolean, default=False, comment="是否公开")
conversation_count = Column(Integer, default=0, comment="对话数量")
message_count = Column(Integer, default=0, comment="消息数量")
total_tokens = Column(Integer, default=0, comment="总 Token 消耗")
class AgentConversation(BaseModel):
"""
智能体对话
"""
__tablename__ = "ai_agent_conversation"
agent_id = Column(String(21), nullable=False, index=True, comment="智能体ID(逻辑外键关联ai_agent)")
user_id = Column(String(21), nullable=True, index=True, comment="用户ID(逻辑外键关联core_user")
title = Column(String(200), default="", comment="对话标题")
summary = Column(Text, default="", comment="对话摘要")
workflow_run_id = Column(String(21), nullable=True, comment="工作流运行实例ID(逻辑外键关联ai_workflow_run")
waiting_node_id = Column(String(100), default="", comment="等待输入的节点 ID")
extra_data = Column(JSON, default=dict, comment="元数据")
message_count = Column(Integer, default=0, comment="消息数量")
total_tokens = Column(Integer, default=0, comment="总 Token 消耗")
__table_args__ = (
Index("ix_ai_agent_conversation_agent_user", "agent_id", "user_id"),
)
class AgentMessage(BaseModel):
"""
智能体消息
记录对话中的每条消息,包括用户消息、助手回复、工具调用等
"""
__tablename__ = "ai_agent_message"
conversation_id = Column(String(21), nullable=False, index=True, comment="对话ID(逻辑外键关联ai_agent_conversation")
role = Column(String(20), nullable=False, comment="角色: user/assistant/tool/system")
content = Column(Text, default="", comment="消息内容")
attachments = Column(JSON, default=list, comment="附件列表 [{id, type, name, url, mime_type, size}]")
status = Column(String(20), default="completed", comment="状态: pending/completed/failed")
reasoning_steps = Column(JSON, default=list, comment="推理步骤")
tool_calls = Column(JSON, default=list, comment="工具调用记录")
prompt_tokens = Column(Integer, default=0, comment="提示 Token")
completion_tokens = Column(Integer, default=0, comment="生成 Token")
total_tokens = Column(Integer, default=0, comment="总 Token")
elapsed_time = Column(Integer, default=0, comment="耗时(毫秒)")
error_message = Column(Text, default="", comment="错误信息")
feedback = Column(String(20), default="", comment="用户反馈(like/dislike")
feedback_content = Column(Text, default="", comment="反馈内容")
__table_args__ = (
Index("ix_ai_agent_message_conversation_role", "conversation_id", "role"),
)