--- title: Clarify Tool 澄清工具 created: 2026-04-16 updated: 2026-04-16 type: entity tags: [tool, agent, websocket] sources: [packages/backend/src/modules/netaclaw/tools/builtin/clarify.ts, packages/backend/src/modules/netaclaw/runtime/attempt.ts, packages/backend/src/modules/netaclaw/gateway/server.ts, packages/frontend/src/modules/agent/components/clarify-card.vue] --- # Clarify Tool 澄清工具 ## 概述 Agent 在 ReAct 循环中向用户提出澄清问题的交互工具。支持选择题(最多4项)和开放式问题。通过 Promise 阻塞 Agent 执行,等待用户回答后继续。注册在 [[tool-catalog]] 的 `interaction` 工具集。 ## Schema 定义 ```typescript const ClarifyParams = Type.Object({ question: Type.String({ description: '要问用户的问题' }), choices: Type.Optional(Type.Array(Type.String(), { maxItems: 4, description: '预设选项(最多4个)' })), }); ``` ## 数据流 ``` Agent 调用 clarify → attempt.ts 检测 → onClarifyRequest 回调 ↓ WebSocket 网关: 生成 requestId → clarifyResolvers.set() → 发送 clarify_request ↓ 前端 Store: 创建 role='clarify' 消息 → 渲染 clarify-card 组件 ↓ 用户点击选项/输入回答 → sendClarifyResponse() → 发送 clarify_response ↓ WebSocket 网关: clarifyResolvers.get(requestId).resolve(answer) ↓ Agent 继续 ReAct 循环 ``` ## 核心文件 | 文件 | 职责 | |------|------| | `tools/builtin/clarify.ts` | 工具定义 + Schema | | `runtime/attempt.ts:72-93` | 特殊处理:检测 clarify 调用,触发回调 | | `gateway/server.ts:263-269` | 生成 requestId,Promise 阻塞,转发 WS 事件 | | `gateway/protocol.ts:132-136` | `clarify_request` / `clarify_response` 协议定义 | | `前端 store/chat.ts:248-258` | 接收事件,创建 clarify 消息 | | `前端 components/clarify-card.vue` | 渲染问题+选项按钮+自定义输入 | | `service/agent_channel.ts:347-384` | 微信渠道纯文本降级 | ## 微信渠道降级 微信不支持 WebSocket 交互,采用**纯文本 + 数字映射**方案: 1. 构造文本消息:`❓ 问题\n1. 选项1\n2. 选项2\n请回复数字或直接输入` 2. 通过微信 API 发送,存入 `pendingClarify` Map 3. 用户回复数字 → 映射到 `choices[num-1]`;回复文本 → 直接使用 4. 解决 Promise,Agent 继续 ## WebSocket 协议 ```typescript // 服务端 → 客户端 { type: 'clarify_request', sessionId, data: { requestId, question, choices? } } // 客户端 → 服务端 { type: 'clarify_response', sessionId, requestId, answer } ``` ## 关联页面 - [[tool-catalog]] — 工具目录(interaction 工具集) - [[agent-runtime]] — ReAct 循环中的 clarify 回调 - [[websocket-gateway]] — clarify 事件转发 - [[agent-channel]] — 微信渠道降级实现 - [[tool-system]] — 工具系统总览