文章很短,但是我写了半个国庆节...希望能帮助到各位。
首先,提示工程的主要重点是如何编写有效的提示,但随着我们致力于设计能够运行多轮推理和更长时间范围的更强大的智能体,必须制定一个策略去管理整个上下文状态(包括System Prompt、User Promot、知识库、工具、模型上下文协议(MCP)、外部数据、消息历史记录等等)。因为循环运行的代理会生成越来越多与下一轮推理相关的数据,而这些信息必须进行优化。上下文工程是一门架构设计,目的是从不断增大且不断变化的信息雪球里,筛选出哪些信息需要纳入、怎么纳入有限的上下文窗口。
| 左侧(传统提示工程) | 右侧(Agent的上下文工程) |
|---|---|
| 面向「单轮问答」 | 面向「多轮、具记忆、可行动」的 Agent |
| 两块输入:System Prompt + User Message | 多块输入:指令、记忆、工具、文档、历史消息等 |
| 模型直接生成回答 | 模型可能触发 Tool Call、外部操作或多轮推理 |
| 关注 prompt 语气与指令设计 | 关注信息结构与上下文选择 |
在所有看似复杂的AI架构中——RAG、记忆系统、工具调用、工作流——表层形式千变万化,但它们其实都围绕着同一个核心问题:如何为模型构建那唯一的一段输入文本。所有工程努力,最终都在为一个模板中的若干占位符 {} 或 {{}} 提供内容。
换句话说:RAG不是检索系统,记忆不是数据库,Function Calling也不是编程接口——它们都是上下文注入机制,它们都是上下文注入机制,它们都是上下文注入机制,说三遍。
一、无状态的根:为什么一切都要注入
LLM 与 HTTP 请求一样,是完全无状态的。模型不会“记得”任何事,它每次“看世界”的唯一窗口,就是当前输入的那一段文本。所以,“智能”的本质,不在模型本身,而在我们如何组织这段输入。上下文工程就是这门“输入的建筑学”——在有限的token空间内,选择、排序、拼接出一段最具信息密度的世界描述。
二、模板是协议,占位符是管道
每一个Agent系统,或者AI开发框架,其实都是一个模板引擎 + 变量注入系统。
模板是静态契约,占位符定义了“模型需要看到什么”;代码则是负责行动: 在何时、以什么形式把哪个占位符插入模版里 ”。 这一注入过程决定了一切:
prompt = Template("""
System: {{system_prompt}}
Memory: {{conversation_history}}
RAG Results: {{rag_results}}
User: {{user_input}}
""")
上面看似简单的几行,其实是整个智能体的生命线。
- 如果 {{rag_results}} 为空,RAG 直接化为乌有,你检索做的再好,你最终没给到提示词等于啥也没干。
- 如果 {{conversation_history}} 错位,记忆逻辑错了,或者如果为空,那就直接没有记忆了。
- 如果 {{tool_result}} 没被正确回填,Function Calling 只是摆设。
所有复杂性都在模板注入的那一刻坍缩为一个字符串。
三、RAG、Memory、Function Calling:三种上下文注入形态
这三者的差别,只在于“数据的来源”与“注入的时机”。
| 模块 | 注入来源 | 注入时机 | 结果位置 |
|---|---|---|---|
| RAG | 向量数据库(外部知识) | 请求前 | {{rag_results}} |
| Memory | 对话存储或长期记忆库 | 请求前 | {{memory}} |
| Function Calling | 工具执行结果(外部API) | 请求中/后 | {{tool_result}} (可能再次触发循环) |
它们的本质是一致的:都是让模型“看到”它原本看不到的信息。
RAG 注入事实,Memory 注入时间连续性,Function 调用注入现实执行力。
四、Curation:控制信息密度的中枢机制
在Anthropic图中,“Curation”是整个上下文工程的灵魂。它承担着模型注意力的分配机制——决定“哪些信息值得被看见”。
这一步是信息裁剪与权重分配。它回答三个关键问题:
- 哪些信息与当前任务最相关?
- 哪些冗余会稀释注意力?
- 哪些内容必须保持结构上的显式区分?
Curation 的目标是“最大化单位token的意义密度”。它让上下文成为一段“可被模型正确理解的结构化语境”,而非堆砌的文本。
五、从提示词到上下文:范式转移
传统的提示工程是离散式的创作:写一句聪明的话 → 得到一次性答案。
上下文工程是连续式的架构:构建一个可循环的输入系统,让模型持续在自我生成的上下文中推理。
Agent 的核心就是上下文工程,这是真正意义上建立了上下文循环。通过 ReAct 机制:
- 模型基于当前上下文推理;
- 输出一个结构化决策(JSON或ToolCall);
- 系统执行该行动;
- 将结果重新注入新的上下文;
- 形成“思考 → 行动 → 观察 → 再思考”的自洽闭环。
这样看来,Agent 本质只是把“提示词构建”这件事自动化、循环化了。它的每一轮行动,依然只是在重新拼出一个新的输入字符串。
唯一的不同在于:这次的字符串是它自己生成的。
从最底层逻辑看,目前的大模型的智能程度已经不再由模型参数量决定,而是由我们如何组织输入决定。RAG、Memory、FunctionCall、工作流、MCP、LangGraph……所有这些技术,都只是为那段输入提供更精准的上下文素材。模型的“理解力”,其实就是我们“注入能力”的投影。因此,当然构建AI系统的终极任务,不是“让模型更聪明”,而是
让它看到对的东西、在对的顺序、以对的结构。