GtRmoOqaUAEXH2i.webp

# Context Engineering实践方式总结

Jason
Table of Contents

上下文工程

上下文工程是什么?

“上下文工程(Context Engineering)” 的术语概念最早可以追溯到 2025 年 6 月 19 日,Shopify CEO Tobi Lutke 在 X 上发送的一条推文,他认为该术语比“提示词工程(Prompt Engineering)”更贴切地描述向大语言模型提供全面背景信息的技能。

一个形象的例子:LLMs就像一种新型的操作系统。 LLM就像CPU一样,其上下文窗口(Context Window)就像RAM一样,用作模型的工作记忆。就像RAM一样,LLM上下文窗口的处理能力有限,无法处理各种上下文来源。就像操作系统策划适合CPU的RAM一样,我们可以考虑“上下文工程”扮演类似的角色。

核心就是围绕如何解决“让模型更好的获得与当前任务相关的信息”这一命题,所使用的大模型相关的技术手段,属于“新瓶装旧酒”,技术手段包括:提示词工程(Prompt Engineering)、检索增强生成(RAG)、记忆体(Memory)、工具(Tool、MCP)、A2A等集成。

与提示词工程的区别

在实际 NLP 任务中,上下文工程与提示词工程经常结合使用,以最大化模型性能:

  • 例如,在多轮对话系统中:

    • 上下文工程:保留用户之前的对话历史(如 “我想买一部手机,预算 5000 元”);
    • 提示词工程:设计提示将上下文与当前问题关联(如 “根据以下对话历史,回答用户的问题:[对话历史] 问题:推荐一款符合预算的手机”)。
  • 再如,在长文本摘要中:

    • 上下文工程:提取文档的关键段落(如引言、结论)作为上下文;
    • 提示词工程:设计提示要求摘要包含核心信息(如 “总结这篇论文的研究方法、结果和结论,用 100 字以内”)。

LangChain关于上下文工程实践的策略

在 LangChain 7 月 2 日发表的 这篇 Blog 中,详细介绍了几种常见的上下文策略。其中引入了记事板(Scratchpad)的新概念:

  • 写入(Write)

    把当前会话的关键内容即时保存到上下文窗口之外,例如持久化笔记或记忆,以便在后续阶段使用。

    具体方式

    • 记事板

      • 把中间结果或行动计划写入文件或内存状态中,以避免上下文窗口截断(如超过200k token 后自动截掉)。
    • 长期记忆

      • 利用 LLM 自动生成/整理回忆,许多产品(如 ChatGPT、Cursor、Windsurf)都支持此功能。
  • 选择(Select)

    在真正需要使用时,从外部存储中“拉取”最相关的内容到上下文窗口,以避免无意义的上下文堆积。

    具体方式

    • 记事板:选择暴露到 LLM 的字段或调用读取工具;开发者可控制读入内容。
    • 长期记忆

      • 选择合适的回忆作为 few-shot 示例,或作为事实记忆。
      • 小规模记忆可全量拉入,如 Claude Code 的 CLAUDE.md 或 Windsurf 静态规则文件等;大规模记忆则通过 embeddings 或知识图进行语义检索,辅助选取。
    • 工具:当工具数量多且描述相似时,通过 RAG 挑选最相关的工具,可显著提升选择准确率。
    • 知识:检索知识时同样使用 RAG、AST 分块、知识图、重排等技术提高相关性与精度。
  • 压缩(Compress)

    对已经拉入上下文窗口的内容进行浓缩或剪裁,只保留对当前和未来任务最必要的内容,减少 token 占用。

    具体方式

    • Context Summarization(上下文总结)

      • 在大量交互后自动对上下文做总结,大幅减少 Token 消耗量,同时又保留了关键信息。如 Claude Code 的 “auto‑compact” 在达到上下文窗口的 95% 时,会自动总结整个对话轨迹。
    • Context Trimming(上下文剪裁)

      • 使用规则剪掉老旧消息,或异步调用另一个 LLM 来剪裁不必要内容。
  • 隔离(Isolate)

    把不同任务或内容逻辑上分开管理,确保上下文窗口聚焦于当前子任务,避免干扰。

    具体方式

    • 多代理(Multi‑agent)

      • 把复杂任务拆成多个子任务,由专属子 Agent 各自运行,拥有独立上下文窗口。OpenAI Swarm、Anthropic 多代理就是成功案例。它们发现在并行探索时隔离上下文会比 Single Agent 更高效。
    • 沙箱环境(Environments)

      • 如 HuggingFace CodeAgent,将工具调用运行在隔离 Sandbox 中,不将大体量内容直接送入 LLM,而是把重要结果抽取后才提供上下文。
    • 状态对象隔离(State isolation)

      • 在 Agent 的 Runtime State 中定义多个字段,如 messagestool_outputs 等;只有需要给 LLM 的部分才暴露,其他隔离保存,避免无关内容进入上下文窗口。

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts