AI 多轮对话上下文压缩怎么验收:摘要漂移、关键事实与回放测试
多轮对话最容易在“看起来还能聊”的时候出问题:前十轮里用户说过一次“只读数据库、不要改线上数据”,上下文压缩后模型仍能正常返回结果,却开始主动给出写入操作的建议。这类故障的根源从来不是模型会不会做总结,而是压缩后的结果有没有保住真正影响业务决策的核心事实。
要点速览
- 上下文压缩不是简单删掉旧消息,第一步要先区分事实、偏好、约束和已完成动作。
- 摘要验收至少核对三件事:关键事实保留率、事件时间线顺序、工具返回结果能不能正常回放。
- 摘要出现漂移时,直接回退到原始对话片段或者缩小压缩范围,不要往上面继续叠加新的摘要。
- 提前固定一组带“陷阱约束”的回放用例,比只看最终回答语句通顺度要靠谱得多。

先判断:这是长度问题,还是事实丢失
当对话内容接近上下文窗口上限时,常见的两种做法是直接截掉最早的消息,或者把历史对话合成一段summary。两种方式都能把token总占用量降下来,但它们解决的只是“输入塞不下”的容量问题,不会自动保证业务相关的核心事实还完整留存。
可以先把历史内容分成四类:用户明确给出的约束、已经确认的稳定事实、过程中发生的事件、无意义的闲聊内容。比如“只读”“生产库名为 orders_prod”“上周已经回滚过一次”就属于前三类里必须优先保留的内容,“好的”“我明白了”这类应答话术通常可以直接丢弃。按内容属性分类,比按消息时间一刀切的处理方式要合理得多。
大模型官方API文档对 truncation 的描述也特意提到了这一点:自动截断会从更早的消息开始逐个移除内容,要是禁用截断功能则可能在内容超限时直接返回错误。对业务系统来说,压缩策略必须是应用层可以主动检查的明确状态,而不是交给底层逻辑处理的不可见副作用。
摘要里必须留下哪些字段
建议把摘要当成一个可以独立验收的中间产物,而不是一段写得好看的自然语言。最小可用的结构化结构可以包含下面几个字段:
| 字段 | 作用 | 验收问题 |
|---|---|---|
| constraints | 用户明确提出的限制 | 是否还能阻止模型给出越权操作的建议? |
| facts | 已经确认过的业务事实 | 对应的数字、名称和状态有没有被改写? |
| timeline | 之前发生过的动作的先后顺序 | 事件的先后关系有没有被颠倒? |
| tool_results | 工具调用的真实返回内容 | 能不能明确区分“已经调用”和“计划调用”两种状态? |
这里有个非常实用的判断标准:如果某个字段的值会改变模型下一轮的决策结果,就不能只把它塞进模糊的自然语言摘要里,最好直接保留原始值、来源消息编号和更新时间。尤其是金额、版本、权限、订单状态这类关键信息,摘要只模糊说一句“已经处理过”是完全不够的。
用回放样例抓住摘要漂移
回放测试不用一开始就直接接入真实用户数据。先准备十到二十组短对话用例,每组都故意埋一个很容易被压缩逻辑漏掉的关键事实,然后在第N轮对话触发摘要生成操作,再用同一个问题继续向模型询问结果。测试重点要放在约束和事实能不能完整复现,而不是生成的回复语言够不够华丽。
{
"conversation_id": "case-readonly-07",
"must_keep": ["只读数据库", "订单状态以数据库结果为准"],
"timeline": ["用户提出查询", "工具返回订单为 paid", "用户要求解释原因"],
"probe": "下一步可以直接把订单改成 refunded 吗?",
"expected": "拒绝写入建议,并说明还没有得到退款授权"
}
每次完成压缩之后至少跑三条探针:第一条检查用户给出的约束有没有保留,第二条检查事件时间线有没有错乱,第三条检查工具返回结果有没有失真。把返回结果分成“保留、改写、遗漏、幻觉”四类,只要出现“遗漏”或者“幻觉”,这一版的摘要就不能往下送入下一轮的上下文。
回放测试用例最好覆盖四个场景:摘要刚生成完成、连续两次做摘要压缩、工具调用之后执行压缩、用户主动纠正旧事实。最后一种场景最容易暴露问题:旧摘要里写着“套餐为标准版”,之后用户已经改成了专业版,如果摘要里没有记录对应的版本号和更新时间,模型很容易把前后两个不同的状态混在一起。
压缩预算怎么设才不会越压越乱
压缩操作不是越早做越好,也不是压得越狠就越省token。可以给最近的N条消息留出一个稳定的保留窗口,把更早的历史内容分成“原文保留区”和“摘要区”,同时给摘要设置最大长度限制。每次压缩只处理新增的一段历史内容,不要把之前已经生成好的旧摘要再重新概括成更短的摘要。
一个简单的 token 预算规则可以参考:输入内容估算达到模型上限的70%时就开始准备压缩工作,达到80%之前要完成一次摘要生成,最近20%的消息全部保留原始内容。这些数值只是初期做实验的参考起始参数,真正上线之前要结合所用模型、工具定义和输出上限重新测量调整。
要是压缩后的摘要比原始消息短很多,语气却比原始内容肯定得多,先别急着把它当成压缩成功的标志。信息总量减少的同时确定性反而上升,往往意味着模型自行补全了很多没有原始依据的内容。把来源消息编号直接写入摘要,就能快速区分哪些是原文明确给出的事实,哪些是模型自行推导出来的内容。

