Context Engineering(上下文工程)是 AI Agent 成功的关键吗?

前段时间 OpenAI 的前研究员 Andrej Karpathy 提出一个新的名词:Context Engineering。他将 LLM 比作计算机的处理器(CPU),而其上下文窗口则相当于内存(RAM)。最近看到一篇发表在 langchain 博客里面的文章:Context Engineering(链接见文末),让我对这个概念的理解更加深刻。

上下文工程(Context Engineering)是构建和优化大型语言模型(LLM)驱动的 AI 智能体的一门关键技术。它被定义为"在智能体运行轨迹的每一步中,以恰到好处的信息填充上下文窗口的艺术与科学"。

上下文工程的重要性在于:

  • 提升推理能力:通过提供最相关、最简洁的信息,智能体能够更准确地理解任务、进行有效推理并生成高质量的响应。
  • 提高运行效率:优化上下文的使用可以减少不必要的计算,从而加速智能体的响应时间,并降低资源消耗。
  • 增强智能体鲁棒性:有效的上下文管理有助于避免信息过载或错误信息引起的故障,使智能体在复杂多变的环境中保持稳定表现。
  • 实现复杂任务:对于需要长期记忆、多步骤规划或与外部工具交互的复杂任务,上下文工程是确保智能体能够有效执行这些任务的基础。

上下文工程是"填充上下文窗口的艺术和科学,在代理轨迹的每一步都填充正确的信息"

Andrej Karpathy x.com/karpathy/st...

错误的 LLM 上下文对 Agent 的影响

当 LLM 的上下文管理不当时,可能会对 AI Agent 产生以下四种严重影响:

上下文中毒(Context Poisoning)

指当幻觉或其他错误信息进入 LLM 的上下文并被反复引用时。例如,一个 Agent 在执行任务时产生错误信息,这些错误信息被模型"记住"并持续影响后续的判断和决策,导致 Agent 固执于不可能或不相关的目标。

上下文干扰(Context Distraction)

发生在上下文过长,导致 LLM 过度关注上下文中的冗余信息,而忽略了其在训练中学到的核心知识。这使得 Agent 倾向于重复历史动作而非生成新的、更优的计划。对于上下文窗口较小的模型,这种干扰效应会更早出现。

上下文混乱(Context Confusion)

当上下文中的冗余内容被 LLM 用于生成低质量响应时。即使提供了大量工具描述,模型也可能因信息过载而性能下降,甚至尝试使用不相关的工具。LLM 会关注上下文中的所有内容,即使是无关信息,这会降低响应的准确性。

上下文冲突(Context Clash)

指上下文中新获取的信息或工具与现有信息发生直接冲突。例如,在多轮对话中分阶段提供信息,可能导致模型在早期轮次做出错误假设并过分依赖这些错误答案,从而显著降低最终性能。这种内部矛盾会使 Agent 的推理过程脱轨。

这些失败模式对 AI Agent 的影响尤为显著,因为 Agent 通常在需要收集多源信息、进行顺序工具调用、多轮推理和积累大量历史的复杂场景中运行,这些场景极易导致上下文膨胀,从而放大上述问题。

上下文工程策略

为了应对上下文管理不当的问题,文章中将上下文工程策略分为写入、选择、压缩和隔离四类。

1. 写入上下文(Write Context)

此策略旨在将信息保存于上下文窗口之外,以备未来使用。这包括两种主要形式:

  • 草稿本(Scratchpads) :用于存储会话内部的临时信息。这可以是在一个单一的交互过程中,智能体为了完成当前任务而需要临时记录的数据。
  • 记忆(Memories) :用于跨多个会话持久化信息。这些记忆可以是智能体自动生成或从过去的交互中综合提炼出来的,用于保留长期知识或个性化设置。

2. 选择上下文(Select Context)

此策略专注于将相关信息提取到当前的上下文窗口中。这涉及从以下来源进行选择:

  • 草稿本和记忆的检索:根据当前任务或用户查询,从已存储的草稿本或各种类型的记忆(如事件记忆、程序记忆、语义记忆)中检索最相关的信息。
  • 检索增强生成(RAG) :尤其在代码智能体中,RAG 被广泛应用于从工具描述和知识库中获取信息,确保智能体能够访问到其执行任务所需的外部知识。

3. 压缩上下文(Compressing Context)

此策略通过保留必要的 token 来优化上下文窗口的使用效率。它主要包含:

  • 上下文摘要(Context Summarization) :将冗长的智能体交互或工具输出浓缩成更简洁的形式,减少不必要的细节,突出关键信息。
  • 上下文修剪(Context Trimming) :通过过滤或剪枝技术(通常基于启发式规则),从上下文中移除不相关或冗余的 token。

4. 隔离上下文(Isolating Context)

此策略通过分离上下文来帮助智能体更有效地执行任务。这可以通过以下方式实现:

  • 多智能体架构(Multi-agent Architecture) :将任务分解给多个子智能体,每个子智能体处理其特定任务并拥有独立的上下文,避免不同任务的上下文相互干扰。
  • 环境(Environments) :使用沙箱等环境来隔离包含大量 token 的对象或状态,例如在执行复杂计算或访问敏感数据时,将这些操作限制在特定的、受控的环境中。

实践建议

虽然 Langchain 的博客中未详细展开,但上下文工程实践中建议:

  • 动态加载工具:根据任务需求动态加载和卸载工具,避免一次性加载过多工具导致上下文混乱。
  • 上下文隔离(Context Quarantines) :创建独立的上下文区域,用于处理特定类型的信息或执行特定子任务,防止信息交叉污染。
  • 监控与评估:建立完善的监控机制,追踪 LLM 的 token 使用情况、响应时间和成本,并对 Agent 的决策过程进行记录和评估,以便及时发现和解决上下文问题。
  • 逐步优化与场景化设计:针对最耗费 token 的部分进行优化,然后逐步优化关键信息的选择,最后考虑复杂的架构调整。同时,根据具体应用场景(如客服、营销、代码生成等)设计定制化的上下文管理策略。

总结

上下文工程(Context Engineering)是构建高效、智能、鲁棒 AI 智能体的核心要素。通过巧妙地写入、选择、压缩和隔离上下文,并充分理解上下文管理不当的潜在风险,我们可以最大限度地发挥 LLM 的潜力,使其在各种任务中表现出色。

对于 AI 智能体的开发者而言,掌握这些上下文工程技术是构建 AI Agent 的关键。

参考文献

相关推荐
一只爱撸猫的程序猿3 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
Jimmy4 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
星际码仔8 小时前
停止无脑“Vibe”!一行命令,让你的Claude变身编程导师、结对伙伴
ai编程·claude
程序员老刘10 小时前
Flutter 3.35 更新要点解析
flutter·ai编程·客户端
mortimer12 小时前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
安思派Anspire15 小时前
测试18种RAG技术,找出最优方案(四)
aigc·openai·agent
程序员X小鹿1 天前
腾讯出手!重磅发布CloudBase AI CLI,集Claude Code等5大AI CLI于一体!从开发到部署!(附教程)
ai编程
狠活科技1 天前
平替 Claude Code,API接入 GPT-5,Codex CLI 国内直接使用教程
chatgpt·ai编程·oneapi
麦兜*1 天前
【swift】SwiftUI动画卡顿全解:GeometryReader滥用检测与Canvas绘制替代方案
服务器·ios·swiftui·android studio·objective-c·ai编程·swift
Jooolin2 天前
【教你一招】反汇编有啥用?
c++·ai编程·汇编语言