AI代理的上下文工程
(点击上方图片观看本课视频)
理解你所构建的AI代理应用的复杂性,是打造可靠代理的关键。我们需要构建能够有效管理信息、满足复杂需求的AI代理,这远超简单的提示工程。
本课将介绍什么是上下文工程及其在构建AI代理中的作用。
课程内容
- 介绍上下文工程及其与提示工程的区别。
- 分享有效上下文工程的策略,包括如何编写、选择、压缩和隔离信息。
- 解析常见的上下文失败及其解决方法。
学习目标
完成本课后,你将能够:
- 定义上下文工程,并区分其与提示工程的不同。
- 识别大型语言模型(LLM)应用中的关键上下文组成部分。
- 应用编写、选择、压缩和隔离上下文的策略,提升代理性能。
- 识别常见的上下文失败类型,如中毒、干扰、混淆和冲突,并采取相应的缓解措施。
什么是上下文工程?
对于AI代理来说,上下文是驱动代理规划并采取行动的关键信息。上下文工程指的是确保代理拥有完成下一步任务所需的正确信息。由于上下文窗口大小有限,代理构建者需要设计系统和流程来管理上下文信息的添加、删除和压缩。
提示工程与上下文工程的区别
提示工程关注于一组静态的指令,用以有效引导AI代理执行规则。而上下文工程则管理动态变化的信息集合(包括初始提示),确保代理在整个任务过程中持续拥有所需信息。上下文工程的核心是使这一过程可重复且可靠。
上下文的类型
上下文不仅仅是一种信息,代理需要管理多种来源的信息,包括:
- 指令:代理的“规则”,如提示、系统消息、少量示例(few-shot)和可用工具的描述。
- 知识:事实信息、数据库检索结果或代理积累的长期记忆,可能涉及检索增强生成(RAG)系统。
- 工具:外部函数、API及MCP服务器定义,以及代理调用这些工具后获得的反馈。
- 对话历史:与用户的持续对话,随着时间推移变得更长更复杂,占用上下文空间。
- 用户偏好:关于用户喜好或厌恶的信息,帮助代理做出更个性化的决策。
有效上下文工程的策略
规划策略
良好的上下文工程始于清晰的规划:
- 明确结果 — 明确代理任务完成后应达到的状态或产生的变化。
- 绘制上下文地图 — 确定代理完成任务所需的信息及其来源。
- 创建上下文管道 — 设计代理获取信息的方式,如RAG、MCP服务器等工具。
实用策略
当信息开始进入上下文窗口时,需要采取以下策略进行管理:
管理上下文
- 代理草稿本:允许代理在单次会话中记录相关信息,存储于上下文窗口外的文件或运行时对象中,便于后续检索。
- 记忆系统:支持跨会话存储和检索信息,如摘要、用户偏好和反馈,提升长期性能。
- 上下文压缩:当上下文窗口接近容量时,使用摘要和裁剪技术保留关键信息,删除冗余或过时内容。
- 多代理系统:每个代理拥有独立上下文窗口,需规划上下文如何共享和传递。
- 沙箱环境:用于运行代码或处理大量文档信息,避免占用上下文窗口,仅将结果和关键信息反馈给代理。
- 运行时状态对象:创建信息容器,管理复杂任务的分步结果,保持上下文与具体子任务的关联。
上下文工程示例
假设你想让AI代理“帮我预订去巴黎的旅行”。
- 仅用提示工程的简单代理可能只会回应:“好的,你想什么时候去巴黎?”仅处理当前提问。
- 采用上下文工程策略的代理则会:
- 检查你的日历,获取可用日期(实时数据)。
- 调用长期记忆,回忆你的旅行偏好,如航空公司、预算、直飞偏好。
- 确认可用的航班和酒店预订工具。
然后,代理可能回答:“你好,[你的名字]!我看到你十月第一周有空。要我帮你查找[首选航空公司]的直飞航班,预算控制在[预算]内吗?”这种基于上下文的丰富回应体现了上下文工程的优势。
常见上下文失败及解决方案
上下文中毒
定义:错误信息或幻觉被反复引用,导致代理执行不可能的任务或产生荒谬策略。
解决方案:实施上下文验证和隔离,确保信息在加入长期记忆前经过验证,发现潜在中毒时开启新上下文线程阻止传播。
示例:代理错误地认为某小机场有直飞国际航班,导致反复尝试预订不存在的航线。
应对:使用实时API验证航班信息,验证失败则隔离错误信息。
上下文干扰
定义:上下文过大导致模型过度关注历史信息,忽视训练知识,产生重复或无效行为。
解决方案:定期进行上下文摘要,压缩信息,保留重要内容,删除冗余历史,帮助模型“重置”焦点。
示例:长时间讨论旧旅行经历,导致代理忽视当前请求,反复询问无关细节。
应对:在上下文过大或对话轮次达到阈值时,摘要最近相关内容,丢弃无关历史。
上下文混淆
定义:过多工具或无关上下文导致模型生成错误响应或调用不相关工具,尤其影响小型模型。
解决方案:通过RAG技术管理工具负载,存储工具描述于向量数据库,仅选取与任务最相关的工具,建议工具数量不超过30。
示例:代理拥有大量工具,用户询问巴黎交通,代理混淆调用了错误工具。
应对:动态检索相关工具,提供精简工具集给模型。
上下文冲突
定义:上下文中存在矛盾信息,导致推理不一致或错误响应。
解决方案:使用上下文修剪和卸载,移除过时或冲突信息,利用草稿本处理信息,保持主上下文清晰。
示例:用户先说经济舱,后改为商务舱,若两者共存导致代理混淆。
应对:修剪旧指令,或通过草稿本协调冲突,确保最终指令一致。
了解更多
欢迎加入Microsoft Foundry Discord,与其他学习者交流,参加答疑时段,获取AI代理相关问题的帮助。





