diff --git a/crates/erp-ai/src/dto/mod.rs b/crates/erp-ai/src/dto/mod.rs index 72eee09..74a0d48 100644 --- a/crates/erp-ai/src/dto/mod.rs +++ b/crates/erp-ai/src/dto/mod.rs @@ -104,6 +104,51 @@ pub enum AnalysisSseEvent { Error { message: String }, } +// === Agent Function Calling DTO === + +/// Agent 对话消息 +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ChatMessage { + pub role: ChatMessageRole, + pub content: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub tool_calls: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub tool_call_id: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum ChatMessageRole { + User, + Assistant, + Tool, +} + +/// Tool 定义(传给 LLM 的 Function Schema) +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ToolDefinition { + pub name: String, + pub description: String, + pub parameters: serde_json::Value, +} + +/// LLM 返回的 Tool Call +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ToolCall { + pub id: String, + pub name: String, + pub arguments: serde_json::Value, +} + +/// Agent 专用生成响应 +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AgentGenerateResponse { + pub content: Option, + pub tool_calls: Option>, + pub usage: Option, +} + #[cfg(test)] mod tests { use super::*;