This commit is contained in:
2026-03-24 18:07:22 +08:00
parent e062368ef2
commit 9a16f738d8
121 changed files with 8904 additions and 3940 deletions
+12
View File
@@ -0,0 +1,12 @@
# Schemas 模块
## 作用
定义 API 与工作流的数据模型,统一请求与响应结构。
## 文件
- `agent_input.py` / `agent_output.py`:Agent 入参与出参模型
- `tool_input.py` / `tool_output.py`:工具调用模型
- `chat_message_request.py` / `chat_message_response.py`:聊天接口模型,其中 `ChatMessageRequestDTO` 对齐前端 `query / inputs / response_mode / user / conversation_id / files` DTO
- `stream_input.py`:流式接口输入模型
+22
View File
@@ -0,0 +1,22 @@
"""数据模型层"""
from .agent_input import AgentInput
from .agent_output import AgentOutput
from .tool_input import ToolInput
from .tool_output import ToolOutput
from .chat_message_request import ChatMessageRequestDTO, ChatMessageFileDTO
from .chat_message_response import ChatMessageResponseDTO
from .message_feedback_request import MessageFeedbackRequestDTO
from .messages import MessagesDTO
__all__ = [
"AgentInput",
"AgentOutput",
"ToolInput",
"ToolOutput",
"ChatMessageRequestDTO",
"ChatMessageFileDTO",
"ChatMessageResponseDTO",
"MessageFeedbackRequestDTO",
"MessagesDTO",
]
+4 -12
View File
@@ -1,16 +1,8 @@
from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict, Field
from schemas.chat_message_request import ChatMessageRequestDTO
class AgentInput(BaseModel):
"""统一工作流输入模型(新版本 DTO)"""
class AgentInput(ChatMessageRequestDTO):
"""兼容旧名称,实际与 ChatMessageRequestDTO 使用同一套前端请求模型。"""
model_config = ConfigDict(extra="forbid")
query: str
conversation_id: Optional[str] = None
workflow_type: str = "conversation"
response_mode: str = "blocking"
user: Optional[str] = None
inputs: Dict[str, Any] = Field(default_factory=dict)
+10 -9
View File
@@ -1,22 +1,23 @@
from typing import Any, Dict, List, Optional
from typing import Any, List, Optional
from pydantic import BaseModel, ConfigDict, Field
class ChatMessageFileDTO(BaseModel):
"""文件输入模型(预留)"""
"""文件输入模型(保持与前端 DTO 兼容,允许附带任意文件元数据)。"""
model_config = ConfigDict(extra="allow")
class ChatMessageRequestDTO(BaseModel):
"""/api/workflows/stream 请求模型(对齐标准 chat message 请求)"""
"""/api/workflows/stream 请求模型(对齐前端 ChatMessageRequestDTO)。"""
model_config = ConfigDict(extra="forbid")
query: str
inputs: Dict[str, Any] = Field(default_factory=dict)
response_mode: str = "streaming"
user: Optional[str] = None
conversation_id: Optional[str] = None
files: List[ChatMessageFileDTO] = Field(default_factory=list)
query: Optional[str] = Field(default=None, description="用户输入/提问内容。")
inputs: Any = Field(default_factory=dict, description="App 定义的变量值,默认 {}。")
response_mode: Optional[str] = Field(default=None, description="streaming 或 blocking。")
user: Optional[str] = Field(default=None, description="用户唯一标识。")
conversation_id: Optional[str] = Field(default=None, description="可选会话 ID。")
files: List[ChatMessageFileDTO] = Field(default_factory=list, description="可选文件列表。")
auto_generate_name: Optional[bool] = Field(default=None, description="兼容旧前端字段,当前后端忽略。")
+18
View File
@@ -0,0 +1,18 @@
from typing import Literal, Optional
from pydantic import BaseModel, Field, model_validator
class MessageFeedbackRequestDTO(BaseModel):
"""消息反馈请求模型"""
message_id: str = Field(..., description="消息 ID")
feedback: Literal["like", "dislike"] = Field(..., description="反馈类型: like/dislike")
feedback_content: Optional[str] = Field(default=None, description="点踩反馈内容")
@model_validator(mode="after")
def validate_feedback_content(self):
if self.feedback == "dislike" and not (self.feedback_content or "").strip():
raise ValueError("feedback_content is required when feedback=dislike")
return self
+19
View File
@@ -0,0 +1,19 @@
from typing import Any, Dict, Optional
from pydantic import BaseModel, Field
class MessagesDTO(BaseModel):
"""messages 表字段契约,对齐 Java Messages 实体。"""
message_id: str = Field(..., description="消息 ID")
conversation_id: str = Field(..., description="会话 ID")
user: Optional[str] = Field(default=None, description="用户")
query: str = Field(..., description="用户输入 / 提问内容")
answer: Optional[str] = Field(default=None, description="回答消息内容")
feedback: Optional[str] = Field(default=None, description="点赞 like / 点踩 dislike")
feedback_content: Optional[str] = Field(default=None, description="点踩内容")
created_at: int = Field(..., description="创建时间(毫秒时间戳)")
updated_at: int = Field(..., description="更新时间(毫秒时间戳)")
log: Dict[str, Any] = Field(default_factory=dict, description="当前对话日志(JSON)")
+3 -5
View File
@@ -1,7 +1,5 @@
from schemas.agent_input import AgentInput
from schemas.chat_message_request import ChatMessageRequestDTO
class StreamInputDTO(AgentInput):
"""流式输入 DTO(与统一 AgentInput 保持一致)"""
response_mode: str = "streaming"
class StreamInputDTO(ChatMessageRequestDTO):
"""流式输入 DTO(与统一 ChatMessageRequestDTO 保持一致)。"""
-37
View File
@@ -1,37 +0,0 @@
from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict, Field
class SuperAgentRequest(BaseModel):
"""Super Agent 请求模型"""
model_config = ConfigDict(extra="forbid")
query: str = Field(..., desc ription="用户查询")
conversation_id: Optional[str] = Field(None, description="会话ID")
user_id: Optional[str] = Field(None, description="用户ID")
workflow_type: str = Field(default="conversation", description="工作流类型")
context: Dict[str, str] = Field(default_factory=dict, description="上下文信息")
timeout_seconds: int = Field(default=30, description="超时时间(秒)")
class SuperAgentResponse(BaseModel):
"""Super Agent 响应模型"""
conversation_id: str = Field(..., description="会话ID")
workflow_type: str = Field(..., description="工作流类型")
status: str = Field(default="success", description="状态: success/error")
sql: Optional[str] = Field(None, description="生成的SQL")
result: Optional[str] = Field(None, description="查询结果")
error: Optional[str] = Field(None, description="错误信息")
metadata: Dict[str, str] = Field(default_factory=dict, description="元数据")
class SuperAgentStreamEvent(BaseModel):
"""Super Agent 流式响应事件"""
conversation_id: str = Field(..., description="会话ID")
event: str = Field(..., description="事件类型: sql_generated/sql_executing/result/error/done")
data: str = Field(..., description="事件数据")
timestamp: int = Field(..., description="时间戳(毫秒)")