From 01c75dbf5de44f9cc44e74dd1a0475277d1d2d27 Mon Sep 17 00:00:00 2001 From: iven Date: Mon, 18 May 2026 02:26:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E6=B7=BB=E5=8A=A0=20Agent=20Functi?= =?UTF-8?q?on=20Calling=20DTO=20=E2=80=94=20ChatMessage/ToolDefinition/Too?= =?UTF-8?q?lCall/AgentGenerateResponse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/erp-ai/src/dto/mod.rs | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) 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::*;