候选排名只给出单个片段的先后, 生成器需要的却是一组能够共同支持答案的证据. 对比较问题, 前几名若都来自同一对象, 排名再准也缺另一侧信息;对多跳问题, 每个片段单独相关仍可能无法连接;对制度问题, 主规则与例外必须同时出现. 上下文构造因此是从排序列表到证据集合的独立优化阶段.
设候选为 , 每个片段长度为 , 上下文预算为 . 选择器要在 下兼顾相关性、覆盖和冗余. 实现可以使用贪心、MMR、子模选择或任务专用槽位, 但都要输出可复现的选择记录. top-k 是一种选择策略, 不是上下文构造的定义.
从排序到集合
新增覆盖
选择第一个片段后, 第二个片段的价值取决于它带来多少新证据. 可以给查询分解出实体、时间、条件和子问题槽位, 每加入一个候选就更新未覆盖槽位. MMR 用相关性减去与已选集合的最大相似度, 能抑制近重复, 但相似度不等于证据功能, 同主题的两个不同例外不能被误删.
滑窗切分会制造重叠候选. 去重时应比较来源区间、逻辑文档和支持命题, 而不只是向量相似度. 相同段落的不同版本要先按任务时间过滤, 当前有效来源之间发生真实冲突时则共同保留并交给生成阶段说明.
父子扩展与压缩
小片段适合检索, 完整父段适合阅读. 父子检索在命中子片段后扩展标题、相邻段或整节. 扩展范围应由证据完整性实验选择, 因为把整篇文档放回上下文会稀释关键条件. 表格扩展要保留表头、单位和相关行, 代码扩展要保留签名和必要依赖.
压缩器可以抽取与查询有关的句子或生成摘要. 抽取更容易保持原文位置, 摘要更短却可能改变限定语. 派生摘要必须保留回链, 数字、否定和行动条件优先引用原始证据. 压缩前后分别测证据覆盖和命题支持, 不能只看 token 减少.
顺序、预算与模型利用
token 预算分配
上下文预算包括系统指令、对话历史、证据、工具结果和输出余量. RAG 证据只能使用其中一部分. 预算器可以按查询类型调整: 精确事实保留少量直接证据, 比较和多跳预留多个来源, 长文总结则分阶段读取. 超预算时要记录被移除的证据, 方便判断回答错误是否来自截断.
片段长度不同, 以条数限制会产生不稳定 token. 选择时可以比较单位 token 的新增覆盖, 同时给关键来源设置最低保留. 输出上限也不能被证据挤占, 否则模型在有完整材料时仍会截断回答和引用.
位置效应
长上下文窗口提供容量, 不保证各位置被均匀利用. 关键证据的顺序应在目标模型上用对照实验确定. 将最重要证据放在开头或结尾是一种候选策略, 不能脱离模型和提示宣称固定最优. 更可靠的办法是减少无关内容, 明确证据 ID, 并让生成任务逐项覆盖问题槽位.
相邻证据的排序也影响模型是否混合来源. 每个证据包使用清晰边界, 来源与正文分开, 不把检索分数伪装成事实置信度. 冲突来源按版本和权威属性展示, 让后续验证器检查回答是否越过证据.
Exit code: 0 Wall time: 0.2 seconds Output:
上下文工程决定模型在一次调用中能看到哪些指令,证据,状态,工具和历史,以及它们如何排序,截断,缓存,追踪和隔离.窗口长度只是容量上限;信息是否相关,可信,可定位并处在正确权限边界,决定模型能否可靠使用它.
时效与口径:本文截至 2026-09-01.不同模型和 API 对角色,工具 schema,图像,隐藏控制 token,输入/输出合计方式及缓存计费的定义不同.设计必须绑定具体模型,tokenizer,chat template 和服务版本,不能只按字符数或厂商宣传的最大窗口估算.
先写"上下文契约"
每一种上下文单元都记录来源,优先级,信任级别,生命周期和预算.
| 单元 | 作用 | 信任与权限 | 典型失效 |
|---|---|---|---|
| 平台/系统指令 | 身份,规则,输出与安全边界 | 高优先级,但仍需服务端强制控制 | 规则冲突,过长,不可测试 |
| 用户请求 | 当前目标和用户提供的数据 | 用户可控,不自动可信 | 越权,歧义,直接注入 |
| 对话状态 | 已确认决策,未决问题,任务进度 | 来自历史,应可追溯 | 过时,错误摘要,角色混淆 |
| 检索证据 | 文档,数据库,搜索结果 | 外部数据,不是指令 | 召回错误,陈旧,间接注入 |
| 长期记忆 | 跨会话偏好与稳定事实 | 需授权,来源与过期时间 | 错记,隐私泄露,跨用户串扰 |
| 工具 schema | 模型可请求的操作接口 | 能力描述不等于执行授权 | 工具过多,参数含糊,权限过宽 |
| 工具结果 | 外部系统返回的数据 | 默认不可信,可能含攻击文本 | 超长,伪造指令,敏感信息 |
| 输出约束 | JSON/schema,引用,长度和停止条件 | 应由运行时同时验证 | 只靠自然语言约束 |
契约至少回答:
- 哪些内容可以发给模型,哪些必须留在服务端?
- 冲突时由哪一层裁决?
- 每个事实来自哪里,何时失效?
- 模型能建议什么,执行器允许做什么?
- 超出预算时按什么策略降级,而不是随机截断?
Token 预算必须在调用前闭合
对输入与输出共享窗口的常见接口,可用下式做初始预算:
是该模型版本公开并被当前服务端接受的窗口上限.预算时要使用实际 tokenizer 与 chat template;角色标记,工具定义,结构化输出 schema,图像 token 和服务端包装都可能计入.最终以 API 的 usage 字段和本地序列化快照校验.
推荐先保留:
- 输出上限与停止所需余量;
- 当前用户任务和不可丢约束;
- 最小必要的系统规则与工具;
- 经过筛选的证据;
- 仍影响当前任务的状态;
- 可替代的逐字历史放在最低优先级.
当预算不足时,应显式选择"减少候选,压缩历史,二次检索,分步执行或拒绝",而不是从左侧机械截断.
同一窗口也有真实内存成本
上下文 token 不只是计费单位,还会进入 prefill 并形成 KV cache.对标准 MHA/GQA/MQA,纯 K/V 数值载荷为:
Meta 官方 SKU 给出 Llama 3.1 70B 为 80 层,64 个 query heads,8 个 KV heads,hidden dim 8192,因此 head dim 为 128.Meta llama-models SKU
在无共享,无块尾开销的 BF16 口径下:
单请求 8K 约 2.5 GiB,16 条同长度活动序列约 40 GiB.这里用的是 8 个 KV heads,不是 64 个 query heads;结果只含 K/V 数值载荷,不含权重,工作区,分页元数据或并行布局.完整推导见 KV 缓存与内存优化.
因此"窗口装得下"不等于"并发服务得起".容量规划应同时看 prompt/output 长度分布,并发驻留序列,TTFT,每 token 延迟和 cache 分配.
长上下文不保证长距离利用
Liu 等人在多文档问答和 key-value retrieval 的受控实验中发现,多种模型对证据位置敏感,相关信息位于开头或结尾时常优于位于中间;论文没有证明所有模型,所有任务都遵循固定 U 型曲线,也没有把现象归因为注意力二次复杂度.Lost in the Middle
应用评测应改变而不仅是增加长度:
- 固定证据内容,分别放在前,中,后位置;
- 改变无关文档数量和相似干扰项;
- 分别测试单跳,多跳,精确复制和综合归纳;
- 记录证据是否被引用,而不只看答案是否流畅;
- 覆盖短,中,长多个区间,不只做最大窗口 needle test.
组织策略应先按任务语义决定:稳定规则放在清晰的高优先级区域;证据附 source ID;当前问题与输出要求靠近生成位置;但任何位置启发式都要以目标模型实测为准.
RAG 是证据选择管线
原始 RAG 工作把参数化生成器与可检索的非参数记忆结合,并在知识密集型任务上评估;它不是"向 prompt 塞向量库 Top-k"的同义词.RAG 原论文
生产管线至少包含:
- 查询理解:保留原问题,同时生成可审计的检索 query 或过滤条件;
- 召回:按数据类型选择稀疏,稠密,结构化或混合检索;
- 权限过滤:先按租户,ACL,地域和时间范围限制候选;
- 去重与聚合:合并同源切片,避免一个文档挤占全部预算;
- 重排:用当前问题和候选共同评分;
- 打包:保留标题,来源,版本,时间,chunk ID 与可引用边界;
- 生成:要求答案区分证据,推断和未知;
- 核验:检查引用是否真的支持相邻主张.
长上下文与 RAG 不是二选一.长窗口可容纳更多原文,RAG 可减少无关内容和权限暴露;选择取决于语料规模,更新频率,审计要求,延迟和任务对完整阅读的需求.RAG 细节见 RAG.
压缩要标注信息损失
| 策略 | 保留什么 | 主要风险 |
|---|---|---|
| 滑动窗口 | 最近若干轮 | 丢失早期承诺,身份和约束 |
| 抽取式压缩 | 原文中的关键句/字段 | 选择器漏掉隐含关系 |
| 生成式摘要 | 语义概括和决策 | 否定词,数值,来源被改写 |
| 结构化状态 | 明确字段,任务和参数 | schema 覆盖不了开放语义 |
| 分层摘要 | 事件→阶段→全局概览 | 多次摘要累积漂移 |
| 按需回查 | 摘要加原文指针 | 依赖检索可靠性和原文可用性 |
摘要不是事实源.每条压缩状态最好保留:
- 原消息/文档 ID 和版本;
- 被抽取的事实,决策或未决项;
- 主体,作用域与有效期;
- 原文定位或可回查引用;
- 生成器版本与压缩时间;
- 是否由用户确认.
压缩器的离线评测要专门覆盖否定,数字,日期,身份,权限,未决问题和引用一致性.论文中的压缩率不能直接转成所有任务的质量承诺.
记忆不是无限对话历史
可以把记忆分为:
- 工作状态:当前计划,变量,工具结果和未决事项,任务结束后可丢弃;
- 情节记忆:某次交互发生过什么,带时间与原始记录;
- 语义记忆:经确认且相对稳定的偏好或事实;
- 程序性规则:应用流程与策略,通常应版本化在服务端,而不是由模型自由写入.
写入长期记忆前要判定用户授权,稳定性,敏感性,主体和过期时间.读取时先过滤租户和权限,再按相关性与时效排序.模型提议的记忆不应未经验证直接成为系统事实;用户纠正和删除请求必须能传播到索引,摘要与缓存副本.
工具 schema 也是上下文
工具名称,描述,参数 schema,枚举和示例都会占 token,也会影响模型选择.工具越多不一定越好:相似工具会增加歧义,宽泛字符串参数会把校验压力推给模型.
建议:
- 只注入当前任务可能使用的工具;
- 名称稳定且动词明确,参数使用窄类型,枚举和必填约束;
- 区分读取,写入,外发和破坏性操作;
- 工具结果包含状态,数据,错误类型和截断说明;
- 大结果保存在外部,只把摘要与可回查 ID 放回上下文;
- 模型输出的参数必须经 schema 与业务规则二次验证;
- 高风险操作在执行器层做鉴权,幂等和用户确认.
工具调用格式依模型模板而异,不能把某家族的 role/token 直接复制到另一模型.详见 Function Calling.
外部内容默认不是高权限指令
网页,邮件,文档,数据库字段和工具结果都可能包含"忽略上文""泄露系统提示""调用某工具"等文本.Greshake 等展示了恶意指令通过被检索内容进入 LLM 应用的间接提示注入路径;这说明检索内容不能因为来自工具就自动升级为可信指令.Indirect Prompt Injection 原论文
防线应落在系统架构,而不是寻找一句万能提示词:
- 数据与指令使用不同结构和来源标签;
- 检索前执行 ACL,检索后仍按不可信数据处理;
- 模型只提出工具调用,独立执行器校验权限,参数与目的;
- 读工具和写工具使用最小权限及独立凭据;
- 外发,付款,删除和权限变更要求确定性策略与确认;
- 敏感信息在进入模型前最小化或脱敏;
- 记录证据到工具调用的因果链,支持事后审计;
- 用真实攻击文档和工具输出做持续红队测试.
Agent 运行时的状态和权限边界见 Agent.
缓存分三层理解
| 缓存 | 缓存对象 | 命中条件 | 主要风险 |
|---|---|---|---|
| KV prefix cache | 已计算前缀的 K/V | 精确 token 前缀及模型运行条件兼容 | 跨租户泄漏,时序侧信道,低命中 |
| 检索缓存 | query/过滤条件到候选 | 数据版本与权限仍有效 | 陈旧,ACL 变化,索引不一致 |
| 答案/语义缓存 | 请求到最终输出 | 业务语义和用户权限允许复用 | 错答扩散,个性化串扰,不可解释命中 |
vLLM 的自动前缀缓存按 token 块及父前缀哈希复用,只缓存完整块;它减少重复 prefill,不会跳过新输出的 decode.vLLM Prefix Caching
为了提高 prefix 命中率,可把稳定系统提示,工具定义和共享文档放在前面,把时间戳,request ID 等动态字段后移.但任何重排都不能改变安全优先级或模型专属 chat template.缓存键必须包含模型/adapter/template/数据版本与租户隔离信息.
可观测性:保存"模型实际看见的版本"
每次调用至少记录可脱敏审计的:
- model,revision,tokenizer 与 chat template 版本;
- 各上下文区段 token 数及截断原因;
- 检索 query,候选 ID,分数,重排和最终引用;
- 记忆读取/写入 ID,版本,过期时间和用户授权;
- 工具 schema 版本,调用参数,权限判定和结果大小;
- prefix/retrieval/answer cache 的 hit/miss 与隔离键;
- prompt hash,输出,停止原因,TTFT 和端到端延迟;
- 安全过滤,人工确认和降级路径.
敏感原文不应为了可观测性无限保留.可用内容哈希,访问受控的原始记录和分层日志满足排障与隐私要求.
评测矩阵
| 维度 | 变量 | 主要指标 |
|---|---|---|
| 预算 | 短/中/长,工具多少,证据多少 | 成功率,超限率,成本,延迟 |
| 位置 | 证据在前/中/后 | 正确率,引用支持率 |
| 检索 | 召回,重排,干扰,无答案 | Recall,MRR/nDCG,答案忠实度,拒答 |
| 压缩 | 原文/摘要/结构状态 | 事实保留,否定/数字错误,节省 token |
| 记忆 | 新鲜/过时/冲突/跨用户 | 正确读取,删除传播,串扰率 |
| 工具 | schema 版本,错误,超长结果 | 选工具,参数正确率,恢复率 |
| 安全 | 直接/间接注入,权限升级 | 攻击成功率,误拒率,未授权操作数 |
| 缓存 | hit/miss,版本变化,租户 | 命中率,TTFT,错误复用,隔离性 |
在线指标要与离线切片对应.平均成功率无法说明长上下文中间位置,无答案请求或高权限工具是否安全.
上线检查清单
- 每类上下文都有来源,优先级,信任级别,生命周期和 token 上限.
- 使用实际 tokenizer/chat template 计数,并为输出和包装留余量.
- 不把窗口上限等同于有效利用率或可承载并发.
- RAG 先做 ACL,再召回,重排,打包和引用核验.
- 摘要保留原文指针,否定,数字,日期和权限做专项回归.
- 记忆写入需要授权,主体,来源,有效期和删除传播.
- 工具 schema 最小化,执行权限由模型外的确定性代码控制.
- 外部文档和工具结果按不可信数据处理.
- 三类缓存使用独立键,版本和租户隔离策略.
- 评测覆盖预算,位置,干扰,无答案,注入和版本变更.
- 保存可复现的上下文快照或哈希,不记录不必要的敏感原文.
一手来源
- Liu, N. F., et al. Lost in the Middle: How Language Models Use Long Contexts, TACL 2024.
- Lewis, P., et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, NeurIPS 2020.
- Greshake, K., et al. Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection, 2023.
- Meta. Llama model SKU definitions.
- vLLM. Automatic Prefix Caching.
- Google AI for Developers. Long context.
- Anthropic. Context windows.
15. 选择器的对照实验
15.1. 固定候选再比较集合
选择实验固定同一批候选, 分别运行直接 top-k、去重 top-k、MMR、证据槽位和压缩方案. 每组记录最终证据 ID、token、槽位覆盖、重复率与冲突保留. 固定候选排除检索随机性, 差异来自集合构造.
各组上下文送入同一个生成模型, 再测答案、命题支持与引用覆盖. 集合覆盖提高但答案不变时, 检查顺序、格式和模型利用;答案提高而支持率下降时, 模型可能使用参数记忆补全. 两层指标共同解释结果.
15.2. 预算曲线
从短到长扫描预算, 绘制证据集合覆盖、支持率、延迟和 token 曲线. 曲线可能先升后降:新增证据补足信息, 继续增加则带来重复和冲突. 工作点根据任务损失选择, 不默认填满模型窗口.
人工复核曲线转折点附近的样本, 查看新增或删除片段承担什么功能. 表格、代码、多跳和冲突来源分别取样. 观察用于修改槽位与扩展规则, 随后回到固定测试集验证.
16. 缓存与长度复现
16.1. 选择结果缓存
缓存键包含查询规范化结果、候选身份与版本、选择器配置、tokenizer 和预算. 只用查询文本会在语料或权限变化后返回旧证据. 用户可见域参与隔离, 删除事件主动失效相关键.
缓存值保存证据包和选择说明, 不只保存拼接字符串. 更换生成模型时可以复用同一证据对照, 也能重新排列而无需再次检索. 敏感正文按保留策略加密或保存受控引用.
16.2. 实际序列长度
检索器、重排器和生成器可能使用不同 tokenizer. 上下文预算按实际生成模型计数. 消息包装、证据 ID 和分隔符也占 token, 预算测试使用最终序列化输入. 输出预留进入约束, 避免模型在引用尚未完成时被最大长度截断.
这些长度数据与模型版本一同保存, 保证同一上下文可以再次构造和核验. 这组记录让上下文选择、位置效应和压缩损失能够在相同证据上复算, 并为生产回归保留稳定参照. 上下文是一条有损信道
候选集合 经过选择、压缩和排序得到上下文 , 模型再生成 . 数据处理不等式给出 : 一旦选择器删掉与问题有关的信息, 生成器无法从上下文恢复它. 参数记忆可能偶然补全, 却不构成证据链恢复.
信息瓶颈目标可写为在预算下最大化 并限制 或 token 长度, 其中 是任务答案. 工程中不直接估计互信息, 用证据组覆盖、冗余率和 token 作为代理. 压缩减少长度的同时若降低条件完整率, 便越过了有用瓶颈.
一个规则由主条款、例外和生效日期三段组成. 选择器只保留主条款时 token 最少, 对普通问题足够, 对例外日期问题却产生系统性错误. 任务感知槽位要求三段共同出现, 成本增加但保住决定答案的信息. 最优上下文依赖问题, 不能由文档级摘要固定替代.
位置效应的配对实验
固定证据和干扰片段, 构造目标证据位于开头、中间、末尾三种上下文, token 数与其他顺序不变. 一百个问题若准确数为 84、61、80, 中间位置损失明显. 再把上下文缩短但保持目标在中间, 可以区分位置与总长度效应.
位置实验还要记录引用. 模型可能答案正确却引用靠前干扰项, 说明生成来自参数记忆或引用对齐失败. 把证据 ID 随位置一起移动, 检查命题支持与引用映射, 不能只比较字符串答案.
长上下文标称窗口给出可输入上限, 不保证各位置利用均匀. 生产预算使用实测有效窗口: 在目标问题切片上寻找覆盖、位置稳定性和延迟的工作点. 超过工作点的内容进入分步检索、层级摘要或多轮证据合并. Lost in the Middle 的机制边界
长上下文位置效应不是一个固定 U 形常数. 它受模型训练长度、位置编码、指令位置、证据显著性和干扰相似度影响. 开头证据接近任务指令, 末尾证据接近生成位置, 中间内容可能在多层注意力竞争中获得较弱利用. 这个解释描述观察机制, 不能从注意力权重直接推出模型“理解了”哪段.
反例是把唯一答案字符串放在中间, 模型仍能抽取; 当问题需要把中间两段条件组合, 性能却下降. 简单 needle 测试只测定位, 不代表多证据推理. 评测同时包含唯一词检索、条件组合、冲突解析和引用对齐.
位置配对实验控制总长度与干扰内容, 只旋转证据位置. 再做第二组控制证据位置而改变总长度. 第一组估计纯位置效应, 第二组估计长度与干扰效应. 两者若同时变化, 无法判断压缩或重排为何有效.
顺序、去重与压缩的联合目标
将上下文序列记作排列 , 效用可写为 . 集合决定看见哪些证据, 排列决定证据处在哪, 压缩改变每项内容和长度. 三步互相影响, 不能各自独立取局部最优.
完全相同片段可按来源范围去重, 高相似片段可能包含不同限定条件. 若两段余弦 0.95, 一段写“适用于员工”, 另一段补“外包除外”, 仅凭相似阈值删除后一段会制造错误. 去重先比较逻辑文档、版本与跨度, 语义相似只作为候选信号.
抽取式压缩选择原句, 便于引用但可能丢失跨句条件; 生成式压缩能重组信息, 新增失真风险. 压缩后重新做命题—原文支持验证, 引用仍指向原文. 若验证失败, 回退未压缩证据或拒答, 不能让摘要成为新的无来源事实.
预算例中四段长度 300、250、200、150, 总预算 600. 前两段相关最高却覆盖同一规则, 第三段提供例外, 第四段提供日期. 选择 300+200+100 字符压缩后的日期段可覆盖三槽; 直接 top-2 只覆盖一槽. 压缩收益来自释放预算, 前提是日期条件保持完整.
长上下文的完整反例
上下文包含一份 40 页制度, 第 3 页写一般额度 500, 第 21 页写上海额度 800, 第 22 页限定正式员工, 第 39 页写 2026 年 4 月生效. 用户问 2026 年 5 月上海外包人员额度. 关键词和位置偏好会让模型抓住 800 与日期, 忽略相邻身份限制, 给出看似有据的错误答案.
把整份制度放进更长窗口没有解决证据组合. 任务需要地区、身份、时间三个槽位, 并发现外包条件不满足. 检索选择应取第 21、22、39 页的相关片段与外包规则, 排序时让条件紧邻结论. 长窗口提供容量, 结构化选择提供信息关系.
对照实验包含四组: 全文原顺序, 全文把关键页移到开头, 只取相关页, 相关页加两个高相似干扰页. 若第二组改善, 说明位置影响; 第三组优于前两组, 说明噪声与组合影响; 第四组下降, 说明模型容易受近似条件干扰. 每组固定问题、模型和解码, 同时测答案与引用.
顺序优化的约束形式
给定已选集合 , 排列目标可写为 . 表示位置利用曲线, 表示两段需要相邻阅读, 表示排列中是否保持邻近. 单纯按相关分降序只优化第一项, 会把规则与例外拆开.
四段 A 主规则、B 例外、C 日期、D 背景, 价值分别 3、3、2、1, B 依赖 A, C 限定 B. 排列 A-B-C-D 保持依赖链; A-D-B-C 把干扰插入主规则与例外之间. 即使两种集合相同, 生成结果可能不同. trace 需要保存最终序列, 不能只保存无序候选 ID.
去重也可写成来源跨度并集. 两片段文字重叠 80%, 但新增跨度含一个否定句, 边际信息不能按 20% 字符估计. 先提取差异句并做命题比较, 若新增命题改变适用范围则保留; 若只是重复标题与导航则删除. 语义相似度只负责提出去重候选.
压缩实验记录命题保真率 和新增命题率. 长度减少 50% 而保真率从 1 降到 0.7, 对关键制度不可接受. 抽取式与生成式压缩使用相同问题集和最终 token 预算比较, 不能只比摘要可读性.
有效窗口的容量曲线
从 2k、4k、8k、16k、32k token 逐级增加干扰, 每级保持目标证据与位置实验成对. 报告证据覆盖、答案、引用和延迟. 若 8k 后答案不升反降, 该任务的有效工作点约在 8k, 标称 32k 不应成为默认预算.
容量曲线还要区分 prefill 成本与输出成本. 输入翻倍通常增加 prefill 计算与 KV 占用, decode 仍受输出长度和缓存读取影响. 生产工作点在质量、首 token 延迟、并发容量和单请求成本之间选择, 不是最大窗口.
信息瓶颈的数值走查
候选共有 12 段、6000 token, 人工标注四个必要命题槽位. top-score 选择 3000 token, 覆盖四槽中的三个, 重复率 40%; MMR 选择 2800 token, 覆盖四槽, 重复率 18%; 查询相关压缩把 MMR 结果降到 1700 token, 但遗漏一个否定条件, 完整覆盖回到三槽. 压缩率提高不等于信息瓶颈更优.
为每个槽位设权重 3、2、2、1, top-score 覆盖权重 7, MMR 为 8, 压缩后为 5. 定义效用 , 三者在无新增命题时为 4、5.2、3.3. MMR 尽管比压缩长, 仍有最高效用. 若生成式压缩新增一个无来源命题, 再扣 2, 优势更低.
这组计算中的系数由任务确定. 高风险制度把遗漏和新增命题代价设得高, 普通资料摘要可以更重视 token. 报告列出原始分量, 不只给最终效用, 让读者知道方案因覆盖、长度还是失真被选择.
位置、顺序与模型提示的交互
系统提示放在开头, 证据放中间, 用户问题在末尾是一种常见模板; 另一模板把问题同时放在证据前后. 第二种可能提高模型对任务的保持, 也增加 token 并引入重复. 位置实验要固定模板, 或把模板作为独立因素进入 实验.
两种模板和三种证据位置共六格, 每格跑同一百题. 如果重复问题模板只改善中间位置, 说明它缓解任务遗忘; 若所有位置都改善, 可能是额外指令明确性; 若引用变差, 末尾问题可能让模型跳过证据 ID. 因子实验比单次前后比较更可辨识.
证据顺序还受时间和来源关系约束. 对版本比较, 先旧后新便于描述变化; 对当前问答, 现行版本应靠前且旧版明确标为历史. 纯相关分排序可能把两个版本交错, 让模型合并不兼容条件. 排列器将版本组作为块, 块内按有效时间排序.
压缩的失败恢复
压缩器输出后, 系统比较数值、实体、否定词和条件跨度. 原文有“不得超过 800 元”, 摘要变成“额度 800 元”便丢失上限语义; 词面数字一致仍不忠实. 规则检查抓数字与否定, NLI 或 judge 检查命题支持, 两者都通过才使用压缩结果.
失败时可以保留原片段、改用抽取式句子或减少其他低价值证据. 不能在预算固定时直接截断压缩失败的片段尾部, 因为限定条件常位于末尾. 降级顺序写入选择记录并进入评测.
对表格和代码, 生成式压缩风险更高. 表格优先选择相关行并重复表头, 代码选择完整符号和必要依赖. 如果问题要求聚合或执行语义, 交给结构化工具, 不把长表压成自然语言后让模型估算.
最终回归保存候选集合、选择理由、压缩前后命题、序列化上下文与 tokenizer 计数. 模型或模板升级后重放同一资产, 分别检查集合、位置、压缩和生成变化. 只有最终字符串而没有模型实际看见的上下文, 无法解释长窗口回归.
线上记录还要保留证据在最终提示中的起止位置与版本标识。这样答案退化时才能区分检索遗漏、预算淘汰、压缩失真和位置衰减,避免把所有问题笼统归因于模型能力。