情境工程与提示工程:究竟发生了哪些变化?
情境工程与提示工程:究竟发生了哪些变化?
过去几年,“提示工程”一直是工作的全部:找到关键的提示词,就能得到正确的答案。但随着上下文窗口扩展到数十万个词元,代理开始调用工具并记住过去的会话,关键提示词不再是瓶颈。取代提示工程的并非更好的提示,而是一套设计提示周围一切的规范。以下内容将详细阐述其含义,提示工程在其中仍然扮演的角色,以及糟糕的上下文配置会如何破坏生产系统。
目录
即时工程究竟是什么
提示工程是指通过调整提供给模型的指令——包括措辞、示例、角色设定和思路提示——来获得更佳的单一回答。它回答一个问题: 我该如何问这个问题呢? 诸如少样本示例、明确的输出格式和逐步推理提示等技巧仍然适用。这些技巧依然重要,只是不再是整个系统了。
什么是情境工程?
上下文工程是一门设计模型在响应瞬间所能感知的一切信息的学科——不仅包括指令,还包括系统消息、检索到的文档、内存、工具输出、对话历史以及支配所有这些信息的规则。这个术语在2025年由Andrej Karpathy和Shopify的Tobi Lütke等人推广开来,他们将其定义为在每次调用之前,有意识地决定模型上下文窗口的内容,而不是将上下文窗口视为一个可以通过单个巧妙的提示完全控制的事物。
上下文工程将上下文窗口视为一个精心设计的信息环境——由多个来源组成,经过相关性筛选,并在多步骤任务中保持一致——而不是一块手写的文本。
核心区别,一句话概括
提示工程侧重于你如何与模型沟通。上下文工程侧重于模型在生成响应时可以访问哪些信息。前者关乎措辞,后者关乎架构。
| 快捷工程 | 上下文工程 |
|---|---|
| 优化单条指令 | 设计完整的信息管道,为每一次调用提供信息。 |
| 完全存在于你所写的文本之中。 | 涵盖检索、记忆、工具和结构化输出 |
| 静态——每次都显示相同的提示 | 动态的——每次轮换或任务都重新组装 |
| 因含糊不清或表达不明确而失败 | 因中毒、肿胀、混乱或自相矛盾而失败 |
| 系统的子集 | 系统提示是其中的一个组成部分。 |
语境的构成要素
目前大多数框架都包含相同的几个组成部分,无论团队称之为五个组件还是六个组件。以下版本与当今生产系统的实际构建方式非常吻合。
| 成分 | 角色 |
|---|---|
| 系统提示 | 设置角色、规则和约束——这部分最接近经典的提示工程。 |
| 检索(RAG) | 从外部源提取相关文档或行以支持响应 |
| 记忆 | 系统会保留短期(本会话)和长期(跨会话)信息。 |
| 工具 | 模型可以调用的函数,以及这些调用返回到上下文中的输出。 |
| 结构化输出 | 限制模型响应方式的模式 |
| 护栏 | 系统会执行哪些操作以及不会执行哪些操作的规则,通常都包含在系统提示信息中。 |
为什么这种转变现在会发生
三个因素汇聚在一起。上下文窗口从几千个词元扩展到几十万甚至几百万个词元,技术上使得单次调用可以容纳更多数据。智能体系统变得普遍,这意味着模型不再只回答一个问题,而是跨越多个步骤运行,每个步骤都需要新鲜、准确的上下文。而将这些系统投入生产的企业遇到了可靠性问题,这些问题无法通过改进措辞来解决,因为真正的原因是检索质量、内存设计或工具输出格式,而不是提示语的措辞。到2026年的行业调查始终显示,数据和人工智能领域的领导者优先考虑上下文质量和人工智能就绪的元数据,而不是进一步改进提示语——这表明瓶颈已从结构上转移到了上游。
语境失效的四种方式
更大的上下文窗口并不意味着更安全。研究员德鲁·布鲁尼格(Drew Breunig)提出的长上下文失效分类法——目前已被该领域广泛引用——列出了四种不同的失效模式,值得我们了解,因为每种模式都需要不同的解决方法。
语境中毒
幻觉或错误进入语境,并被反复提及,在之后的每一步中不断累积,直到整个轨迹都建立在错误的假设之上。
情境干扰
随着历史的积累,该模型依赖于积累的背景,而不是自身的推理——重复过去的模式,而不是完成当前的步骤。
语境混淆
无关信息充斥着窗口,但模型仍然试图使用所有这些信息,即使有用的信号在技术上存在,也会降低响应质量。
语境冲突
新信息或工具描述与上下文中已有的内容相冲突——尤其是在引入自己没有编写的工具或文档时,这种情况更为常见。
这些故障都不会表现为系统崩溃。被干扰或混乱的代理通常会完成任务并返回一个看似合理的错误答案,而这正是它们在生产环境中危险的原因——标准的错误监控无法检测到它们。
四个杠杆就能解决问题
该框架的补救措施部分提供了四个杠杆,每个杠杆都针对上述一种故障模式。
| 杠杆 | 目标 | 实际应用 |
|---|---|---|
| 写 | 中毒 | 将已验证的状态持久化到外部,而不是让虚构的事实仅存在于运行环境中。 |
| 选择 | 困惑 | 仅检索和加载与当前步骤相关的内容,而非所有可用的工具或文档。 |
| 压缩 | 注意力分散 | 应该对过往历史进行总结或精简,而不是任其无限期地积累。 |
| 隔离 | 冲突 | 为子代理或子任务分配各自独立的上下文窗口,而不是将所有内容合并到一个窗口中。 |
多智能体架构本质上是在系统层面应用上下文隔离:协调智能体将任务委托给子智能体,每个子智能体在自己的窗口中工作并报告一个精简的摘要,而不是每个子任务的每个步骤都堆积到一个共享的上下文中。
代理和 MCP 中的上下文工程
模型上下文协议 (MCP) 之所以重要,是因为它规范了工具和外部上下文如何暴露给模型,而不是每个团队各自发明临时格式。这种标准化本身就是一个上下文工程问题:编写良好的 MCP 服务器描述可以减少上下文混淆,而编写不佳的描述则容易导致多个 MCP 服务器同时连接时出现上下文冲突。随着代理框架的成熟,预计上下文编辑 API、具有显式写入/遗忘控制的内存工具以及能够显示特定上下文实际驱动输出的可观测性等功能将成为标准基础设施,而不是每个项目单独定制的。
Prompt Engineering 已经消亡了吗?
不,它只是被降级了,而不是被删除了。系统提示仍然是上下文工程系统中的一个组成部分,措辞在其中仍然至关重要。不再存在的是,仅仅依靠措辞就能弥补糟糕的检索流程、臃肿的内存存储或相互矛盾的工具描述这种假设。在一个长时间运行、发出数十次呼叫的代理程序中,手写提示只是众多信息来源之一——其余信息来自检索器、工具或内存存储,而正是这部分信息决定了系统在生产环境中的稳定性。
一个实用的起始框架
从临时提示过渡到真实情境工程的团队通常会经历相同的步骤:
- 仔细查看橱窗里实际摆放的是什么。 记录一个真实的生产调用,并查看构成该调用的每一个组件——而不是你假设存在的组件。
- 将持久性规则与情境背景区分开来。 系统级约束属于稳定的系统提示;任何因请求而改变的内容都应该动态地组装。
- 先添加检索功能,再添加更多提示。 如果模型缺少事实,检索步骤通常比更长的指令更有效。
- 设计具有可见性的存储器。 避免使用黑箱式存储器,它会默默地决定保留什么或忘记什么,而且没有办法检查或纠正——一个错误的存储事实会像任何其他有害的环境一样不断累积。
- 用于检测四种失效模式的仪器。 注意反复出现的虚假声明(投毒)、长期步骤质量下降(干扰)、不相关的工具使用(混乱)以及添加新源后出现的矛盾输出(冲突)。
最佳实践
的
- 将系统提示视为一个稳定的层面,而不是整个解决方案。
- 在检索到的文档到达模型之前,对其进行重新排序和修剪——先进行宽泛的召回,再进行窄化召回。
- 对于长时间运行的智能体,应该执行压缩或总结步骤,而不是任由历史记录不受控制地增长。
- 让内存可检查、可纠正,而不是一个沉默的黑盒子。
禁忌
- 不要以为更大的上下文窗口就意味着你应该把它填满——未使用的容量并不是需要解决的问题。
- 不要将所有可用工具连接到每个代理;工具过载会显著降低函数调用准确性。
- 不要将所有子代理的工作上下文合并到一个共享窗口中——隔离不需要共享的内容。
- 系统提示与动态上下文源分开审查
- 检索管道在注入上下文之前会重新排序。
- 内存写入是可见且可纠正的。
- 长时间运行的代理具有压缩或检查点策略。
- 对连接的 MCP 服务器中的工具描述进行审核,以查找冲突。
常问问题
上下文工程是不是只是提示工程的另一种说法?
不。提示工程是上下文工程的一个组成部分,上下文工程还涵盖检索、记忆、工具输出和结构化输出设计——这是一个真正更广泛的范围,而不是同一项工作的新名称。
上下文工程和 RAG 是一回事吗?
RAG是上下文工程中的一种技术,专门用于检索外部文档。上下文工程还涵盖内存管理、工具使用以及所有这些信息的组装和排序方式。
“情境工程”一词是谁提出的?
2025 年,Andrej Karpathy 和 Shopify 的 Tobi Lütke 等实践者推动了这一趋势,尽管这种做法在生产系统中早已存在,但该标签出现之前就已经存在了。
更大的上下文窗口能否解决这些问题?
不——更大的窗口会引入自身的故障模式。随着输入长度的增加,性能仍然会下降,而且大窗口中的无关内容会严重影响响应质量。
什么是语境污染?
当幻觉或事实错误进入上下文,并在后续步骤中反复被提及时,就会加剧最初的错误。
什么是语境冲突?
当新的信息、文档或工具描述与上下文中已有的内容发生冲突时,这种情况发生的可能性就会增加,尤其是在连接多个外部工具或 MCP 服务器之后。
我还需要学习提示工程吗?
是的——它仍然是最接近模型的层,并且仍然会影响输出质量,但对于生产级系统而言,它本身已经不够用了。
内存与 RAG 有何不同?
RAG 从外部文档中检索信息;记忆则从代理自身的过往会话或已存储的事实中检索信息。从结构上看,它们是应用于不同来源的类似检索问题。
团队在情境工程方面最常犯的错误是什么?
为了“以防万一”,将所有可用的工具、文档或记忆条目加载到上下文中,这反而增加了混淆和冲突的可能性,而不是提高了可靠性。
MCP 是否取代了上下文工程的需求?
不——MCP 规范了工具和上下文如何暴露给模型,但决定从这些来源中选择、压缩或隔离哪些内容仍然是一个上下文工程决策。
如何判断我的智能体遇到的是上下文问题还是模型问题?
如果同一个模型在较小、较简洁的环境中表现良好,而随着历史数据、工具或文档的积累而表现不佳,则说明问题出在环境设计上,而不是模型本身的能力上。
要点总结
- 提示工程塑造单个指令;上下文工程设计模型在响应时可以看到的所有内容。
- 核心组件包括系统提示、检索、内存、工具和结构化输出——提示工程是其中之一,而不是其他组件的替代品。
- 冗长或粗心的背景说明会以四种具体、可命名的方式失效:中毒、分散注意力、混乱和冲突。
- 相应的修复措施包括写入、选择、压缩和隔离——而多代理隔离就是在系统级别应用此框架。
- 及时响应式工程并没有消亡。它只是从“整个工作”降级为更大系统中一个定义明确的层级。
结论
到 2026 年,能够从代理程序中获得可靠结果的团队,并非那些拥有最巧妙的系统提示的团队,而是那些将上下文视为基础设施的团队:他们能够检索真正相关的信息,管理可检查的内存,编写前后一致的工具描述,并制定清晰的计划,以便在任务运行时间过长时压缩或隔离哪些信息。这与其说是一个编写问题,不如说是一个软件架构问题。提示工程仍然至关重要,但它不再是唯一重要的因素。
