AI给的信息越多越准吗?3步上下文瘦身
把 50 页 PDF 整个粘进对话框,AI 的回答却只围绕前几页打转;留着 20 轮聊天记录继续追问,模型开始忘记你三分钟前定下的约束。上下文不是越多越好,这篇讲清楚什么时候该减、怎么减。
一个反直觉的现象
很多人默认「素材给全,答案就准」,于是把整份合同、整段会议记录、整个代码仓库一次性喂进去。结果往往是:回答更慢、更贵,而且更不准。提问越聚焦,输出质量反而越高——这不是模型变聪明了,而是干扰变少了。
为什么上下文多了反而更差
三个原因,彼此叠加:
注意力被稀释。 有研究观察到,长上下文里中段信息更容易被忽略,模型对开头和结尾的敏感度明显更高。你精心准备的关键条款如果排在第 30 页,很可能被跳过。
干扰项被当成答案。 无关段落里的数字、日期、人名,会被模型当成候选答案捡起来。上下文里的噪音不是中性的,它会主动污染输出。
指令与数据混在一起。 系统提示里写了 15 条规则,模型通常只稳定执行最靠前的几条;规则后面又跟着几千字正文时,执行率还会再掉一截。业界把这种随上下文变长而性能下降的现象称为 context rot(上下文腐化)。
第一步:分层,别把三种东西揉在一起
上下文里其实住着三种东西:
- 指令层:这次要做什么、输出什么格式、哪些不能做
- 事实层:素材、文档、数据
- 示例层:期望输出长什么样的样例
多数人是把它们写成一大段。改法是分开:指令写在最前和最后各一遍,利用首尾效应;事实层用标题或标签包裹,让它一眼可辨;示例层单独放,并注明「这是格式参考,不是内容来源」。系统规则超过 10 条时,合并成「优先级最高的 3 条 + 其余作参考」。
第二步:压缩,用结构化摘要替代原文粘贴
不要直接贴全文,先做一次预抽取:让模型只输出本次任务相关的字段——主体、金额、时间、义务方、例外条款。你核对无误后,再把这张表当上下文。
这一步有两个好处。一是 token 往往能降一个量级,成本和延迟同时下降;二是错误可定位,因为你能清楚看到模型在哪一格抽错了,而不是面对一段流畅但跑偏的长回答猜问题出在哪。
第三步:刷新,新任务开新会话
同一个会话里切换任务是质量杀手。上一轮的历史会持续占用注意力,还会和当前指令打架。
长任务用「交接摘要」:把已完成部分压成 5 行状态——目标、已确认事实、待定项、约束条件、下一步。开新会话只带这 5 行,比拖着 40 轮历史更稳、更便宜,也更方便复现问题。
什么时候确实需要长上下文
不能一刀切地说「越短越好」。三种情况要保留原文:需要对措辞逐字引用(法律、合规场景);跨文档比对同一事实的不同表述;需要复现失败案例做调试。
这时正确做法不是全塞,而是先检索再放入:只放相关段落,同时保留页码或段落号,方便回查原文。检索式放入和全文粘贴,效果差距比多数人想象的大。
一张判断清单
放进上下文之前,问自己三句话:
- 删掉它,答案会变吗?不变就是噪音。
- 它是任务素材,还是背景信息?背景默认不放。
- 它和当前指令冲突吗?冲突的一条会拖垮其余九条。
落地建议
把这三步固化成模板:分层写、压缩后放、换任务就刷新。每次开工前花两分钟做上下文清点,通常比事后反复追问五轮更省时间,团队里换谁用模型,输出质量也不至于差太多。