Skip to content

Context Engineering:上下文工程

你将学到什么

  • 为什么更长的上下文不等于更好的响应
  • 大模型上下文的 4 种失效模式(中毒、干扰、混淆、冲突)
  • 6 大修复技巧在产品设计中的应用
  • 如何设计 AI 产品的上下文管理策略

为什么重要:上下文管理是 AI 产品质量的核心。理解上下文失效模式,能帮你在产品设计时避开常见陷阱,提升 Agent 可靠性。

核心观点:更长的上下文 ≠ 更好的响应。上下文过载时,AI 会产生幻觉、重复错误、调用无关工具,甚至自相矛盾。


什么是上下文工程?

正如 Andrej Karpathy 所说:

上下文工程是一门精妙的艺术与科学——在上下文窗口中填充恰到好处的信息,以支持下一步推理。

随着对话轮次增加、工具调用累积、文档检索叠加,上下文会变得:

  • 有毒(poisoned):错误信息反复被引用
  • 干扰性(distracting):模型过度关注历史而忽略训练知识
  • 混乱(confusing):无关信息干扰决策
  • 冲突(clashing):内部信息自相矛盾

四种失效模式

1. 上下文中毒(Context Poisoning)

现象:幻觉或错误进入上下文后,被模型反复引用和强化。

典型案例:Agent 系统一旦产生幻觉认为需要完成某个不存在的任务,就会不断重复无效行为,陷入死循环。

产品影响

  • ❌ Agent 产品如果没有错误恢复机制,一个早期错误可能导致整个任务崩溃
  • ✅ 需要设计检查点和回滚机制

真实案例

某代码 Agent 在第 3 步误判"需要创建 config.json",后续 20 步都在尝试创建这个不存在的文件,最终任务失败。

根本原因:错误信息进入上下文后,模型把它当作"事实"反复引用。


2. 上下文干扰(Context Distraction)

现象:上下文过长时,模型过度关注历史记录,忽略了自身的训练知识。

数据支撑

  • Llama 3.1 405B 的正确率在 32k token 左右就开始下降
  • Multi-Agent 系统在信息碎片化时性能下降 39%

产品影响

  • ❌ 不要以为上下文窗口越大越好——塞满信息可能比精准检索效果更差
  • ✅ RAG 的价值不是"塞更多",而是"选更准"

面试加分点

能说出"Lost in the Middle"现象:当上下文过长时,模型对中间部分的信息记忆最差,开头和结尾的信息权重更高。这也是为什么 RAG 要把最相关的文档放在 Prompt 开头或结尾。


3. 上下文混淆(Context Confusion)

现象:给模型的工具太多,性能反而下降。

数据支撑:实验表明,将工具从 46 个减少到 19 个,模型成功率明显提升,即使上下文窗口还很充裕。

产品影响

  • ❌ AI 工具箱不是越全越好
  • ✅ 给模型呈现的工具数量要精简到当前任务必要的范围

类比理解:就像给人一个 100 个按钮的遥控器,反而不如 10 个按钮的好用。


4. 上下文冲突(Context Clash)

现象:多轮对话中,前面的错误回答留在上下文里,影响后续推理。

数据支撑:微软和 Salesforce 实验显示,同样内容分多轮提供 vs 一次性提供,性能平均下降 39%,OpenAI o3 从 98.1 分跌到 64.1 分。

产品影响

  • ❌ Agent 流程中的错误状态会一直往下传
  • ✅ 关键步骤必须有检查点和错误恢复机制

互动练习:识别失效模式

场景:你的 AI 客服产品,用户反馈"AI 一直在问我已经回答过的问题"。

这属于哪种上下文失效模式?应该如何解决?

查看答案

失效模式:上下文冲突(Context Clash)

可能原因

  1. 上下文中保留了早期的错误理解
  2. 多轮对话中,模型没有正确更新对用户意图的判断
  3. 上下文过长,模型"忘记"了中间的关键信息

解决方案

  1. 短期:在每轮对话后,用摘要更新用户状态(如"用户已提供:姓名、电话、地址")
  2. 中期:实现上下文压缩,定期将历史对话压缩成结构化信息
  3. 长期:设计状态机,明确记录用户已完成的步骤,避免重复询问

六大修复技巧

技巧 1:RAG(检索增强生成)

原理:精准检索相关信息塞入上下文,而不是把所有文档全部塞进去。

产品应用

  • 知识库问答:只检索 Top-3 最相关文档
  • 代码助手:只加载当前文件的依赖项,而非整个代码库

PM 启示

"RAG 已死"是误解。无论上下文窗口多大,精准信息管理仍然关键。RAG 的本质是信息选择,不是窗口大小的竞争。


技巧 2:工具精简(Tool Loadout)

