agent runtime lab · 2026 · 技术研究笔记
06. 工具结果应该怎样回填给模型
模型不会自动知道工具执行结果,运行时必须把证据带回下一轮
比较完整回填、截断、摘要和外部引用,分析工具结果怎样影响下一轮推理与上下文长度
研究版 · 10 个章节 · 约 8 分钟 · 更新于 2026-07-27
模型生成 pwd 时,并不知道命令会返回哪个路径。执行发生在模型外部,模型内部状态不会随本机进程自动更新。
因此工具调用后还需要一次模型请求:
原任务 → 模型提出调用 → 运行时执行 → 回填结果 → 模型继续判断
省略调用记录,模型可能不知道结果对应哪个动作;省略工具结果,模型只能猜测;直接把原始结果展示给用户,则无法让模型组合多项证据或生成约定格式。
回填不是简单追加字符串
结果至少要表达以下字段:
| 字段 | 解决的问题 |
|---|---|
| 调用标识 | 对应哪次请求 |
| 状态 | 完成、失败、拒绝还是未知 |
| 正文 | 模型实际需要的证据 |
| 错误 | 为什么没有结果 |
| 截断标记 | 正文是否完整 |
| 外部引用 | 完整数据保存在哪里 |
日志可以保留完整字段,发送给模型时再按任务压缩。两者不能共用一段已经删减的字符串,否则调试系统也会失去原始证据。
四种回填方式
| 方式 | 适用内容 | 代价 |
|---|---|---|
| 完整回填 | 小型结构化结果 | 占用上下文 |
| 头尾截断 | 长日志、错误栈 | 中间证据可能丢失 |
| 结构化摘要 | 大型文档、搜索结果 | 摘要可能遗漏 |
| 外部引用 | 数据集、构建产物 | 模型需要再次按需读取 |
100 KB 日志不应默认全部进入上下文。更稳妥的做法是保存原文,回填总行数、错误行、头尾片段和内容引用。模型若需要某一段,再调用带范围参数的读取工具。
截断必须显式
若运行时悄悄截断结果,模型会把不完整数据当作完整数据。结果中应同时提供:
- 原始字节数。
- 已返回字节数。
- 截断位置。
- 是否保留头部或尾部。
- 获取其余内容的方法。
“没有找到错误”与“错误可能位于未返回部分”是两种结论。
并行结果怎样归并
Kimi 第二次请求中,两条 role=tool 消息分别引用 Bash_0 和 Bash_1。运行时可以按调用标识匹配,而不依赖完成时间。
并行工具回填还要保留部分失败。若一个调用成功、一个超时,不能把整批结果表示为单一失败。模型需要看到每个调用的独立状态,才能决定重试哪一个。
我会怎样测量回填策略
让同一工具分别返回 1 KB、100 KB 和 1 MB 文本,对四种策略记录:
| 指标 | 说明 |
|---|---|
| 下一轮输入 Token | 上下文增加多少 |
| 事实回答正确率 | 是否找到指定证据 |
| 额外工具次数 | 是否需要再次读取 |
| 首 Token 延迟 | 大输入是否拖慢响应 |
| 可追踪性 | 是否能回到完整原文 |
结果回填的目标不是尽可能少,也不是尽可能完整,而是在证据完整性、上下文成本和可恢复性之间建立可检查的边界。
摘要必须能够指向原始证据
结构化摘要中的每条事实应带来源范围,例如日志行号、文件片段标识或结果对象路径。模型回答若引用摘要中的错误信息,调试者才能判断错误来自工具、摘要器还是后续推理。
摘要器也应受到输出契约约束,至少返回事实、未确定项、遗漏范围和原始结果引用。只生成一段流畅文字,会把缺失信息隐藏在表达中。
回填策略需要按工具类型配置
目录列表适合结构化数组,命令日志适合头尾截断和错误行提取,搜索结果适合带来源的分项摘要,二进制产物只应返回元数据与引用。统一使用一个字符上限,会让不同工具失去各自最重要的证据。
回归测试还要加入编码错误、空输出、重复字段和超大单行文本。系统只有在这些边界条件下仍能明确表示完整性,才算拥有稳定的结果协议。
回填预算应由下一步决策决定
工具产生多少内容,与模型下一步需要多少内容不是同一个问题。目录列表需要名称和类型;编译失败需要首个根因及其附近上下文;搜索结果需要出处、相关片段和可重新获取的引用。
| 层次 | 内容 | 默认进入上下文 |
|---|---|---|
| 控制面 | 状态、错误类型、截断标记、耗时 | 是 |
| 决策面 | 下一步动作所需的关键字段 | 是 |
| 证据面 | 完整正文、日志、二进制对象 | 按需引用 |
控制面描述运行状态,决策面支持动作选择,证据面保存可复查材料。MCP 工具规范允许结果同时提供文本、结构化内容和资源引用,并用 outputSchema 校验结构化结果。MCP Tools specification
截断位置会改变结论
保留前 10 KB、后 10 KB 或按相关性选取 10 KB,可能得到不同结论。实验需要三类夹具:关键信息分别位于开头、中间和结尾。每次截断保存原始字节数、保留范围、编码、完整结果引用和原因;模型可见文本也要明确显示缺口。
摘要后再用原文构造的问题反向检查,例如错误码、失败文件、对象数量和是否存在成功回执。数字、路径和对象标识必须原样保留,不能用近似表达。
计量单位应是完整循环
1 KB、100 KB 和 1 MB 三档结果分别采用全文、截断、摘要和外部引用。除了最终回答,还记录下一轮是否重复调用、是否请求补充片段、累计输入 Token、首 Token 延迟和实际引用的证据范围。
摘要组若因为缺少退出码而重复调用三次,单轮输入虽然更少,任务总成本仍可能高于全文组。回填策略只有放进完整 Agent 循环里才能比较。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:06. 工具结果应该怎样回填给模型
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/06-工具结果怎样回填/
