一个被很多人忽略的转变

去年这个时候,大家见面聊的还是"你的提示词怎么写的"。各种"咒语大全""万能模板"满天飞,仿佛只要把那句话调对了,模型就能给你想要的一切。

但真正把 Agent 推到生产环境的人,慢慢都发现一件事:当任务复杂到一定程度,提示词写得再花哨,也救不了一个上下文混乱的 Agent。

模型不是不够聪明,而是你没把"它该知道的东西"在正确的时机、用正确的方式喂给它。这件事,比那句开场白重要得多。

于是一个新词开始流行——Context Engineering,上下文工程

这篇我想把这个概念讲清楚:它到底是什么、由哪些部分组成、和提示工程差在哪,以及落地时该怎么配比。


一、从「写好一句话」到「管好一个信息系统」

先给个我自己的定义:

提示工程,是优化你对模型说的那"一句话";上下文工程,是优化模型在生成那一刻,整个上下文窗口里装的"所有东西"。

差别在哪?打个比方。

提示工程像是你给一个新来的实习生交代任务时,把话说得尽量清楚。这当然有用,但如果这个实习生对公司业务一无所知、手上没有任何资料、也不记得你昨天说过什么——你这句话说得再漂亮,他也干不好。

上下文工程关心的是另一件事:在他动手前,桌上该摆好哪些资料、哪些历史记录、哪些工具说明书。 这才是决定产出质量的关键。

提示工程是上下文工程的一个子集。这个领域的重心,正在从"调那句话"转向"调整个信息环境"。


二、上下文窗口里到底装了哪七样东西

一个成熟 Agent 在调用模型的那一刻,它的上下文通常由这几块拼装而成。我把它拆成七个组件:

组件 作用 一句话理解
系统指令 定义角色、规则、输出格式 它是谁、该守什么规矩
用户输入 当前这一轮的真实诉求 用户现在要什么
短期记忆 当前会话的对话历史 我们刚才聊了什么
长期记忆 跨会话沉淀的偏好与事实 我以前就知道的事
检索内容 RAG 从知识库拉来的相关资料 临时查到的参考资料
工具定义 可调用的函数及其说明 我能用哪些工具
工具结果 工具执行后返回的观测 工具刚告诉我什么

这七样东西,不是越多越好,而是越准越好。 上下文窗口是有限的,塞进去的每一个 token 都在和别的内容抢注意力。上下文工程的核心难题,恰恰是"取舍"——在有限的窗口里,放进当下最该出现的东西。


三、四个核心手法:把信息管起来

知道了组件,接下来是手法。生产里真正高频用到的,是下面四招。

1. 写入(Write)——让信息沉淀下来

模型本身是无状态的,每次调用都"失忆"。要让 Agent 有连续性,就得主动把关键信息写到外部——会话历史、用户画像、任务进度。

最朴素的做法是把对话历史拼回去;更工程化的做法是维护一份结构化的 scratchpad(草稿区),让 Agent 把中间结论记在那里,下一步再读出来。

2. 检索(Select)——只取当下相关的

这就是 RAG 的核心。知识库可能有几百万字,但这一轮你只需要其中最相关的几段。

# 一个最小的检索增强流程
def build_context(query, knowledge_base, top_k=5):
    # 1. 把问题向量化
    q_vec = embed(query)
    # 2. 从向量库里捞最相关的 k 段
    chunks = knowledge_base.search(q_vec, top_k=top_k)
    # 3. 拼进上下文,而不是把整个库塞进去
    return "\n\n".join(c.text for c in chunks)

关键不在于"能检索",而在于检索得准——召回的内容相关度越高,留给模型胡思乱想的空间就越小,幻觉自然就少了。

3. 压缩(Compress)——把长的变短

对话一长,上下文就爆了。压缩的常见手段有两种:

我的经验是:别等窗口满了才压缩,而要设一个阈值(比如占用到 70%)就触发,留出安全余量。

4. 隔离(Isolate)——别让信息互相污染

当一个任务要跑多个子 Agent 时,最忌讳的是把所有信息都倒进同一个上下文。正确做法是按职责隔离:每个子 Agent 只看到它该看的那部分,互不干扰。

这也是为什么多 Agent 架构里,"上下文隔离"几乎是头等大事——它直接决定系统会不会越跑越乱。


四、一个实战配比建议

很多人问:这七个组件、四个手法,具体该怎么搭?我给一个我自己常用的起步配比,供参考(不是金科玉律,按场景调):

一个判断你上下文工程做得好不好的简单信号:当 Agent 表现变差时,你第一反应是去改提示词,还是去查上下文里到底装了什么? 如果是后者,说明你已经入门了。


五、下一站:从上下文工程到环境工程

值得一提的是,这个领域还在往前走。

上下文工程管的是"喂给模型什么信息",而更前沿的讨论已经延伸到 环境工程(Environment Engineering)——不只是给信息,而是给 Agent 搭一个完整的、可交互的工作环境:文件系统、可执行的沙箱、持久化的状态存储……让 Agent 像人一样,在一个"工作台"上边干活边获取反馈。

但别急着追新概念。对大多数人来说,先把上下文这七个组件和四个手法吃透,你的 Agent 就已经能甩开一大截了。


写在最后

如果让我用一句话总结这篇:

决定 Agent 上限的,从来不是你那句提示词写得多巧,而是你有没有能力管好它的整个上下文。

提示工程教你"怎么说话",上下文工程教你"怎么给它配齐一个能干活的信息环境"。前者是入门,后者才是真正拉开差距的地方。


这是 Agent 实战系列的第 1 篇。如果你也在搭 Agent,欢迎交流你在上下文管理上踩过的坑。