原理:动态选择当前任务必要的工具,而不是把所有工具都暴露给模型。

产品应用

  • 客服 Agent:根据用户意图(退款/咨询/投诉)动态加载对应工具集
  • 代码 Agent:根据编程语言(Python/Java/Go)加载对应的调试工具

数据支撑:工具从 46 个减少到 19 个,成功率提升 15-20%。


技巧 3:上下文隔离(Context Quarantine)

原理:将不同子任务放在独立的上下文线程中处理,避免相互污染。

产品应用

  • Multi-Agent 系统:每个子 Agent 有独立上下文
  • 复杂任务分解:将"写代码"和"写测试"放在两个独立会话中

数据支撑:上下文隔离使 Multi-Agent 系统性能提升 90.2%。

常见误区

不是所有信息都要共享。很多 PM 设计 Multi-Agent 时,让所有 Agent 共享一个大上下文,结果互相干扰。正确做法是:只在必要时通过消息传递关键信息。


技巧 4:上下文剪枝(Context Pruning)

原理:主动删除上下文中的无关信息。

产品应用

  • 长对话产品:定期清理不再相关的历史内容
  • Agent 系统:删除已完成任务的中间步骤

数据支撑:某案例中,剪枝将 Token 从 25k 压缩到 11k,质量反而提升。


技巧 5:上下文压缩(Context Summarization)

原理:用摘要替代原始内容,保留关键信息的同时大幅压缩 Token。

产品应用

  • 客服系统:将前 10 轮对话压缩成"用户问题:退款;已提供:订单号、照片"
  • 会议助手:将 1 小时会议压缩成"决策事项 3 条 + 待办任务 5 条"

成本优化:这也是控制 AI 使用成本的重要手段。


技巧 6:上下文卸载(Context Offloading)

原理:把信息存到外部工具和记忆系统,需要时再调用,而不是一直放在上下文里。

产品应用

  • Agent 记忆系统:工作记忆(上下文)+ 长期记忆(向量库/知识图谱)
  • 个人助手:用户偏好存在数据库,而非每次都放在 Prompt 里

数据支撑:上下文卸载策略使系统性能提升 54%。

延伸阅读

详细的 Agent 记忆系统设计,参见 Agent 记忆系统


实战应用

场景 1:设计长对话产品

问题:用户与 AI 助手对话 50 轮后,AI 开始答非所问。

诊断:上下文干扰 + 上下文冲突。

解决方案

  1. 每 10 轮压缩一次:将历史对话压缩成结构化摘要
  2. 关键信息置顶:用户偏好、当前任务目标始终放在 Prompt 开头
  3. 错误修正机制:用户纠正 AI 时,立即更新上下文摘要

场景 2:设计 Multi-Agent 系统

问题:3 个 Agent 协作时,经常出现重复工作或互相矛盾。

诊断:上下文冲突 + 上下文混淆。

解决方案

  1. 上下文隔离:每个 Agent 独立上下文
  2. 消息传递:通过结构化消息(JSON)传递关键信息
  3. 协调者模式:设计一个 Coordinator Agent 负责任务分配和结果整合

场景 3:优化 RAG 系统

问题:检索了 10 篇文档,但 AI 回答质量不如只检索 3 篇。

诊断:上下文干扰。

解决方案

  1. 重排序(Rerank):用专门的 Rerank 模型筛选最相关的 Top-3
  2. 分段检索:先检索章节标题,再检索具体段落
  3. 动态调整:根据问题复杂度动态调整检索数量(简单问题 1-2 篇,复杂问题 3-5 篇)

PM 设计 Checklist

在设计 AI 产品时,问自己这几个问题:

  • [ ] 每次调用给模型多少上下文?是否有精简机制?
  • [ ] 工具集是否按场景精简,而不是全量暴露?
  • [ ] 多轮对话是否有错误恢复机制,防止错误状态传递?
  • [ ] 长对话产品是否有上下文压缩/遗忘策略?
  • [ ] Multi-Agent 场景中各 Agent 的上下文是否相互隔离?
  • [ ] RAG 系统是否有重排序机制,而非简单堆砌检索结果?

面试应用

高频问题:"如何优化 Agent 系统的上下文管理?"

回答框架

  1. 识别失效模式:先诊断是中毒、干扰、混淆还是冲突
  2. 选择修复技巧:根据场景选择 RAG/工具精简/隔离/剪枝/压缩/卸载
  3. 给出具体方案:结合产品场景,说明如何实施(如"每 10 轮压缩一次")
  4. 提供数据支撑:引用性能提升数据(如"隔离后性能提升 90%")

加分点:能说出"Lost in the Middle"现象,或提到"上下文工程是 Andrej Karpathy 提出的概念"。


专为 AI 产品经理打造