上下文工程(Context-Engineering): AI应用核心技术剖析

原文

上下文工程(Context-Engineering): AI应用核心技术剖析

在人工智能飞速发展的今天,一个新词汇---"上下文工程"(Context-Engineering)正逐渐取代"提示工程"(Prompt-Engineering),成为构建高效 AI 应用的核心关注点。它不仅是 AI 编码助理的新潮流,更是让 AI 真正工作的关键。

一、什么是上下文工程?

虽然"上下文工程"的原理并非全新,但这个术语提供了一个有用的抽象,帮助我们理解构建有效 AI 智能体时面临的最紧迫挑战。简单来说,AI 智能体需要相关上下文才能合理地执行任务。

与传统"提示工程"主要关注如何巧妙措辞和提供指令不同,上下文工程将重点放在如何用最相关的信息填充 LLM 的上下文窗口,无论这些信息来源于何处。它不仅仅是短任务描述,更是"将正确的信息在正确的时间填入上下文窗口的精妙艺术与科学"。Andrej Karpathy 将 LLM 类比为新型操作系统,模型是 CPU,而上下文窗口就是 RAM,上下文工程正是精巧地把对的信息在对的时机塞进上下文窗口的微妙艺术与科学。它就像为 AI 编写一个完整的剧本,而非仅仅一张便条或提词器。

二、上下文的构成要素

在实际的 AI 智能体或 LLM 应用中,上下文由多种元素组成:

  • 系统提示词/指令(System Prompt/Instruction):为智能体设定场景,定义模型行为的初始指令和风格,明确其任务类型。
  • 用户输入(User Input):用户的具体问题或任务请求。
  • 短期记忆或聊天历史(Short Term Memory / Chat History):提供 LLM 关于当前对话的上下文,包含用户和模型的所有回应。
  • 长期记忆(Long-Term Memory):用于存储和检索长期聊天历史或其它相关信息,例如跨对话的用户偏好、过去对话摘要、被告知要记住的事实等。
  • 从知识库中检索的信息(Information retrieved from a knowledge base):通过 RAG(Retrieval Augmented Generation)技术从数据库、API 调用、MCP 工具或其它外部来源检索到的相关信息。
  • 工具及其定义(Tools and their definitions):向 LLM 提供它可访问的工具的额外上下文。
  • 工具的响应(Responses from tools):工具运行后返回给 LLM 的结果,作为新的上下文供其继续工作。
  • 结构化输出(Structured Outputs):定义模型回应的格式,也可以反过来提供凝练的结构化信息作为特定任务的上下文。
  • 全局状态/工作流上下文(Global State/Workflow Context):特别适用于 LlamaIndex 构建的智能体,可作为暂存器,在智能体步骤中存储和检索全局信息,或在多步骤 Agent/Workflow 中暂存任务进度、先前结果等。

所有这些元素的某种组合构成了几乎所有智能体 AI 应用程序中底层 LLM 的上下文。

三、上下文工程的重要性

上下文工程之所以如此重要,原因在于它能显著提升 AI 系统的性能和可靠性:

  • 减少 AI 失败:大多数智能体失败并非模型本身的失败,而是上下文提供的不足或不当。
  • 确保一致性:通过提供全面的上下文,AI 能更好地遵循项目模式和约定。
  • 实现复杂功能:AI 能够处理多步骤的复杂实现,得益于适当的上下文。
  • 自我纠正能力:结合验证循环,AI 能够识别并修正自身的错误。
  • 将"原始智力"转化为"智慧软件系统":LLM 的"智力"只是基石,要使其真正有效,必须通过上下文工程提供其所需的所有信息和工具。
  • 成本效益:上下文并非免费,每个 token 都有成本,并且会影响模型行为。因此,动态管理上下文能有效优化成本和性能。

四、上下文工程的技术与策略

