工具输出过长时,不要把全部内容直接塞给模型。常用的四种策略是:截断并明确告知、分页按需读取、先摘要再决定、写入文件只返回引用。 无论用哪种,最重要的是让 Agent 知道“它看到的不是全部”,否则它会基于不完整的信息下结论。

问题从哪来

一次日志查询、一个大文件读取或一次宽泛的搜索,可能返回几万字。直接放入上下文会带来几个问题:挤掉前面的任务说明和历史;关键信息淹没在噪音里;成本和延迟上升;超过上下文上限时调用直接失败。

策略一:截断并明确标注

在工具层设置长度上限,超出部分截掉,并在结果末尾加上明确说明:

[输出已截断:仅显示前 200 行,共 3,412 行。可使用 offset 参数继续读取,或使用 filter 参数缩小范围。]

关键是告诉 Agent 总量、已显示范围和继续读取的方法。

策略二:分页读取

给工具设计 offset/limit 或游标参数,让 Agent 先读一页,判断是否需要继续。适合日志、列表、数据库查询。

策略三:先摘要再决定

对网页、长文档,可以先由一个轻量步骤生成摘要和目录,Agent 根据目录再读取具体章节。注意摘要可能丢失细节,涉及数字和原文引用时要回到原文。

策略四:落盘引用

把完整结果写入文件,只把文件路径、大小和前几行返回给 Agent。Agent 之后可以用搜索或读取工具精确查找。适合命令行输出、批量数据。

在提示词里告诉 Agent 规则

工具输出可能被截断。看到“[输出已截断]”时:
1. 不要基于不完整的结果下结论;
2. 优先用过滤参数缩小范围,而不是逐页读完全部内容;
3. 在最终回答中说明你查看了哪些范围。

设计检查清单

  • 每个工具都有输出上限和截断提示;
  • 搜索类工具支持过滤或关键词参数;
  • 截断提示中包含继续读取的方法;
  • 日志里记录每次截断,便于发现设计不合理的工具。

常见坑

  • 静默截断:Agent 以为看到了全部,结论可能完全错误;
  • 上限过小:频繁分页反而让 Agent 陷入循环;
  • 摘要代替原文:需要精确值时必须回到原始数据。

延伸阅读

任务计划与检查点日志、Agent 预演模式,以及 上下文打包技巧。