Agent 的上下文由哪些部分组成,各类信息如何组织和注入?
未标记
考查重点:上下文组成与关联注入。当前输入包含指令、目标、必要历史、检索资料和工具结果;按可信度分区并关联调用 ID,按预算只注入相关部分
本题目录
参考答案
核心回答
Agent 的上下文,是当前这次模型调用能够看到、用于判断下一步的信息。它通常有五类:
- 指令与当前任务:角色、行为边界、输出要求,以及用户本次要完成的目标和已确认条件。
- 相关对话历史:必要的用户消息、助手回复和工具交互,帮助理解指代、修改和连续任务。
- 工具与输出契约:当前可用工具的名称、用途、参数 Schema,以及需要时的结构化输出格式和示例。
- 外部证据:检索片段、文件内容、工具结果等,附上必要的来源、版本或时间。
- 记忆与任务状态:与本轮有关的偏好、已确认事实、计划、已完成步骤和待解决问题。
组织时先按当前任务筛选,再按来源和职责分块,保持消息角色及工具调用与结果的关联。注入时由宿主把这些内容适配成模型支持的消息、工具定义和输出格式;数据库里保存过的信息不一定全部进入本轮上下文。每轮调用前还要检查 Token 预算,为回答和后续工具反馈留出空间。
展开说明
1. 信息来源和消息位置是两个维度
“系统指令、记忆、工具结果、对话”是一种逻辑分类,不代表请求中固定存在四段字符串。例如,长期记忆存放在 Store 中,读取后可以转成有来源标记的背景块;工具定义在支持原生工具调用的接口中通常放在专门的工具字段,执行结果则作为对应的工具消息回填。
系统规则可以来自代码、配置文件或按需加载的规则文件,但文件本身并没有天然的 API 消息角色。宿主读取后如何组织,才决定它最终进入哪里。应使用模型接口支持的角色表达指令层次,不因文档里出现“忽略前文”就把它提升成系统规则。
任务状态也不必全文交给模型。例如状态保存了完整检索结果、文件列表、执行记录和运行配置,本轮可能只需要“报告范围已确认,资料检索完成,缺少第二项指标”及相关证据。存储负责保留,组装过程负责选择,模型读取的是本轮选出的内容。
2. 每轮调用前怎样组装
可以由一个 Context Assembler 统一完成以下工作,不要求它必须是独立服务:
- 从当前请求和会话状态确定有效目标、已确认参数及缺失信息。
- 按用户、租户和任务范围读取相关记忆与资料,去掉重复、过期或不适用的内容。
- 选出当前阶段允许使用的工具,提供清楚的用途和参数约束;需要固定结果结构时提供输出 Schema。
- 保留当前任务需要的历史,较早内容可用带来源范围的摘要衔接;把最新更正和未完成事项表达清楚。
- 根据目标模型的输入限制估算消息、工具定义和附件等开销,保留输出预算,再发送请求。
输出返回以后,程序将助手消息、工具执行结果和状态变化写回相应位置。下次调用再次选择和组装,因此上下文会随任务阶段变化。身份、权限等筛选依据应来自可信的运行环境,实际工具执行时仍需检查权限。
3. 用一条天气请求串起消息和工具
假设用户先问“查一下杭州明天的天气”,接着补充“改成后天”。本轮需要保留修改关系,或将有效条件整理成“地点杭州、日期后天”,同时结合可信的当前日期和时区确定具体日期;不能把前后两个日期同时当成有效要求。
模型同时收到天气工具的名称、说明和参数 Schema,生成带调用 ID 的工具请求。程序执行后,把对应日期、天气数据和查询时间回填为工具结果,再让模型生成回答。历史工具调用和结果通过调用 ID 关联;压缩或裁剪时也要维持接口要求的合法交互结构,不能只剩一条找不到对应调用的结果。
工具访问外部服务所用的 API Key、数据库连接或服务端身份,可以由运行时传入工具。模型只需要业务参数及必要反馈,不需要看到这些凭据。类似地,一份完整天气响应可以保存在外部,本轮只注入回答所需的字段和可回查位置。
4. 记忆、检索结果和历史摘要如何避免混淆
建议明确标记它们的含义,例如“用户曾确认的展示偏好”“资料摘录:文档版本与位置”“截至某条消息的任务摘要”。摘要中的推测应保持为推测,尚未完成的动作应保持为待处理。
来源标记帮助模型区分历史事实、当前指令和外部材料,也便于程序检查更新或回查。但标记本身不等于事实一定正确:记忆仍需检查适用范围和有效时间,证据仍需核对版本;发生冲突时结合当前任务处理,具体方法可参见记忆与当前上下文冲突。
常见追问
Skill 加载后一定放在 System Prompt 吗?
取决于宿主实现。常见做法是先提供名称和用途等简要信息,命中后再读取正文;正文可能通过文件读取工具的返回消息进入上下文,也可能由宿主作为相应消息或指令块插入。要看具体加载链路,不能只凭文件名 SKILL.md 判断消息角色。
是否下一轮继续携带,也取决于历史保留、重新组装和缓存策略。文件仍在磁盘上不代表模型当前能看到,上一轮读过也不代表所有后续调用都保留全文。
为什么不把所有历史都拼到用户消息后面?
会丢失角色和调用关联,混淆当前任务、旧回复和外部资料,还会增加无关信息与输入开销。即使窗口足够,也应按任务相关性、时效和来源组织;长窗口提供容量,内容选择决定这些容量怎样使用。
本轮不发送某段历史,等于把它删除了吗?
不一定。组装时可以只调整这次请求,原始状态和归档仍保留;也可以执行摘要操作,更新后续使用的消息状态。两种方式对回放和恢复的影响不同,应明确摘要覆盖范围及原文回查方式,而不是把“没进入本轮输入”和“已经删除”混为一谈。
对应教程
- 提示词与消息模板:阅读输入类型、多角色消息和历史占位的组织,理解系统规则、用户任务、助手历史分别怎样进入一次调用。
- Tools 工具调用:阅读工具定义随请求提供、程序执行调用、结果回填消息流的闭环,串起工具 Schema 与工具结果的不同职责。
参考资料
- 国内:JavaGuide:上下文工程:参考规则文件与 API 消息角色的区别,以及 Context Assembler 的组装职责,解释信息来源如何转成本轮输入。
- 国内:zero2Agent:记忆与上下文工程:参考有效约束、结构化状态、历史摘要和最近对话分开组织的思路,避免关键条件只藏在冗长历史里。
- 国内:WeThinkIn:Agent 记忆与上下文工程:参考信任分层、来源标记、调用结果配对和摘要衔接,说明信息进入上下文后还需保持语义和消息结构。
- 国外:Anthropic:Effective context engineering for AI agents:采用每次推理前整理上下文的定义及指令、工具、外部证据的组织原则,说明正文中模型输入为何随任务步骤变化。
- 国外:LangChain:Context engineering in agents:依据模型输入、State、Store 与运行时配置的分工,区分正文中模型可见信息、工具私有参数和本轮调用的临时调整。
相关面经
12 篇东方财富
AI 应用开发工程师如果要为一个 Agent 编写提示词或设计上下文,上下文通常由哪些部分组成?
滴滴
Java 开发工程师怎么理解 Agent 的上下文管理和记忆机制?
腾讯
后端开发工程师加载后的 Skill 正文放在模型上下文的什么位置?
百度
后端开发工程师(Agent)Agent 的上下文一般由哪些内容组成?
百度
Agent 算法工程师Claude Code的Skills为什么写在System提示词,而不放在用户Query中?
展开剩余 7 篇面经
百度
AI 应用开发工程师上下文包含什么?
快手
Java 开发实习生上下文前缀一般有哪些内容?
阿里巴巴
AI 应用开发工程师下文结构是怎么组织的?有没有进行长度约束?
美团
Agent 开发工程师(智能客服)快手
AI Agent(追问)上下文拼接的结构是怎样的?
快手
AI 应用 / Agent 开发那么上下文窗口当中都包含哪些内容?
字节跳动
后端开发工程师当前是否实现了 checkpoint、resume 及 human-in-the-loop 能力?上下文包含哪些信息?




