上下文工程:让 AI Agent 稳定工作的关键
翻译:Transwan 校对:Carl Cui 如果你经常使用 AI Agent,大概率碰到过这种情况:任务刚开始的时候,agent 表现得很好,能理解目标,也能选对工具,前几步推理看起来都在正轨上;但跑到第十几步、二十几步之后,质量开始变得不稳定,它可能忘了最初的要求,开始调用一些没必要的工具,或者输出明显变得粗糙。 很多人的第一反应是模型不够强,但在 Agent 场景里,问题往往不在模型本身,而在它在执行过程中看到了什么、忘掉了什么,以及被哪些无关信息干扰了。 这就是上下文工程要解决的问题,组织模型所看到的内容被称为上下文工程。过去我们谈提示词工程,关注的是如何写好一段初始指令;现在我们构建 Agent,要关心的是如何管理模型在每一步能看到的全部信息。一个可靠的 Agent,不只有一个好 prompt,而是有一套能够持续运转的工作记忆系统。 1. 什么是上下文工程,为什么 Agent 特别需要它 提示词工程解决的是“怎么把任务说清楚”。比如角色怎么设定,目标怎么描述,输出格式怎么约束,示例怎么给。这在普通聊天场景里很有效,因为聊天机器人通常只是在回答一个问题。但 Agent 不一样,它会连续执行动作,会浏览网页、调用 API、读取文件、写代码、运行命令,并根据中间结果继续做下一步决策。每一次工具调用、每一段检索结果、每一次对话历史,都会成为模型下一步推理时可能看到的上下文。 所以,上下文工程不是提示词工程的替代品,而是它在 Agent 时代的扩展。Anthropic 对这个概念的定义很直接:上下文是你从 LLM 中采样时包含进去的 token 集合;上下文工程,就是优化这些 token 的效用,让模型持续得到我们想要的结果。换句话说,关键不是把更多东西塞进窗口,而是在正确的时间、以正确的形式,让模型看到真正有用的信息。 可以把模型想象成 CPU,把上下文窗口想象成 RAM。CPU 再强,如果内存里塞满了无关内容,程序也会变慢、变乱。Agent 也是一样。上下文窗口一旦被大量工具输出、历史对话、过期信息和重复内容占满,模型的推理质量就会下降。这个过程通常不是到了上下文上限才突然发生,而是在窗口还远没有填满时就已经开始退化。 这类现象常被称为 context rot,也就是上下文腐烂。Chroma 的研究测试了多个前沿模型,发现随着输入长度增加,模型表现会变得越来越不稳定。另一个经典问题叫 Lost in the Middle:模型更容易使用上下文开头和结尾的信息,中间的信息反而容易被忽略。对 Agent 来说,这尤其危险,因为最初的任务目标、约束和关键背景,可能在几十步之后被大量工具输出埋到中间。模型虽然“看得到”,但实际上已经不怎么用它了。 一个 Agent 的上下文通常也远不止用户的一句话。它至少可能包含七类内容:系统提示、工具定义、工具调用结果、检索到的知识、对话历史、短期和长期记忆,以及 Agent 当前的状态。系统提示定义 Agent 的身份、边界、任务流程和工具使用原则;工具定义告诉模型每个工具能做什么、参数是什么、什么时候该用;工具调用结果可能是网页全文、文件内容、命令输出或 API 返回值;RAG 系统会把检索到的文档片段塞进来;对话历史记录之前发生过什么;记忆系统加入用户偏好和历史经验;Agent 状态里还有当前计划、待办事项、已完成步骤和草稿笔记。 这些内容都在争夺同一个上下文窗口。如果不加管理,窗口迟早会被填满,而且不一定是被有价值的信息填满。很多长任务 Agent 到后面变得敷衍,并不是它突然变笨了,而是它的工作记忆被污染了。 2. 四个核心策略:写入、选择、压缩、隔离 最有效的方式是把上下文工程拆成四个动作:写入、选择、压缩和隔离。这四个词看起来简单,但基本覆盖了 Agent 上下文管理的大多数问题。 ...