一句话定义:工具输出截断与摘要(Tool Output Truncation & Summarization),是指在把外部工具返回的结果塞给大模型之前,先做一次"减量"——砍掉一部分、或者压成更短的摘要——让它能装进AI 词典:上下文窗口">上下文窗口(context window),同时尽量保住回答当前问题所需要的关键信息。
为什么非做不可
模型能读的字数是有限的,但工具的输出往往是没有上限的。一次数据库查询可能返回两万行,一次网页抓取可能是一整篇带导航栏的 HTML,一条日志可能滚出几十万字符。如果原样丢进去,轻则挤掉前面几轮对话,重则直接超限报错。
打个比方:你要向同事汇报一份档案。把整柜文件搬进会议室,大家就没地方坐了;正确做法是先抽出一页纸的关键信息——或者至少把目录和结论贴在最上面。
几种常用手法
| 手法 | 怎么做 | 代价 |
|---|---|---|
| 头尾截断 | 保留开头和结尾,中间用省略标记带过 | 中间的信息直接丢失 |
| 字段裁剪 | 只取需要的列/键,丢掉无关字段 | 依赖调用方知道要什么 |
| 分页与游标 | 一次只给一页,附带"还有更多"的游标(cursor) | 需要多轮往返 |
| 模型摘要 | 让小模型先读一遍,产出一段短摘要 | 有失真风险,多一次调用成本 |
| 外置存储 | 结果写进文件或临时状态,上下文里只留一个句柄 | 模型得再发起一次读取 |
一个很实用的经验是:错误信息和状态码通常出现在输出的尾部,表头和元信息通常在开头,所以"掐头去尾"式的截断往往比只保留开头更靠谱。但无论如何,截断这件事必须显式告诉模型——在结果里写明"以下内容已被截断,共 N 条,仅显示前 M 条",否则模型会以为自己看到的就是全部,然后一本正经地给出错误结论。
和相邻概念的区别
截断(truncation)是机械的、确定性的操作,快、可预测,但一刀切;摘要(summarization)需要"理解",能保住语义,但会引入延迟和幻觉风险。二者常常配合:先裁字段,再截长度,实在太长才上摘要。
它和检索增强(RAG)也不同:RAG 是在发起查询之前就决定只取相关片段,这里讨论的是结果已经拿到之后再减量。它和"上下文压缩"也不完全重合——后者通常指对整个对话历史做压缩,对象是整条消息流。
对做事的人意味着什么
如果你在写工具:请默认返回可控大小,支持分页,并在截断处留下明确的元信息。别让调用方自己猜结果是不是完整的。
如果你在做智能体(agent):要让它能识别"被截断"信号,并具备重新查询、翻页、换更精确条件的能力。摘要环节要当成有损压缩来对待,关键字段最好原样保留而不是转述。
一句话收尾:工具输出进上下文,得像行李过安检,而不是把行李箱直接扔进客厅。具体各家模型的窗口上限与调用规范,以官方文档为准。
