ai / 20260727
06. 工具结果应该怎样回填给模型
模型不会自动知道工具执行结果,运行时必须把证据带回下一轮
模型生成 pwd 时,并不知道命令会返回哪个路径。执行发生在模型外部,模型内部状态不会随本机进程自动更新。
因此工具调用后还需要一次模型请求:
原任务 → 模型提出调用 → 运行时执行 → 回填结果 → 模型继续判断
省略调用记录,模型可能不知道结果对应哪个动作;省略工具结果,模型只能猜测;直接把原始结果展示给用户,则无法让模型组合多项证据或生成约定格式。
回填不是简单追加字符串
结果至少要表达以下字段:
| 字段 | 解决的问题 |
|---|---|
| 调用标识 | 对应哪次请求 |
| 状态 | 完成、失败、拒绝还是未知 |
| 正文 | 模型实际需要的证据 |
| 错误 | 为什么没有结果 |
| 截断标记 | 正文是否完整 |
| 外部引用 | 完整数据保存在哪里 |
日志可以保留完整字段,发送给模型时再按任务压缩。两者不能共用一段已经删减的字符串,否则调试系统也会失去原始证据。
四种回填方式
| 方式 | 适用内容 | 代价 |
|---|---|---|
| 完整回填 | 小型结构化结果 | 占用上下文 |
| 头尾截断 | 长日志、错误栈 | 中间证据可能丢失 |
| 结构化摘要 | 大型文档、搜索结果 | 摘要可能遗漏 |
| 外部引用 | 数据集、构建产物 | 模型需要再次按需读取 |
100 KB 日志不应默认全部进入上下文。更稳妥的做法是保存原文,回填总行数、错误行、头尾片段和内容引用。模型若需要某一段,再调用带范围参数的读取工具。
截断必须显式
若运行时悄悄截断结果,模型会把不完整数据当作完整数据。结果中应同时提供:
- 原始字节数。
- 已返回字节数。
- 截断位置。
- 是否保留头部或尾部。
- 获取其余内容的方法。
“没有找到错误”与“错误可能位于未返回部分”是两种结论。
并行结果怎样归并
Kimi 第二次请求中,两条 role=tool 消息分别引用 Bash_0 和 Bash_1。运行时可以按调用标识匹配,而不依赖完成时间。
并行工具回填还要保留部分失败。若一个调用成功、一个超时,不能把整批结果表示为单一失败。模型需要看到每个调用的独立状态,才能决定重试哪一个。
我会怎样测量回填策略
让同一工具分别返回 1 KB、100 KB 和 1 MB 文本,对四种策略记录:
| 指标 | 说明 |
|---|---|
| 下一轮输入 Token | 上下文增加多少 |
| 事实回答正确率 | 是否找到指定证据 |
| 额外工具次数 | 是否需要再次读取 |
| 首 Token 延迟 | 大输入是否拖慢响应 |
| 可追踪性 | 是否能回到完整原文 |
结果回填的目标不是尽可能少,也不是尽可能完整,而是在证据完整性、上下文成本和可恢复性之间建立可检查的边界。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:06. 工具结果应该怎样回填给模型
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/06-工具结果怎样回填/