如何为AI Agent构建记忆系统
本文介绍了为AI Agent添加记忆功能的实用方法,包括短期记忆和长期记忆的概念、追踪分析以及如何利用LangSmith工具实现记忆循环,从而让Agent从以往交互中学习并改进行为。
如何为AI Agent赋予记忆能力
让Agent从以往的行动中学习,是打造优秀Agent体验的关键。这种能力通常被称为“记忆”。有了记忆,Agent无需用户反复纠正同一个错误,而是能在第一次被告知后正确执行任务。虽然在实现上仍在不断演进,但其核心抽象概念已经清晰:你需要一个后台进程,用于发现Agent犯错或学到新信息的地方,并将这些信息提取并泛化为一个数据结构。
本文将通过一个具体实现来演示这一过程,使用LangSmith的可观测性作为追踪存储,LangSmith Engine作为分析追踪的进程,以及LangSmith Context Hub作为记忆存储。
什么是记忆?
记忆是Agent在多次运行中可以检索的持久化上下文,用于指导其行为。它可能包括事实、偏好、以往交互、指令、技能、示例和学习到的模式。追踪记录或日志是事件发生的证据,只有当相关的经验被转换为Agent在后续运行中可检索的上下文,并用于改变其行为时,它才成为真正的记忆。
为了更好地组织记忆,可以将其分为短期记忆和长期记忆。短期记忆是Agent执行当前任务时的可用上下文,例如当前线程、最近消息、工具结果、检索到的文档、中间推理产物、临时文件或状态。长期记忆则是跨越当前运行的持久化上下文,包括事实、偏好、示例、工作流、策略、指令和技能。
两者之间的关系是一个读写循环。在运行中,Agent受益于长期记忆,前提是系统通过提示组装、存储检索、工具访问等方式使其可用。运行结束后,追踪提供了事件证据,其中大部分应保留为历史,但部分包含有用信号:可记住的偏好、需澄清的指令、应成为规则的工具有使用模式或需更新的技能。
一种有用的长期记忆分类方式借鉴自认知科学:语义记忆(Agent知道的事实和知识)、情景记忆(Agent的过往经历)和程序记忆(Agent的行为方式——指令、工作流、策略、技能和工具使用规则)。许多显著的Agent行为改进来自程序记忆。
高层记忆过程
一个运作良好的Agent记忆循环包括三个部分:
- 捕获追踪:追踪记录Agent完成任务的路径:用户输入、模型调用、工具输入输出、检索文档、路由决策、延迟、错误和用户反馈。这对于理解Agent行为至关重要,因为Agent的意外行为可能源于多种原因。
- 分析追踪:从追踪中找到有用信号。信号可能来自显式反馈、评估失败或重复出现的模式。难点在于诊断——相同的症状可能对应不同的修复方法。
- 更新记忆:理解信号后,系统决定是否需要改变未来上下文。这包括修复问题(如澄清指令或更改路由规则),也包括记住有用的信息(如用户偏好或成功的示例)。
使用LangSmith实现
LangSmith提供了完整的记忆循环工具:LangSmith Observability用于捕获追踪,LangSmith Engine用于分析追踪,LangSmith Context Hub用于更新记忆。
追踪提供了捕获步骤,追踪项目存储了Agent的轨迹。Engine作为后台进程,将追踪转化为改进信号——识别重复问题、诊断根因、提出具体变更建议(如添加规则、移动指令、创建新示例、更新技能或更改路由策略)。Context Hub作为版本化管理指令、工具和技能的地方,确保记忆不是临时性的修改。
上下文更新后,后续运行加载最新的上下文,从而闭合循环。
设计原则
- 并非所有数据都应成为记忆更新:大多数追踪数据应保留为历史,仅一小部分成为持久上下文。
- 确保后续运行能够读取更新:如果运行时缓存了提示、工具或技能,记忆提交后需要刷新路径。
- 用评估保护重要行为:如果记忆更新足够重要,应具有检测行为退化的方法。
通过这种结构化的方式,开发者可以逐步构建出能够学习和适应的AI Agent系统。