Context Engineering
参考资料
概念
随着 AI 应用从简单的“聊天”转向复杂的“智能体(Agent)”自主任务,上下文工程已经成为决定 AI 表现的核心技术。
| 维度 | 提示工程 (Prompt Engineering) | 上下文工程 (Context Engineering) |
|---|---|---|
| 核心关注 | 怎么问:优化指令的表达方式。 | 给什么:优化模型看到的信息环境。 |
| 操作对象 | 单一的提示词字符串(如“请总结这段文字”)。 | 多源异构信息的集合(提示词+数据库+记忆+工具定义)。 |
| 性质 | 静态的、一次性的。 | 动态的、系统化的、实时的。 |
| 类比 | 像念咒语,试图用精准的词汇触发魔法。 | 像图书管理员,不仅给你书,还帮你翻到正确的那一页。 |
| 解决问题 | 解决模型“听不懂人话”的问题。 | 解决模型“由于信息缺失或噪声导致幻觉”的问题。 |
三大问题
- 大多数模型的Context Window非常有限
- 输入太杂乱会影响模型理解
- 输入越多,成本越高
四大核心支柱
- 动态检索与增强 (RAG)
- 记忆管理 (Memory Management)
- 工具与能力定义 (Tool Use)
- 结构化信息布局 (Information Layout)
Context Engineering的实现方法
Context Engineering的实现方法,主要可以划分为四个步骤:
- 保存 Context
- 选择 Context
- 压缩 Context
- 隔离 Context
这四个步骤——保存 (Write)、选择 (Select)、压缩 (Compress)、隔离 (Isolate)——正是构建高效 AI 智能体(Agent)和复杂应用的“黄金法则”。它们构成了一个动态的循环系统,确保 AI 在处理长任务时不会“变笨”或“发疯”。
保存 Context (Write) —— 建立“外置大脑”
核心目的: 突破模型上下文窗口(短时记忆)的限制,实现信息的持久化。就像人类会把重要的事情记在笔记本上一样,AI 也需要把关键信息“写”到外部存储中,以便在未来随时调用。
- 持久化记忆 (Persistent Memory):
- 用户画像: 记住用户的名字、偏好(如“我对海鲜过敏”)、长期目标。
- 项目规范: 比如 Cursor 的
.cursorrules或 Claude Code 的CLAUDE.md,这些文件定义了项目的核心规则,每次交互都要“写入”到上下文中。
- 便签与草稿 (Scratchpad):
- 在处理复杂任务时,让 AI 把中间步骤、思考过程或待办清单写入一个独立的文本文件或状态变量中。这样即使对话很长,AI 也能通过读取“便签”找回状态,而不会因为上下文截断而迷失方向。
- 工具反馈记录:
- 将 API 调用的结果、代码执行的日志保存到外部数据库或向量存储中,而不是全部堆在当前的对话窗口里。
选择 Context (Select) —— 扮演“智能图书管理员”
核心目的: 在海量信息中,精准筛选出当前任务“最需要”的内容,提高信噪比。你不能把整个图书馆的书都搬给 AI,它会被“撑死”或分心。
- 静态选择 (Static Select):
- 系统预设: 无论用户问什么,都必须加载的基础指令(如“你是一个资深的 Python 工程师”)。
- 规则文件: 强制加载的项目规范或合规性条款。
- 动态选择 (Dynamic Select / RAG):
- 检索增强生成 (RAG): 这是最主流的方法。当用户提问时,系统先去向量数据库检索与问题最相关的文档片段,只把这几段话喂给 AI。
- 工具路由 (Tool Routing): 如果系统有 100 个工具,AI 不需要知道所有工具的详情。通过检索,只把当前任务可能用到的 3-5 个工具的定义(Schema)放入上下文。
- 模型驱动选择:
- 让一个小模型(或当前模型)先分析任务,决定需要加载哪些模块的知识。
压缩 Context (Compress) —— 进行“信息脱水”
核心目的: 在有限的 Token 预算内,保留核心信息,腾出空间给新的交互。随着对话进行,历史记录会占用大量 Token。压缩就是要把“废话”挤干,只留“干货”。
- 摘要 (Summarization):
- 对话总结: 当对话轮数过多时,调用模型对早期的对话历史进行总结(例如:“用户之前要求修复了登录页面的 CSS 错误”),用一段简短的总结替代原本冗长的几十轮对话。
- 递归摘要: 对摘要再次摘要,层层提炼。
- 修剪 (Trimming/Pruning):
- 滑动窗口: 只保留最近的 N 轮对话,丢弃最早的内容。
- 去噪: 删除无关的系统日志、重复的错误信息或已经被修正的旧代码片段。
- 智能分块 (Chunking):
- 将长文档切分成语义完整的片段,只处理当前需要的片段,而不是把整本书读进去。
隔离 Context (Isolate) —— 设立“独立工作间”
核心目的: 防止信息干扰(Context Clash),支持多任务并行。当 AI 同时处理多个任务,或者不同任务之间有冲突信息时,隔离至关重要。
- 多智能体隔离 (Multi-Agent Isolation):
- 在 Swarm(蜂群)架构中,不同的专家 Agent(如“程序员”、“测试员”、“产品经理”)拥有各自独立的上下文窗口。程序员不需要看到产品经理和测试员之间的闲聊,只需要接收明确的修改指令。
- 沙盒环境 (Sandboxing):
- 代码执行或工具调用的环境应与主对话隔离。例如,代码运行的报错日志、生成的临时文件,只在沙盒内处理,只有最终的运行结果(成功/失败)才返回给主上下文,避免大量垃圾日志污染主逻辑。
- 状态字段隔离:
- 在系统设计中,将“系统内部状态”(如数据库连接串、API 密钥)与“用户可见上下文”物理隔离,既保证安全,又防止模型在回答时意外泄露敏感信息。
总结:一个动态的循环
这四个步骤不是线性的,而是一个实时运行的闭环:
- 任务开始,系统写入基础规则。
- 用户提问,系统选择相关知识。
- 任务执行中,系统不断隔离子任务环境。
- 随着对话变长,系统自动压缩历史记录。
- 新的关键信息产生,再次写入记忆库。
