- Add AI学习助手 agent creation script with all 39 tools, 3-layer KG+RAG memory - Add renshenguo (人参果) feishu bot integration (app_service + ws_handler) - Register renshenguo WS client in main.py startup - Add RENSHENGUO_APP_ID / RENSHENGUO_APP_SECRET / RENSHENGUO_AGENT_ID config - Reorganize docs from root into docs/ subdirectories - Move startup scripts to scripts/startup/ - Various backend optimizations and tool improvements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
111 lines
5.7 KiB
Python
111 lines
5.7 KiB
Python
"""
|
||
智能体模型
|
||
"""
|
||
from sqlalchemy import Column, String, Text, Integer, DateTime, JSON, ForeignKey, func
|
||
from sqlalchemy.dialects.mysql import CHAR
|
||
from sqlalchemy.orm import relationship
|
||
from app.core.database import Base
|
||
import uuid
|
||
|
||
|
||
class Agent(Base):
|
||
"""智能体表"""
|
||
__tablename__ = "agents"
|
||
|
||
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="描述")
|
||
workflow_config = Column(JSON, nullable=False, comment="工作流配置")
|
||
budget_config = Column(
|
||
JSON,
|
||
nullable=True,
|
||
comment="执行预算:max_steps/max_llm_invocations/max_tool_calls(可选,覆盖全局默认)",
|
||
)
|
||
version = Column(Integer, default=1, comment="版本号")
|
||
status = Column(String(20), default="draft", comment="状态: draft/published/running/stopped")
|
||
user_id = Column(CHAR(36), ForeignKey("users.id"), 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="agents")
|
||
|
||
def __repr__(self):
|
||
return f"<Agent(id={self.id}, name={self.name})>"
|
||
|
||
|
||
class AgentExtension(Base):
|
||
"""Agent 自主扩展记录表 — 用于 extension_log 工具"""
|
||
__tablename__ = "agent_extensions"
|
||
|
||
id = Column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4()), comment="扩展记录ID")
|
||
extension_type = Column(String(50), nullable=False, comment="扩展类型: agent_created/tool_registered/code_tool_created")
|
||
name = Column(String(100), nullable=False, comment="创建的Agent或工具名称")
|
||
reason = Column(Text, comment="创建原因(为什么需要扩展)")
|
||
detail = Column(JSON, comment="扩展详情(参数、结果等)")
|
||
success_rating = Column(String(20), comment="效果评价: success/partial/failed")
|
||
note = Column(Text, comment="反馈备注")
|
||
user_id = Column(CHAR(36), ForeignKey("users.id"), nullable=True, comment="创建者ID")
|
||
created_at = Column(DateTime, default=func.now(), comment="创建时间")
|
||
|
||
def __repr__(self):
|
||
return f"<AgentExtension(id={self.id}, type={self.extension_type}, name={self.name})>"
|
||
|
||
|
||
class GlobalKnowledge(Base):
|
||
"""Agent 间知识共享表 — 跨 Agent 的全局知识池"""
|
||
__tablename__ = "global_knowledge"
|
||
|
||
id = Column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4()), comment="知识ID")
|
||
content = Column(Text, nullable=False, comment="知识内容摘要")
|
||
embedding = Column(Text, nullable=True, comment="内容 embedding(JSON 序列化)")
|
||
source_agent_id = Column(CHAR(36), nullable=True, comment="来源 Agent ID")
|
||
source_user_id = Column(CHAR(36), nullable=True, comment="来源用户 ID")
|
||
tags = Column(JSON, nullable=True, comment="分类标签")
|
||
scope_kind = Column(String(50), default="agent", comment="作用域类型")
|
||
scope_id = Column(String(100), default="", comment="作用域 ID")
|
||
created_at = Column(DateTime, default=func.now(), comment="创建时间")
|
||
|
||
def __repr__(self):
|
||
return f"<GlobalKnowledge(id={self.id}, source_agent={self.source_agent_id})>"
|
||
|
||
|
||
class KnowledgeEntity(Base):
|
||
"""知识图谱实体表 — 学习知识点、概念、术语"""
|
||
__tablename__ = "knowledge_entities"
|
||
|
||
id = Column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4()), comment="实体ID")
|
||
name = Column(String(200), nullable=False, comment="实体名称")
|
||
entity_type = Column(String(50), nullable=False, default="concept", comment="实体类型: concept/formula/fact/term/task/skill")
|
||
description = Column(Text, comment="实体描述")
|
||
embedding = Column(Text, nullable=True, comment="实体名称+描述的 embedding(JSON 序列化)")
|
||
metadata_ = Column("metadata", JSON, nullable=True, comment="扩展元数据")
|
||
source = Column(String(50), default="extracted", comment="来源: extracted/manual/imported")
|
||
confidence = Column(String(20), default="medium", comment="置信度: low/medium/high")
|
||
scope_kind = Column(String(50), default="agent", comment="作用域类型")
|
||
scope_id = Column(String(100), default="", comment="作用域 ID")
|
||
user_id = Column(CHAR(36), ForeignKey("users.id"), nullable=True, comment="创建者ID")
|
||
created_at = Column(DateTime, default=func.now(), comment="创建时间")
|
||
updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), comment="更新时间")
|
||
|
||
def __repr__(self):
|
||
return f"<KnowledgeEntity(id={self.id}, name={self.name}, type={self.entity_type})>"
|
||
|
||
|
||
class KnowledgeRelation(Base):
|
||
"""知识图谱关系表 — 实体之间的语义关系"""
|
||
__tablename__ = "knowledge_relations"
|
||
|
||
id = Column(CHAR(36), primary_key=True, default=lambda: str(uuid.uuid4()), comment="关系ID")
|
||
source_entity_id = Column(CHAR(36), nullable=False, index=True, comment="源实体ID")
|
||
target_entity_id = Column(CHAR(36), nullable=False, index=True, comment="目标实体ID")
|
||
relation_type = Column(String(50), nullable=False, comment="关系类型: prerequisite/extends/contains/related_to/example_of/applies_to")
|
||
description = Column(Text, comment="关系描述")
|
||
weight = Column(String(20), default="1.0", comment="关系权重")
|
||
scope_kind = Column(String(50), default="agent", comment="作用域类型")
|
||
scope_id = Column(String(100), default="", comment="作用域 ID")
|
||
created_at = Column(DateTime, default=func.now(), comment="创建时间")
|
||
|
||
def __repr__(self):
|
||
return f"<KnowledgeRelation({self.source_entity_id}) -[{self.relation_type}]-> ({self.target_entity_id})>"
|