feat(dispatcher): Eino 采纳 Phase B —— ReAct 智能体 + MCP 工具自主调用
agent 节点带 autonomous:true 时走 ReAct(flow/agent/react),模型在
推理-工具循环里自行决定调哪些 MCP 工具,而非只跑画死的工具节点。
- 新增 eino/react_agent.go:mcpTool 把 MCP 工具(NATS)适配成
components/tool.InvokableTool;agentTools 暴露 wiki_search +
recall_user_memory(context 参数 user_id 服务端注入,不暴露给模型);
runReactAgent 流式回流答复,工具调用经适配器落 ExecEvent 轨迹。
- LLM 接口 + *llm.Pool 增 ToolCallingModel()(openai 组件实现
model.ToolCallingChatModel);fakeLLM 同步桩(返回 nil → 降级普通对话)。
- graph.go:agent 节点按 autonomous 开关分流 ReAct / 普通;自主 agent
不预注入画像(让其经 recall_user_memory 工具按需自取)。
关键修复:默认 StreamToolCallChecker 只看首个流片段,deepseek 常先吐
文本再给 tool call 致漏判 → 改 streamHasToolCall 扫整段流(命中率 ~0→7/7)。
验收:自主工具调用 7/7 命中,args={} 证明注入生效,完整闭环跑通;
make test-go 全绿。已知 eval 看不到工具结果会误判 agent(Phase C 修)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-1
@@ -5,6 +5,15 @@
|
||||
|
||||
---
|
||||
|
||||
## 进度
|
||||
|
||||
- [x] **Phase A · 地基**:`llm.Pool` 换 Eino ChatModel 组件(commit d84b1ec,验收通过)
|
||||
- [x] **Phase B · 质变**:MCP 工具→`InvokableTool` + ReAct agent(模型自主调工具,验收 7/7 命中)
|
||||
- [ ] **Phase C · 编排归一**:`Flow→compose.Graph` + callbacks 桥接
|
||||
- [ ] **Phase D · 状态化执行**:任务生命周期 FSM / HITL 中断恢复 / 多智能体
|
||||
|
||||
---
|
||||
|
||||
## 0. 现状审计(2026-06-22)
|
||||
|
||||
实际跑在 `sundynix-dispatcher/internal/` 下:
|
||||
@@ -81,7 +90,13 @@ github.com/cloudwego/eino-ext/... # ⚠️ 官方组件实现(open
|
||||
|
||||
---
|
||||
|
||||
## Phase B · 质变:函数调用 + ADK 单智能体 〔P1〕
|
||||
## Phase B · 质变:函数调用 + ADK 单智能体 〔P1〕✅ 已完成
|
||||
|
||||
> 落地:新增 `eino/react_agent.go`——`mcpTool` 把 MCP 工具(NATS)适配成 `tool.InvokableTool`;`agent` 节点带 `autonomous:true` 时走 `flow/agent/react`(首批工具:`wiki_search`、`recall_user_memory`,context 参数 user_id 服务端注入、不暴露给模型)。验收:自主工具调用 **7/7 命中**,args={} 证明注入生效,完整闭环(模型→tool→MCP→观察→答复)。
|
||||
>
|
||||
> **两个工程发现**:
|
||||
> 1. **`StreamToolCallChecker` 必须扫整段流**:默认只看首个流片段,deepseek 常先吐文本再给 tool call → 漏判致不调工具。已用 `streamHasToolCall` 扫全流修复(命中率 ~0 → 7/7)。
|
||||
> 2. **eval 看不到工具结果 → 误判**:LLM 评委只见 query+answer,agent 用召回记忆作答会被判"虚构"。Phase C 用 callbacks 把工具上下文喂给 eval 修正。
|
||||
|
||||
**目标**:模型能**自主选择并调用** MCP 工具(ReAct),而非只跑画死的工具节点。这是"工作流执行器 → Agent 平台"的关键一跳。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user