上下文窗口要用满不浪费,关键是预留输出、分层组织输入、压缩冗余材料并利用缓存,让有效信息而非重复内容占据token预算。
不少团队把DeepSeek的长上下文当成可无限堆料的仓库,结果窗口被背景资料和重复指令占满,真正的问题与证据反而被挤到边缘。上下文管理的目标不是把数字撑到上限,而是让每一千token都承担明确任务,同时为输出和后续轮次留出空间。
1. 算清窗口容量与输出预留
实际使用DeepSeek时,上下文窗口并不是一个只装输入的空箱子,输入token与输出token共享同一个上限,API里max_tokens设置得是否合理会直接决定长材料能否被完整处理。以DeepSeek-V3类模型常见的128K窗口为例,推理模型或不同版本的可用长度并不完全相同,调用前应以当前模型文档为准;128K tokens大致对应数万到十万字级中文材料,具体受分词器、代码、表格和符号密度影响。很多“用满”失败案例不是材料不够长,而是把窗口塞到接近上限后没有给回答留空间,结果生成被截断,或者模型为了压缩输出而漏掉关键结论。计费也按输入和输出token分别计算,重复粘贴同一份背景资料会让每一轮成本持续累积。
更稳妥的做法是先做窗口预算,再决定材料规模。一个128K窗口可以预留8K给最终回答,推理模型还要为思维链留出更多输出空间;系统提示与工具说明控制在2K左右,任务目标和验收标准3K,历史对话摘要5K,检索材料不超过100K,剩余约10K作为分词误差和突发长表格的缓冲。合同审查场景里,把整份合同和全部附件一次性投喂,看似用满了窗口,实际上模型容易在中间条款上注意力衰减;改为先给合同目录、关键条款编号和争议问题,再附上相关章节原文,输入token下降,条款引用反而更稳定。窗口预算的核心不是数字越大越好,而是让每一块token都有明确用途,并给输出留出可呼吸的空间。
2. 用分层输入替代整包投喂
长上下文最容易出现的浪费,是把角色设定、任务说明、背景材料、历史记录和当前问题混成一大段连续文本,模型需要自己猜测哪些是规则、哪些是证据、哪些只是过期背景。更有效的做法是把输入分成稳定层、任务层、证据层和问题层:稳定层放角色、边界、输出格式和工具约定,任务层写清目标、验收标准和不允许做的事,证据层放编号后的材料,问题层只保留当前需要回答的具体问题。分层不是为了好看,而是让模型在注意力分配上有清晰锚点,也方便后续压缩时知道哪些内容可以删、哪些必须保留。一个财报分析案例中,把三张报表、附注、管理层讨论和往年数据全部塞入,模型回答常常泛泛;改成只给本期关键报表、与问题相关的附注段落和一张指标对照表,答案的引用准确率明显提高。
分层输入还要处理顺序与重复。稳定层放在最前面,既符合指令优先的习惯,也能在支持上下文缓存的接口里提高前缀复用率;证据层按“材料编号加标题加原文”的组织,问题层放在末尾,让模型在读完证据后立即进入回答状态。硬约束不要用零散短句反复堆叠,而应写成一段连续、可执行的说明,例如“回答只引用编号材料,不确定时标注待核实,不补充材料外事实”,这样比多次重复“不要编造”更省token也更清晰。输出格式同样属于分层的一部分,要求模型按固定字段返回结论、证据编号和风险提示,可以减少解释性废话,把省下的输出空间留给真正有价值的内容。整包投喂看似省事,实际把压缩责任推给了模型,最后往往以更长的回答和更多的返工来偿还。
3. 以检索压缩控制无效token
无效token通常不是某一段明显错误的文字,而是重复指令、过期版本、无关章节、格式符号和寒暄记录的总和。控制这类浪费,第一步是把“全量投喂”改成“检索后投喂”:对长文档按语义分块,每块控制在三百到八百字,块间保留百分之十左右重叠,先通过关键词或向量检索召回候选段落,再用重排模型筛出与当前问题最相关的五到八段。客服知识库场景中,五十页产品手册全部放入窗口,模型可能被旧版退款政策干扰;改为只检索“退款条件、时效、例外商品”三个片段,并给每段标注版本号和生效日期,回答会更短也更可靠。检索不是为了少给材料,而是把窗口留给能直接支撑结论的证据。
压缩要在保留证据链的前提下进行。对长报告可以先做章节摘要,再按问题展开原文;对多轮历史可以滚动摘要,只保留已确认事实、用户约束、未完成事项和关键决策;对表格和日志可以转成字段化摘要,去掉重复时间戳和无关列。需要警惕简单截断,因为它容易把前提和例外切掉,留下看似相关却无法引用的残片。更细的做法是给证据编号,要求模型在回答中引用编号,压缩时优先保留被引用过的段落,把长期未被引用的材料移出当前窗口。这样既降低了输入token,也让“用满”从堆料变成可审计的证据管理,模型不必在大量低价值文本中反复搜索。
4. 在多轮对话中维持缓存与预算
多轮对话是上下文浪费的高发区,因为每一轮都把完整历史重新发送,token会随轮次线性增长,到了后期窗口里大部分内容可能是已经被否定的方案和重复确认。管理多轮上下文时,应把历史分成“必须保留”和“可以折叠”两类:用户身份、硬约束、已确认事实、未完成事项和关键决策进入滚动摘要,寒暄、重复提问、失败尝试和已废弃版本折叠成一句“此前方案已排除”的说明。代码调试场景里,不必保留每一轮完整报错,只需保留当前错误摘要、已修改文件、失败原因和下一步假设,这样既能让模型接续思路,也能避免历史日志挤占证据空间。每轮结束后统计输入输出token,当窗口使用超过八成时触发压缩,先压缩历史摘要,再替换过期材料,最后才考虑缩短当前问题。
缓存策略要配合输入顺序才有价值。DeepSeek的上下文缓存会优先复用稳定前缀,因此系统提示、工具定义、输出格式和长期不变的长文档应放在前面,当前问题、临时日志和本轮新增材料放在后面;如果前缀频繁变动,缓存命中率会下降,费用和延迟都会回升。材料更新时不要直接在原文中间插入新段落,而应新增强调编号或替换整块内容,避免前缀结构被打乱。把缓存、滚动摘要和窗口预算连成固定流程后,长上下文才不再是一次性消耗品;当使用率逼近上限时,先折叠历史,再剔除低引用证据,最后调整输出预留,这套顺序比单纯删材料更不容易破坏回答质量。

