资讯动态

上下文工程实战:从提示词到注意力预算的工程化方法

发布时间:2026/10/13 15:30:50 来源:尧图企业网站定制
1. 上下文工程到底在解决什么问题第一次听到“上下文工程”这个词很多人会下意识觉得它只是“提示词工程”换了个马甲。我一开始也这么想直到在实际项目里连续踩了几次坑才意识到这两者的重心完全不同。提示词工程关注的是“怎么把一句话说清楚”而上下文工程关注的是“在有限的窗口里到底该放什么、按什么顺序放、放多少”。这个区别听起来很细但它直接决定了一个系统是偶尔能用还是稳定可用。举个我自己的例子。早些年我做过一个文档问答的小工具当时思路很简单用户提问我把问题丢给模型再把检索到的几段原文拼在前面让它基于原文回答。刚开始测试效果不错我就以为搞定了。结果上线后问题接踵而来——同一个问题换个问法答案就飘了文档一长模型开始“忘记”前面的内容更离谱的是有时候它会把检索到的无关段落也当成事实依据一本正经地编。后来我复盘才发现问题根本不在模型而在我把“上下文”当成了一个随便塞东西的容器。上下文工程的核心其实就是把模型的上下文窗口当成一种稀缺资源来经营。这个窗口不是无限大的它同时承载着系统指令、历史对话、检索结果、工具返回、用户输入等一大堆东西。这些东西之间会互相竞争注意力也会互相干扰。你放进去的每一段文字都在消耗模型的“注意力预算”。所以上下文工程要回答的是几个非常具体的问题哪些信息必须进、哪些可以砍、进来的信息怎么排序、怎么压缩、怎么标注来源、怎么防止旧信息污染新判断。我后来把这个思路总结成一句话上下文工程是在信息过载和注意力稀缺之间做权衡的工程。它不是一个玄学概念而是一套可以拆解、可以度量、可以迭代的实操方法。你如果正在做智能问答、代码助手、客服机器人、自动化流程编排这类东西那这套方法基本是绕不开的。哪怕你只是用模型做点日常辅助理解上下文工程也能让你少走很多弯路。2. 为什么上下文工程比想象中更重要2.1 窗口再大也填不满“什么都想要”的贪心很多人有个误区既然现在模型的上下文窗口越来越大那是不是就不用操心上下文管理了直接把所有资料一股脑塞进去就行我实测下来的结论是窗口变大只是把天花板抬高了并没有改变“注意力会被稀释”这个底层事实。我做过一个对比实验。同一个问题我分别用两种方式喂给模型第一种是把二十页相关文档全部塞进去第二种是只挑三段最相关的、并且标注了来源和用途。结果第一种方式下模型回答得更慢而且经常抓错重点甚至把文档里互相矛盾的两句话都复述出来第二种方式下回答又快又准。这说明什么说明信息量和回答质量之间不是线性关系过了某个点之后多塞的信息反而成了噪音。这就像你给一个同事交代任务你把所有背景资料、所有历史邮件、所有相关文件全甩给他他反而不知道从哪下手。但如果你只给他三张纸告诉他“这是背景、这是要求、这是参考”他立刻就能干活。模型也是一样的道理它需要的是被组织过的信息而不是被堆砌的信息。2.2 上下文污染是隐蔽的“慢性病”上下文污染这个词是我自己在踩坑过程中慢慢总结出来的。它指的是上下文里混入了过时的、错误的、或者不相关的信息导致模型基于这些信息做出错误判断。这种问题最麻烦的地方在于它不会立刻报错而是悄悄地让回答质量下降。我遇到过一个典型场景。在一个多轮对话系统里用户先问了一个关于A产品的问题系统检索了A产品的资料。然后用户话题一转问起了B产品。如果系统没有及时清理上一轮的检索结果模型就会把A产品的信息也带进B产品的回答里产生一种“串味”的效果。用户看到的是答非所问但你去查日志发现每一步好像都“正常执行”了很难定位。上下文污染还有另一种形式就是“指令漂移”。系统一开始给模型设定了一个角色和一套规则但随着对话轮次增加这些早期指令被淹没在大量对话历史里模型逐渐“忘记”了最初的约束。我试过在一个长对话里模型到后面完全无视了“回答要简洁”这个要求开始长篇大论。原因就是那条指令在上下文里的权重被稀释了。2.3 成本、延迟和体验的三重压力除了质量上下文工程还直接关系到成本和延迟。上下文越长推理消耗的计算资源越多响应时间也越长。这在真实产品里是实打实的钱和用户体验。我算过一笔账。假设一个问答系统每次请求平均要处理八千个token的上下文如果把上下文压缩到三千个token还能保持同样的回答质量那单次推理成本能降一大截。对于每天有几十万次请求的系统来说这个差距非常可观。而且上下文短了响应速度也上去了用户等待时间从三四秒降到一两秒体感完全不一样。所以上下文工程不是“锦上添花”的优化而是直接影响产品能不能跑起来、跑得贵不贵、用户愿不愿意用的关键环节。这也是为什么我后来越来越重视它甚至把它放在比模型选型更靠前的位置。3. 上下文工程的核心构成要素拆解3.1 系统指令定调子但别啰嗦系统指令是上下文的“地基”它决定了模型的基本行为模式。我见过很多系统指令写得又长又全恨不得把产品手册都塞进去。但实测下来系统指令越长模型越容易顾此失彼。我的经验是系统指令要抓三件事角色、边界、输出格式。角色就是告诉模型“你是谁”边界是“什么能做、什么不能做”输出格式是“按什么结构回答”。这三件事说清楚就够了剩下的细节应该放到具体的任务上下文里而不是一股脑塞进系统指令。举个例子我写系统指令通常会控制在两百字以内。比如“你是一个技术文档助手只基于提供的资料回答问题资料里没有的内容要明确说不知道回答用分点形式每点不超过两句话”。这样模型既有明确的约束又不会因为指令太长而抓不住重点。注意系统指令里千万不要写互相矛盾的要求。我见过有人同时写“回答要详细”和“回答要简洁”模型就会在两种风格之间反复横跳输出质量很不稳定。3.2 检索结果相关性比数量重要检索增强是现在很常见的做法但很多人只关注“检索到没有”不关注“检索得准不准、放得对不对”。我踩过的坑是检索返回了十条结果我全塞进上下文结果模型被其中三条不相关的带偏了。后来我调整了策略检索结果进上下文之前要过三道关。第一道是相关性过滤把明显不相关的直接扔掉第二道是去重把内容高度重复的合并第三道是排序把最相关的放在最前面。因为模型对上下文开头和结尾的内容注意力更集中中间部分容易被忽略所以排序很关键。另外检索结果一定要标注来源。我习惯在每段资料前面加一个简短的标签比如“来源产品说明书第三章”。这样做有两个好处一是模型知道这段话的出处回答时更谨慎二是万一出错我能快速定位是哪段资料的问题。3.3 对话历史该忘的就得忘对话历史是上下文里最容易失控的部分。因为它会随着轮次不断增加如果不加管理很快就会把窗口占满。我见过一个对话系统聊到第十轮的时候前面九轮的内容还全在上下文里导致模型响应越来越慢而且经常把早期的话题和当前话题混在一起。我的做法是给对话历史设一个“保留策略”。通常只保留最近三到五轮更早的对话要么丢弃要么压缩成一句话摘要。摘要的好处是保留了关键信息比如用户之前提到过的偏好、已经确认过的事实但去掉了冗余的来回。这个摘要可以由模型自己生成也可以由规则提取。还有一种情况是“话题切换”。当用户明显换了一个话题时我会主动清理上一话题的检索结果和中间推理过程只保留用户的基本信息和系统指令。这样能有效防止上下文污染。3.4 工具返回结构化比自然语言好如果系统里接了外部工具比如查数据库、调接口、算数值那工具返回的内容也会进入上下文。这里有个细节很容易被忽略工具返回的原始数据往往是结构化的比如JSON但直接塞给模型它会花很多注意力去解析格式而不是理解内容。我的做法是在工具返回和模型之间加一层“翻译”把结构化数据转成简短的、带标签的自然语言描述。比如把{temperature: 25, unit: celsius}转成“当前温度25摄氏度”。这样模型理解起来更快占用的上下文也更少。同时工具返回里那些模型不需要的字段要提前过滤掉。我见过有人把接口返回的几十个字段全塞进去其中大部分是模型根本用不上的元数据纯属浪费窗口。4. 实操中的上下文编排策略4.1 分层编排把上下文当成一个金字塔我在实际项目里最常用的编排方式是分层。从上到下依次是系统指令、任务说明、检索资料、对话历史、用户输入。这个顺序不是随便定的而是基于模型注意力分布的特点。系统指令放最上面是因为它需要贯穿整个回答过程。任务说明紧随其后告诉模型这次具体要干什么。检索资料放在中间偏前的位置因为它是回答的主要依据。对话历史放在靠后的位置因为它更多是辅助理解语境。用户输入放最后是因为模型对末尾内容的注意力也很高这样能确保它紧扣当前问题。这个分层结构的好处是当上下文需要压缩时我可以从下往上砍。先砍对话历史再砍检索资料里相关性最低的部分最后才动系统指令和任务说明。这样能保证核心约束不丢失。4.2 动态裁剪根据任务复杂度调整不是所有任务都需要完整的上下文。我习惯根据任务复杂度动态调整上下文的“厚度”。简单任务比如格式转换、简单分类上下文可以很薄系统指令加用户输入就够了。复杂任务比如多步推理、跨文档分析才需要把检索资料和对话历史都带上。判断任务复杂度有个简单的办法看它需不需要“外部知识”和“历史信息”。如果只需要模型自身的知识那检索资料可以省如果是一次性问答对话历史可以省。我试过用这个办法把平均上下文长度压缩了将近一半回答质量基本没受影响。4.3 显式标注让模型知道每段话的“身份”上下文里混着各种来源的信息如果不加标注模型很容易搞混。我的做法是给每段内容加一个显式的“身份标签”。比如用“【系统指令】”“【参考资料】”“【历史对话】”“【当前问题】”这样的前缀。这个做法看起来很简单但效果很明显。加了标签之后模型对信息的归属判断准确了很多尤其是在多轮对话里它不会再把我给的示例当成用户说过的话。而且标签本身占用的token很少性价比很高。4.4 压缩与摘要把长内容变短但不变味上下文压缩是门手艺。压得太狠关键信息丢了压得太松等于没压。我的经验是压缩要保留“事实”和“约束”去掉“修饰”和“重复”。具体操作上我通常用模型来做摘要但会给它明确的指令比如“保留所有数字、日期、专有名词和条件限制去掉举例和重复表述”。这样摘要出来的内容既短又保留了关键信息。对于特别长的文档我会先分段摘要再把摘要合并避免一次性摘要丢失细节。提示压缩后的内容一定要人工抽查几次。我有一次偷懒没检查结果摘要把“不支持”写成了“支持”差点造成严重后果。机器摘要再靠谱关键场景也得有人兜底。5. 常见问题与排查技巧实录5.1 模型“答非所问”怎么排查答非所问是最常见的问题原因通常有三个检索资料不相关、上下文顺序混乱、系统指令被淹没。我的排查顺序是先看检索结果的相关性再看上下文里各部分的顺序最后看系统指令是不是被挤到了不显眼的位置。有一次我遇到模型总是忽略“用中文回答”这个要求查了半天发现是系统指令放在了上下文最开头而后面塞了太多英文资料模型被带偏了。后来我把语言要求重复放在用户输入前面问题就解决了。这个经验告诉我关键约束可以在上下文里出现两次一次在开头定调一次在结尾提醒。5.2 上下文超长导致响应慢怎么办响应慢通常是因为上下文太长推理计算量大。解决办法就是前面说的动态裁剪和压缩。但还有一个容易被忽略的点上下文的“形状”也会影响速度。所谓形状就是内容的组织方式。结构清晰、分段明确的内容模型处理起来比一大段连续文本要快。我试过把同样的内容一种用连续段落一种用带标题的分点后者的响应时间明显更短。所以我现在写上下文都会尽量用短段落、加小标题、关键信息单独成行。这不仅对模型友好对人工排查也友好。5.3 多轮对话里信息“串味”怎么防串味的根源是旧信息没有被及时清理。我的做法是给对话设一个“话题边界”。当检测到用户话题切换时自动触发一次上下文清理把上一话题的检索结果和中间推理过程移除只保留用户的基本信息和系统指令。检测话题切换可以用简单的关键词匹配也可以用模型判断。我用的是混合方式先用关键词快速筛可疑的再让模型确认。这样既快又准。清理之后我会在上下文里加一句“以上是历史对话当前话题已切换”给模型一个明确的信号。5.4 常见问题速查表问题现象可能原因排查方向解决思路回答偏离主题检索资料不相关检查检索结果相关性加相关性过滤提高检索阈值忽略系统指令指令被淹没检查指令在上下文中的位置指令前置关键约束重复响应速度慢上下文过长统计token数量动态裁剪压缩摘要多轮对话串味旧信息未清理检查对话历史保留策略设话题边界及时清理回答前后矛盾上下文信息冲突检查资料是否互相矛盾去重标注来源冲突时以最新为准格式不符合要求输出格式指令不明确检查格式说明是否具体给出明确示例放在显眼位置6. 我踩过的坑和总结出的几条硬规矩6.1 别把“塞满”当成“用好”这是我最早犯的错误也是很多人正在犯的错误。总觉得上下文里信息越多模型回答就越有依据。实际上信息过载会让模型抓不住重点甚至产生幻觉。我现在给自己定的规矩是每段进入上下文的内容都要能回答“它为什么必须在这里”。回答不上来的就砍掉。6.2 上下文要“可解释”我要求自己搭建的每一个上下文都能用一句话说清楚它的结构系统指令是什么、检索了什么、保留了几轮对话、用户输入是什么。如果我自己都说不清楚那模型肯定也理解不了。这个习惯帮我省了很多排查时间因为一旦出问题我能快速定位是哪一层出了岔子。6.3 关键约束要“重复但不啰嗦”有些约束特别重要比如“不要编造”“必须引用来源”“用指定格式输出”。这些约束我会在系统指令里说一次在用户输入前面再提醒一次。两次就够了再多就啰嗦了。重复的目的是对抗注意力稀释而不是堆砌。6.4 定期做“上下文审计”我会定期抽查线上系统的上下文看看有没有冗余、有没有污染、有没有该清理没清理的。这个习惯是从一次事故之后养成的。当时一个对话系统因为历史对话没清理把用户三天前说的一个错误信息一直带着导致后续回答全错。从那以后我就把上下文审计列进了日常检查清单。6.5 压缩摘要一定要人工抽查前面提过一次这里再强调一遍。机器摘要再智能也可能在关键信息上出错。尤其是涉及数字、否定词、条件限制的时候一定要人工抽查。我现在的做法是摘要生成后随机抽十条对比原文确认无误才上线。这个成本不高但能避免大问题。7. 上下文工程后续可以怎么扩展如果你已经把基础的上下文编排跑通了接下来可以往几个方向深挖。一个是自适应上下文根据任务类型和用户行为自动调整上下文的厚度和结构而不是用一套固定模板。另一个是上下文缓存把常用的系统指令和检索结果缓存起来减少重复计算进一步降延迟。还有一个是多模态上下文把图片、表格、音频转成文本描述后纳入上下文管理这在文档处理场景里很有用。我自己最近在试的是把上下文工程和评估体系结合起来每次调整上下文策略后用一组固定问题跑一遍量化回答质量的变化。这样就能知道改动到底是优化还是劣化而不是凭感觉。实测下来这套方法让我的迭代效率高了不少也少了很多“改完感觉好了但说不清哪里好”的困惑。上下文工程这件事说到底就是一句话把模型当成一个注意力有限、需要清晰指令的协作者而不是一个无限容量的硬盘。你越尊重它的注意力规律它给你的回报就越稳定。这个道理我在踩了无数次坑之后才真正明白希望你能少走点弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