🔬 技术洞察
模型切换与工具敏感度差异
2026-03-20 · 修复 Beacon 重复发消息 bug 时发现
Claude Code SDK 切到 Minimax M2.7 后,send_message 工具被调用两次:模型主动调用发一条,SDK 又走标准路径发一条。
根因
工具名 send_message 太模糊,语义是"发一条消息",不是"发进度通知"。不同模型/SDK 组合对 tool result 的处理策略不同:
- Claude Code SDK + claude_code preset:知道用
<internal> 标签包裹 tool result → formatOutbound() stripping 后不发送
- Minimax M2.7 + 无 claude_code preset:没有
<internal> 抑制逻辑 → result 直接发出
Fix
工具改名:send_message → send_progress_update,描述加了 explicit anti-pattern:"不要发了 progress update 之后又在 final answer 里重复"。
关键洞察:不同模型对工具名称、描述措辞的敏感度不一样。换模型不只是换个 API key,工具语义和 prompt 处理逻辑都需要跟着调。这是一个需要持续维护的跨模型适配层。
待验证
- Minimax M2.7 切换后是否还有重复发送问题
- 其他 MCP 工具(send_file、schedule_task 等)是否有类似问题
- Skill 工具在不同模型下的触发准确率差异
📖 MSR: Tool-space interference in the MCP era
调研发现:业界 Agent 测试方法
没有银弹——没有任何一个 benchmark 能全面覆盖 agent 能力,必须组合使用。
| Benchmark |
测什么 |
关键数据 |
| SWE-bench |
真实 GitHub Issue 修复 |
Claude Code 80.9% |
| TAU2-Bench |
工具调用准确性 |
专门测 function calling |
| MCP-AgentBench |
MCP 工具场景 |
33 servers, 188 tools, 600 queries(2025) |
| MCP-Bench |
多步 MCP 任务 |
28 servers, 250 tools(ICLR 2026) |
| Sigmabench |
真实代码库表现 |
同模型差 30-60% ⚠️ |
落地建议
- 给每个 MCP 工具写"正确输入 → 期望输出"的单元测试
- 切模型后跑同一套 prompt,看是否有行为差异
- MCP-AgentBench 框架可复用到 Nanoclaw 的 7 个 MCP server
- 在 Nanoclaw 自己代码库上建立 eval 数据集