上下文工程(Context Engineering)如何设计?
未标记
考查重点:相关信息选择与上下文预算。每轮调用前从目标、状态、历史与证据选相关信息,按预算压缩或外置大内容;执行反馈更新待办与检索,使摘要可回源
本题目录
参考答案
核心回答
上下文工程,是在每次模型调用前,选择并组织当前任务真正需要的信息,再随着执行反馈持续更新。它管理的不只是提示词,还包括用户目标、任务状态、历史、检索证据、工具定义与结果,以及需要时读入的记忆和文件。
可以按五项职责设计:明确目标与信息来源,按当前步骤选取材料,控制预算并压缩或外置大内容,用状态和待办维持任务连续性,再用任务结果验证效果。 一个模型调用前的组装层负责决定“这一轮实际传什么”,存储层则保留原始材料和可回读的记录。
例如研搜任务中,主 Agent 需要看到比较目标、当前进度、关键证据及未解决问题;某个子任务的大量搜索过程可以留在独立上下文或文件里,返回结论和证据位置。这样既能继续推进,也能在需要细节时回查,而不是把所有历史反复塞入窗口。
1. 先区分长期存储和这一轮的输入
任务资料可能保存在会话数据库、文件、业务系统、检索库和长期记忆中,但模型只会使用当前请求实际提供的内容,或通过工具继续读取的内容。存了完整日志,不等于模型已经看过;有一份摘要,也不等于原始证据可以删除。
可以把上下文按用途组织:
- 规则与任务: 适用的系统指令、用户当前目标、明确约束及输出要求。
- 当前状态: 正在处理的子任务、已确认事实、待办、阻塞原因及已有产物。
- 证据与记忆: 相关文档、最新业务状态、用户明确偏好,并保留来源、时间和适用范围。
- 执行接口与反馈: 当前可用工具及必要参数说明、近期完整工具交互、错误和执行结果。
这些内容不必都常驻。稳定规则保持简洁,低频专业资料和大文件按需读取;业务事实还要考虑是否过期、是否属于当前用户和任务。
2. 调用前怎样筛选与组装
先根据当前目标和阶段,选择有关工具、资料和历史。检索应同时考虑相关性、来源、权限、时间与版本;多个结果重复时可以合并,同一结论存在冲突时保留差异,不能只挑一段看起来最符合预期的文字。
再用清楚的消息角色、标题和字段区分指令、用户材料、工具观察与摘要,帮助模型理解每段信息的作用。外部文档中的命令仍是资料内容,不能因为被放进上下文就获得执行权限;访问范围由应用和工具层控制。
最后计算完整请求的预算,包含工具定义、历史、图片等输入,并为输出保留足够空间。具体取舍由任务决定:短关键证据可以保留原文,已完成探索可以摘要,大表格或日志可以留在文件中,只给范围、预览和读取入口。不能只按时间从最旧消息开始删,恰好删掉仍然有效的用户限制。
3. 常用的写入、选取、压缩和隔离怎样配合
写入上下文外的状态或笔记: 保存当前目标、关键决定、待办与产物引用,长任务换窗口后仍有继续执行的依据。模型调用时再选择有关内容读入,不能假定外置内容自动可见。
按需选取: 当前只核对一项协议,就读取相应版本和章节;工具较多时先筛选候选,再加载必要说明。检索和按文件定位可以互补,不要求所有资料都做向量化。
裁剪与摘要: 对工具结果先做字段筛选、聚合和去重;对已完成的历史保留事实、决定、约束和未解决事项。摘要带覆盖范围与版本,保留原始材料入口;更新摘要与覆盖水位时协调写入,避免并发任务把新摘要覆盖成旧版本。对数字、否定条件和关键异常,应检查是否改变含义。
上下文隔离: 把边界清楚的重型子任务交给独立上下文,主任务接收结果、限制与证据位置。这能减少探索细节干扰,也会增加任务转述和汇总成本;共享约束和必要证据需要明确传递,不能假定子 Agent 知道主对话的一切。
4. To-do List 为什么可能让模型更聚焦?
待办把当前目标和进度显式放在模型可见位置,减少模型反复从长聊天中猜测“做到哪了”,也便于检查遗漏。例如调研任务可以保留“核对版本差异、补齐部署资料、整理比较、检查报告”几项,标明当前在做哪项和阻塞原因。
实现上,把任务条目、依赖、状态和相关产物保存在任务 State 中,通过工具或执行逻辑更新;下一轮组装时注入与当前阶段有关的清单。工具实际成功后,再依据结果更新进度。模型将条目标成完成,只是状态更新请求,不能替代文件是否生成、查询是否成功等验证。
清单需要随反馈调整:新增证据可以改变后续步骤,用户改变目标也会使旧待办失效。简单任务不必强加长计划;过细、过期或互相矛盾的清单同样会干扰执行。它是组织信息的方法,不会改变模型参数或保证所有步骤一定正确。
5. 怎样知道这套设计确实有效?
可以保留代表性任务轨迹,重放长对话、跨窗口继续、用户更正约束、工具失败、证据冲突和资料更新等情况。检查模型是否获得需要的证据,是否沿用过期状态,摘要是否漏掉条件,引用是否能回读,以及任务是否最终完成。
调试时保存脱敏后的实际请求组成、材料标识与版本、筛选或压缩理由和工具结果,区分问题来自“资料没有取到”“取到了但没传入”“传入后被错误压缩”还是“模型没有正确使用”。不同原因需要不同改法,不能统一靠增加提示词。
对同一任务比较原始历史、筛选后上下文及不同压缩策略,同时看答案正确性、任务完成率、约束遵循、回读次数、延迟和费用。输入更短只是过程变化,任务完成得更好、代价可接受才说明方案有价值。
常见追问
上下文工程和 Prompt Engineering 有什么区别?
提示词工程侧重指令怎样表达,上下文工程还决定信息从哪里来、何时进入或退出窗口、怎样保存与更新。提示词是其中一部分,RAG、记忆、工具管理和任务状态则提供其他输入与更新机制。
换更长窗口的模型,是不是就不用做了?
长窗口缓解容量限制,但不会自动处理资料过期、冲突、权限、工具噪声和成本。也要确认模型是否能在当前长度稳定使用关键证据,不能只看标称容量。
压缩上下文和清空会话是一回事吗?
不是。压缩改变当前使用的信息表示,原记录可以继续保留;清空或删除存储则影响数据本身。框架中的裁剪操作究竟只影响一次请求,还是会更新持久状态,应结合具体接口确认。
对应教程
参考资料
- 国内:JavaGuide:上下文工程:借鉴调用前组装目标、证据、记忆、工具与历史的过程,组织正文中实际请求内容的选择和总预算取舍。
- 国内:ranxi2001:记忆与上下文:参考约束丢失、过期状态与摘要失真的案例,说明正文中结构化状态、原文回查和失败回放的设计。
- 国内:WeThinkIn:Agent 记忆与上下文工程:依据增量摘要、水位与版本管理,说明正文中长任务连续性、并发覆盖及待办与真实完成的区分。
- 国外:Anthropic:Effective context engineering for AI agents:借鉴按需读取、压缩、笔记与子任务隔离,说明正文中控制信息容量并保留任务连续性的几种方法。
- 国外:LangChain:Short-term memory:依据消息裁剪、删除与摘要的不同作用,解释正文中当前可见上下文和持久会话数据的区别。
相关面经
10 篇字节跳动
AI 全栈实习生上下文和项目记忆做了哪些建设?多 Agent 之间如何协作?
中科星图维天信
后端开发在 AI Agent 项目中,你是如何解决上下文治理、持久化存储和权限控制的?
阿里巴巴
Agent 开发工程师你们的上下文是怎么组装的?
美团
AI 应用开发工程师日志数据量很大,会全部塞进模型上下文吗?
快手
全栈实习生了解过Agent的上下文是怎么样的吗?