鉴于上下文构成的复杂性,上下文工程面临两大挑战:选择正确的上下文和让上下文适应上下文窗口限制。以下是一些关键的架构选择和策略:

  1. 知识库或工具选择(Knowledge base or tool selection): 与仅针对单一知识库(如向量存储)进行问答的 RAG 应用不同,现在的智能体应用通常需要访问多个知识库和工具。智能体首先需要关于可用工具或知识库的信息,这是确保智能体选择正确资源的关键上下文。
  2. 上下文排序或压缩(Context ordering or compression): 由于上下文窗口的限制,需要最大化利用有限空间。技术包括:
    • 上下文摘要:在检索步骤后对结果进行摘要,再添加到 LLM 上下文中。
    • 排序:在某些情况下,信息的顺序也很重要,例如当信息的日期高度相关时,通过排序步骤可以确保 LLM 收到最相关的信息。
    • 自动压缩(Auto-compact):例如 Claude Code 在上下文窗口超过 95% 时,会执行自动压缩,总结当前状态并重新开始。
  3. 长期记忆存储与检索(Long-term memory storage and retrieval): 对于需要持续对话的应用,对话历史本身就是上下文。LlamaIndex 提供了多种长期记忆实现方式,例如:
    • VectorMemoryBlock:从向量数据库存储和检索聊天消息。
    • FactExtractionMemoryBlock:从聊天历史中提取事实。
    • StaticMemoryBlock:存储静态信息。 选择合适的长期记忆类型以及它应返回多少上下文,是构建智能体时的重要决策。
  4. 结构化信息(Structured Information): 避免提供所有不必要的上下文是常见错误。结构化输出能显著提高提供给 LLM 上下文的相关性:
    • 请求结构:向 LLM 提供一个 schema,要求其输出符合该 schema。
    • 作为额外上下文提供的结构化数据:以凝练的方式提供相关上下文,避免上下文过载。 LlamaExtract 等工具可以从复杂文件中提取最相关的数据,然后将这些结构化输出用作下游智能体应用的精简上下文。
  5. 工作流工程(Workflow Engineering): 虽然上下文工程关注优化每次 LLM 调用中的信息,但工作流工程则更宏观地考虑"需要什么样的 LLM 调用序列和非 LLM 步骤才能可靠地完成工作?"。它能从根本上优化上下文:
    • 定义明确的步骤序列:规划复杂任务所需任务的确切流程。
    • 战略性控制上下文:精确决定何时调用 LLM,何时使用确定性逻辑或外部工具。
    • 确保可靠性:内置验证、错误处理和回退机制。
    • 优化特定结果:创建专门的工作流,持续交付业务所需结果。 从上下文工程的角度来看,工作流至关重要,因为它们可以防止上下文过载。通过将复杂任务分解为专注的步骤,每个步骤都有自己的优化上下文窗口,而不是将所有内容塞入一个 LLM 调用。
  6. 隔离上下文(Isolating Context): 通常出现在多智能体(Multi-Agents)的实现中。任务可以拆分到另一个子智能体(Sub Agent)去执行,执行完成后只返回结果,从而大大节省主智能体的上下文用量。
  7. 自定义格式(Custom Formats): 不一定需要遵循模型厂商预设的 message-based 格式。可以为特定使用场景创建优化的上下文格式,例如将上下文用 XML 格式都塞到单一用户提示中,以获得最大的信息密度,用更少的 Token 传递相同信息。

五、实践:利用模板进行上下文工程

要将上下文工程付诸实践,我们可以参考一些优秀的项目,例如coleam00/context-engineering-intro这个 GitHub 仓库。它提供了一个全面的上下文工程模板,旨在帮助用户为 AI 编码助手设计和工程化上下文,使其能够端到端地完成工作。该模板以 Claude Code 为中心,但其策略可应用于任何 AI 编码助手。 该模板强调:上下文工程比提示工程优秀 10 倍,比"vibe coding"优秀 100 倍。它是一个完整的系统,用于提供全面的上下文,包括文档、示例、规则、模式和验证。 其模板结构包括:

  • .claude/commands/:定义自定义命令,如generate-prp(生成综合性 PRP)execute-prp(执行 PRP 以实现功能)
  • PRPs/:存放PRP(Product Requirements Prompts),这是一种综合的实现蓝图,包含完整上下文、文档、实现步骤、验证、错误处理模式和测试要求。
  • examples/:存放代码示例,这对于成功至关重要,AI 编码助手在有模式可循时表现更好。
  • CLAUDE.md:定义项目范围内的全局规则,如项目意识、代码结构、测试要求、风格约定和文档标准。
  • INITIAL.md:用于描述初始功能请求,包含功能描述、示例引用、相关文档链接和其它注意事项。

整个工作流程大致如下:

  1. 设置全局规则:在CLAUDE.md中定义项目范围的规范。
  2. 创建初始功能请求:编辑INITIAL.md,详细描述要构建的功能。
  3. 生成 PRP:使用/generate-prp INITIAL.md命令,该命令会阅读功能请求、研究代码库、搜索相关文档,并生成一份全面的 PRP 文档。
  4. 执行 PRP:使用/execute-prp PRPs/your-feature-name.md命令,AI 编码助手会阅读 PRP 中的所有上下文,创建详细的实现计划,执行每个步骤并进行验证,运行测试并修复问题,确保满足所有成功标准。

这种方法大大减少了 AI 智能体的失败,确保了一致性,并使复杂功能的实现成为可能。

结语

上下文工程已经成为 AI 时代更重要的能力。它意味着提示工程师需要转型,可以转变为上下文工程师。这种工程思路要比vibe coding更具流程性和专业性。未来,无论是构建复杂的智能体还是优化现有的 AI 应用,理解并精通上下文工程都将是 AI 工程师的核心竞争力。它将解放工程师,并让人们能够更直观、更强大地控制计算机,实现真正的人机协作。

参考:

1、ihower.tw/blog/12817-...

2、www.llamaindex.ai/blog/contex...

3、github.com/coleam00/co...

相关推荐
KEEN的创享空间12 分钟前
AI编程从0到1之10X提效(Vibe Coding 氛围式编码 )09篇
openai·ai编程
AlienZHOU1 小时前
为 AI Agent 编写高质量 Skill:Claude 官方指南
agent·ai编程·claude
恋猫de小郭1 小时前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
KaneLogger3 小时前
【翻译】打造 Agent Skills 的最佳实践
agent·ai编程·claude
王小酱3 小时前
Everything Claude Code 文档
openai·ai编程·aiops
雮尘4 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
会写代码的柯基犬4 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
刘贺同学4 小时前
Day12-龙虾哥打工日记:OpenClaw 子 Agent 到底看到了什么?
aigc·ai编程
程序员鱼皮6 小时前
离大谱,我竟然在 VS Code 里做了个视频!
github·aigc·ai编程