在人工智能飞速发展的浪潮中,上下文工程已成为构建由大型语言模型(LLMs)驱动的高效AI代理的基石。正如安德烈·卡帕西等专家所描述的,上下文工程是"在上下文窗口中填充下一步所需的恰到好处的信息的精细艺术与科学"。这个被比作计算机RAM的上下文窗口,是LLM处理输入和生成输出时所依赖的有限工作记忆。由于存在严格的令牌限制(例如几千个令牌),对这一空间的管理对于确保AI代理准确高效地执行任务至关重要。本文将深入探讨上下文工程,详细阐述其核心策略——编写、选择、压缩和隔离上下文,并剖析诸如上下文污染、分心、混淆和冲突等常见陷阱,为开发者和爱好者提供全面指南。
上下文工程:AI代理的基础架构
上下文工程致力于精心筛选AI代理用于决策或生成响应的信息。上下文窗口中包含多种类型的信息,主要可分为以下几类:
- 指令
:提示词、少样本示例和工具描述
- 知识
:与任务相关的事实和记忆
- 工具
:代理用于行动的工具调用反馈
有效的上下文管理确保只有最相关的信息占据上下文窗口,避免信息过载并提升性能。这对于处理长期任务的代理尤为关键,因为在数百次交互中,上下文可能会不断累积,从而超出令牌限制,增加成本和延迟。
上下文工程的核心策略
为了有效管理上下文窗口,上下文工程采用了四种关键策略:编写、选择、压缩和隔离上下文。每种策略都针对确保AI在正确的时间获得正确信息这一目标,解决特定的挑战。
1. 编写上下文:为后续使用存储信息
编写上下文指的是将信息存储在上下文窗口之外,以备将来使用。这样一来,AI能够保留关键细节,同时又不会占用宝贵的即时内存。其实现方式主要有以下两种:
暂存区:AI的工作记忆
暂存区是会话中的临时存储,例如文件或运行时状态对象,用于保存中间结果或计划。它相当于人类的工作记忆,是一个临时工作空间,在解决问题的过程中,AI可以在这里存储中间计算结果、部分解决方案和推理步骤。在上下文工程中,暂存区被实现为结构化数据存储,在单个会话或对话线程中保持存在。
设计暂存区时面临的工程挑战是,要使其既足够灵活以处理各种信息类型,又具有足够的结构性以实现高效检索。这通常需要创建键值存储、层次数据结构,甚至是可以通过编程方式进行读写的简单文本缓冲区。暂存区成为AI扩展上下文的一部分,使AI能够"在纸上思考",并参考先前的想法,而不会消耗宝贵的上下文窗口空间。
例如,当解决一个复杂的数学问题时,AI可能会使用其暂存区来存储中间计算结果、跟踪已尝试的方法,并维持关于解决方案的持续假设。这避免了重复计算基本步骤的需要,并允许更复杂的推理模式。
记忆:跨会话的持久上下文
记忆是跨会话的长期存储,用于捕获事实(语义记忆)、经验(情景记忆)或指令(程序记忆)。
- 语义记忆
代表AI已学习或被告知的事实知识。从工程角度来看,这需要创建知识图谱或结构化数据库,能够存储带有适当元数据(关于其来源、置信度以及与其他事实的关系)的事实。其挑战在于确保这些记忆保持一致性,并能在对话过程中被高效查询。
- 情景记忆
捕获特定的经验或交互,记录发生了什么、何时发生以及在什么背景下发生。这对于维持持续关系或项目的连贯性特别有价值。设计情景记忆系统需要仔细考虑保留哪些信息、如何为检索建立索引,以及如何总结或压缩较旧的记忆以防止