Agent 上下文管理是上下文工程在多轮 Agent 运行中的具体应用。Agent 每一步都要重新决定模型能看到什么:固定指令如何保留、哪些工具可用、历史行动和观察如何排列、当前状态如何显式呈现,以及长任务中的信息如何压缩和恢复。
模型只能依据本轮实际收到的内容作出判断。Agent 的能力因此不仅取决于模型,也取决于 Harness 是否持续提供了正确、充分且可验证的工作上下文。
Agent 上下文的组成
一次 Agent 模型调用通常包含:
- 固定指令:角色、目标、行为边界、权限和输出要求;
- 用户请求:原始任务以及后续补充或纠正;
- 工具定义:本轮允许使用的工具、用途、参数 Schema 和限制;
- 运行轨迹:模型回复、工具调用请求、工具结果和人工反馈;
- 外部知识:从文件、搜索、知识库或业务 API 取得的相关资料;
- 任务状态:计划、已完成步骤、待办事项、失败记录和检查结果。
上下文不是 Agent 拥有的全部数据,而是从运行状态、记忆和外部环境中选出并转换后,交给模型的当前工作集。
每轮装配流程
一个可检查的装配过程可以分为七步:
- 读取用户当前目标、约束和成功标准;
- 合并已经确认的计划、进度、失败和待办事项;
- 为当前步骤选择必要工具,并保持工具定义的名称和顺序稳定;
- 从对话、文件、记忆或知识库检索候选信息;
- 去重、排序、标注来源,并按预算裁剪或摘要;
- 按模型 API 要求组成消息和工具定义,执行本轮推理;
- 将新的行动、观察、决定和验证结果写回运行状态。
工具调用请求与工具结果必须正确对应。外部工具返回的是观察数据,不应被悄悄提升为高优先级指令。
稳定前缀与动态后缀
长任务会反复调用模型。为了保持语义一致并提高缓存利用率,可以采用“稳定前缀、动态后缀”的布局:
- 前部保存稳定的系统规则、输出约束和顺序固定的工具定义;
- 中部保存仍然有效的用户请求、行动与观察轨迹;
- 后部追加最新用户消息、检索结果和当前任务状态。
时间、工具计数、当前工作目录等动态状态不宜通过每轮重写固定指令来更新。工具很多时,可以提供稳定的工具目录或发现机制,再按当前任务加载必要定义。这样既减少无关工具造成的选择干扰,也避免不必要的上下文开销。
Agent 状态栏
Agent 状态栏是由运行框架生成的结构化状态摘要,用来把分散在长轨迹中的隐式信息变成模型可以直接使用的显式信息。它可以包含:
- 当前目标和计划步骤;
- 已完成、进行中和待处理事项;
- 工具调用次数、重试次数和资源限制;
- 当前环境、时间及其他侧信道信息;
- 最近错误、验证结果和需要用户确认的事项。
状态栏通常应靠近上下文末尾,让模型在下一步决策前看到最新状态,同时不改写稳定前缀。状态栏不是事实来源本身:计数器、计划和环境摘要需要由程序维护并校验。如果状态栏与原始工具记录冲突,应停止高风险行动并重新计算,而不是盲目信任摘要。
长任务中的压缩与恢复
上下文窗口有限,而且很长的输入也可能降低模型利用关键信息的可靠性。Agent 应按信息生命周期分层处理:
- 限制单次工具结果大小,把大文件和完整日志保存在外部;
- 删除可重新获取的噪声和重复内容;
- 对较早轨迹生成结构化摘要;
- 接近窗口上限时,再压缩较大范围的历史;
- 把目标、约束、关键决定、失败路径、文件位置、来源和待办事项列为不可静默丢失的信息。
摘要应带有回到原始记录的定位信息。恢复长任务时,先加载目标、当前状态、关键决定和工作产物,再按需要读取历史证据;不要只依赖一段无法核对的自然语言总结。
仅保留最近消息的滑动窗口容易删掉早期约束和已经尝试过的动作,可能让 Agent 重复调用同一工具。压缩策略需要通过真实长任务测试,而不能只比较压缩后的 Token 数量。
子 Agent 上下文隔离
当搜索、研究或日志分析会产生大量中间信息时,可以把范围明确的子任务交给独立 Agent。子 Agent 在自己的上下文中完成探索,主 Agent 只接收结论、证据和必要定位信息。
隔离可以阻止大量中间噪声进入主上下文,但任务描述必须自包含,并明确输出格式、证据要求和停止条件。子 Agent 的结论仍需由主 Agent 核对,委派本身不等于验证。
与提示词、状态和记忆的区别
- 提示词主要表达指令,是上下文的一部分;
- 任务状态描述当前执行进度和环境事实;
- 记忆保存可跨步骤或跨会话复用的信息;
- 上下文是某一轮模型调用实际可见的完整输入。
保存了信息不等于模型当前知道这条信息。只有把相关状态或记忆检索出来并装入上下文,它们才会影响本轮决策。具体持久化边界见Agent 状态与记忆。
安全边界
- 对网页、邮件、文档和工具输出标注来源与信任级别;
- 不把外部文本中的命令当成系统指令执行;
- 对写入、发送、删除、付费和权限变更保留独立授权;
- 只向模型提供完成任务所需的敏感信息;
- 在压缩和转交子任务时继续保留权限约束;
- 记录模型看到的上下文版本,便于复现和审计。
调试检查清单
逐轮排查 Agent 时,可以检查:
- 模型看到了哪些目标、约束、事实和工具;
- 哪些信息被省略、裁剪或摘要,原因是什么;
- 工具调用与结果是否正确对应;
- 当前状态是否来自可验证的程序记录;
- 失败尝试是否仍然可见,是否存在重复行动;
- 关键资料是否被噪声掩盖或放在不利位置;
- 下一轮应重新检索、压缩、委派还是请求用户确认。