拆穿 tool calling 本质:不过是 prompt 里的文本协议
Main-Fisherman-2075 · reddit · 2026-10-27
作者在自建网关时意识到,tool calling 并非模型的特殊通道,而只是 prompt 里的普通文本:
- Qwen3 的真实 chat template 是把工具 JSON 粘进 system prompt 的 <tools> 标签;模型用普通 token 写出 <toolcall> 块,服务端(vLLM、llama.cpp 或托管 API)从文本中解析出该块,转成代码收到的 toolcalls 字段,结果再以 <toolresponse> 包裹的用户消息回传。
- 闭源模型同理,只是你看不到模板——Anthropic 文档明示发送工具时会注入隐藏 system prompt(Claude Opus 5.5 上为 286 tokens,工具定义另计)。
由此改变网关工具循环的设计:模型只见 token,网关决定注入什么、失败长什么样、循环何时停止。具体做法包括每个工具结果截断至 64 KB 并附 [cut: N more bytes] 提示、失败工具以 Error: 文本返回而非整个请求失败、最后一轮关闭工具迫使模型作答;对比 LiteLLM proxy 只跑一轮工具就返回并原样粘贴输出。
「编程与Agent」频道最新
- 开源工具 Fanout 解决多 Agent 并行会话合并冲突难题 — crumb_ona_breadstick · 2026-10-27
- 开发者用 Claude 写出 Rust 版 LVGL: declarative UI 库 twine 开源 — Necessary-Pilot-3971 · 2026-10-27
- 分享 prompt 而非代码:一套评测 4B-36B 小模型的 prompt 集合 — yaroslavvb · 2026-10-27
- Maze 发布 Maze Code:用 AI Agent 自动排查代码与依赖漏洞 — AndrewM_Webb · 2026-10-27
- 开发者开源 rumi:用共享文档同时驾驭多个编码智能体 — MuzafferMahi · 2026-10-27
- Bug Hunt Bench 榜单:Sonnet 5.5 max 居首,靠 7 倍轮次硬磨 — PawelHuryn · 2026-10-27