上线前的四道门
- 结构门:生成的摘要能完整解析出 constraints、facts、timeline 和 tool_results 四个字段,缺任意一个字段就直接触发回退逻辑。
- 事实门:关键数字、名称、权限和状态信息,和原始对话里的对应消息逐项比对。
- 回放门:固定探针用例在压缩前后能得到相同的业务结论,允许具体措辞不一样,但业务边界不能出现变化。
- 恢复门:发现摘要漂移之后能直接回到原始对话片段或者上一个可用的摘要版本,不会把出错的错误摘要继续往下传递。
做线上监控的时候不要只记录token用量这一项指标。至少要额外增加摘要版本、覆盖的消息范围、有效保留字段数量、回放失败类型和回退次数几个维度。这样线上出现“模型回答突然和之前不一样”的问题时,可以先定位问题出在压缩环节、检索环节还是模型本身的逻辑变化。
相关问题
摘要越短,模型回答就越稳定吗?
不一定。短摘要确实能降低输入的token成本,却很可能把重要的限制条件弄丢。压缩稳定性要靠带约束的回放测试结果来衡量,不能只看最终生成摘要的字数多少。
可以连续把摘要再压缩一次吗?
可以做二次压缩,但对应的风险会同步叠加。更稳妥的做法是保留原始片段的边界,第二次压缩的时候仍然从原始对话内容或者带原始来源的结构化记录里取材,不要直接压缩之前生成的纯文本摘要。
工具调用结果需要全部放进摘要吗?
不需要把所有工具返回的完整内容全部复制进上下文,但必须保存结果状态、核心关键字段、来源编号和对应的时间点。“计划调用”的动作不能被写成“已经完成”,调用失败的结果也不能直接省略掉。
把“能继续聊天”改成“能通过回放”
上下文压缩真正要解决的从来不是把对话弄得越来越短,而是保证下一轮对话的处理逻辑仍然严格遵守之前双方已经确认过的所有边界。把摘要当成有明确字段、有版本号、可回放验证的中间状态,再用约束、时间线和工具结果三类探针持续做验收,才能确认省出来的输入空间没有带来新的隐性风险。
GitHub Desktop 切换分支前怎么处理未提交改动:暂存、丢弃与恢复边界
- 上一篇
- GitHub Desktop 切换分支前怎么处理未提交改动:暂存、丢弃与恢复边界
- 下一篇
- Go 泛型约束怎么表达数值集合:底层类型、接口组合与类型推断边界
-
- 科技周边 · 人工智能 | 2小时前 | 缓存 · 人工智能 · 提示词工程 · 提示词缓存 cache_control Prompt Caching 静态前缀 cache_read_input_tokens
- 提示词缓存命中率低应如何划分静态前缀
- 453浏览 收藏
-
- 科技周边 · 人工智能 | 4小时前 |
- 模型路由怎样按任务难度分配不同推理预算
- 232浏览 收藏
-
- 科技周边 · 人工智能 | 7小时前 |
- 结构化输出遇到递归字段时怎样约束模式
- 215浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 | 人工智能 · 工具调用 ·
- 智能体工具调用失败后怎样设计可控重试
- 236浏览 收藏
-
- 科技周边 · 人工智能 | 11小时前 |
- 多模态模型输入图片过大时如何控制视觉令牌
- 196浏览 收藏
-
- 科技周边 · 人工智能 | 13小时前 |
- 推理服务连续批处理怎样减少 GPU 空转
- 404浏览 收藏
-
- 科技周边 · 人工智能 | 17小时前 | 人工智能 · LoRa PEFT merge_and_unload 量化推理 模型合并
- LoRA 合并权重后输出变化过大应检查什么
- 404浏览 收藏
-
- 科技周边 · 人工智能 | 21小时前 |
- RAG 分块重叠过大为什么会降低检索多样性
- 409浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 人工智能 ·
- 合成数据能否替代真实样本:覆盖率与偏差检查方法
- 128浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- 提示词版本怎么管理:样例、变量与回归集一起提交
- 111浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 395次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 473次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 479次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 423次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 249次使用
-
- Go 1.25 testing.Attr 实战:别让 CI 测试报告只剩一堆失败日志
- 2026-06-02 478浏览
-
- Go 令牌桶限流实战:用 time.Ticker 保护高频接口
- 2026-06-13 484浏览
-
- Go 结构化日志库怎么选:标准库 slog、zap 与 zerolog 的取舍
- 2026-07-22 151浏览
-
- Go 1.26 的 go fix 怎么安全改造旧项目:从扫描到回归验证
- 2026-07-24 396浏览
-
- Go netip 怎么做 CIDR 白名单:解析、匹配与失败回归
- 2026-07-24 167浏览

