摘要
1) 一句话总结 Agent Builder 通过文件系统实现短期和长期记忆功能,用户可通过直接下达记忆指令、设置按需加载的专属技能或手动编辑配置文件,来持续优化 Agent 的表现。
2) 关键要点
- 底层架构:Agent Builder 基于 Deep Agents 开源框架构建,其记忆功能本质上是 Agent 在文件系统中读取和写入的文件。
- 短期记忆:包含任务期间生成的计划、工具调用输出和进度等,仅在当前对话(线程)持续期间存在。
- 长期记忆:以标准的 Markdown 文件格式保存在持久路径(
/memories/)中,跨对话保留,用于存放核心指令和技能。 - 主动记忆指令:用户可以通过自然语言(如“更新你的指令,以后始终使用该方法”)要求 Agent 将短期对话中的有效上下文转化为长期记忆。
- 自动提议更新:当接收到明确的反馈时,Agent 会主动提议修改其指令,并在保存至长期记忆前征求用户同意。
- 技能(Skills)机制:技能是一种特殊的长期记忆,仅在任务需要时才会被加载(类似于参考图书馆),适用于存储特定主题(如特定产品)的专业上下文。
- 直接编辑记忆:用户可以直接访问并手动编辑 Agent 的指令和配置文件,这有助于审查 Agent 的思考逻辑,也是进行微小、精确更新(如修改计划任务运行时间)的最快方式。
3) 风险/缺口
- 上下文过载与幻觉风险:如果 Agent 试图同时记住所有事情(缺乏技能分类,加载过多无关上下文),可能会对当前任务失去焦点,进而导致产生幻觉(hallucinations)。
正文
作者:Jacob Talbot
Agent Builder 会随着你的使用变得越来越好,因为它能记住你的反馈。你做出的每一次纠正、分享的偏好以及行之有效的方法,你的 Agent(智能体)都能将其保留并在下次应用。
记忆功能是让 Agent Builder 感觉像队友的原因之一。但就像对待任何队友一样,了解如何与他们有效沟通会很有帮助。以下是充分利用 Agent 记忆功能的三个实用方法。
免费试用 Agent Builder
记忆工作原理快速入门
在深入探讨这些技巧之前,了解其底层实际运作原理会很有帮助。如果你愿意,也可以直接跳到技巧部分。
Agent Builder 构建在 Deep Agents 之上,这是 LangChain 用于自主、长时间运行任务的开源 Agent 框架。你的 Agent 可以访问用于推理的 LLM、用于执行操作的工具(如网络搜索、Slack 或 Google Sheets)、生成子 Agent 的能力以及一个文件系统。
这个文件系统就是记忆存在的地方。记忆分为两种类型:
-
短期记忆:你的 Agent 在任务期间创建的文件,例如计划、工具调用的输出(如网络搜索结果)以及任务进度。它们在对话(或线程)持续期间存在,但不会跨对话持久保存。
-
长期记忆:你的 Agent 保存到持久路径(
/memories/)的文件。这些文件在每次对话中都会保留。你的 Agent 的核心指令和技能就存放在这里。记忆使用标准的 Markdown 文件进行存储。
就是这么简单。记忆听起来很抽象,但它其实只是你的 Agent 可以读写的文件,目的是为了更好地完成工作。
告诉你的 Agent 去记住
当你与 Agent 合作时,你会不断生成有用的上下文。也许你已经迭代出了一个效果很好的格式,或者你已经明确了你希望如何呈现结果。这些上下文存在于短期记忆中,但它们不必一直停留在那里。
你可以告诉你的 Agent 保存它学到的东西。可以尝试这样说:
“那个方法效果非常好。更新你的指令,以后始终使用那个方法。”
“记住,我更喜欢要点列表,而不是长篇大论。”
“将你从这次对话中学到的东西整合到你的记忆中。”
你的 Agent 会根据你的反馈更新其长期指令,就像队友在高效的工作会议后做笔记一样。随着时间的推移,这意味着你需要做的纠正会越来越少,并且从一开始就能获得更好的结果。
在实践中,这一步并不总是必要的。如果你给 Agent 明确的反馈,比如“将你的写作风格改为直接、简洁的散文”,它会意识到这是值得记住的。它会提议修改其指令,并在保存之前征求你的同意。当结论不太明显时,告诉你的 Agent 去记住是最有用的,例如当你们一起迭代一个问题并得出了一个可行的方法,但从未明确说明过。
使用技能(Skills)获取专业上下文
技能(Skills)是长期记忆的一种形式,但有一个重要的区别:它们只在任务需要时才会被加载。可以把它想象成给你的 Agent 提供一个参考图书馆,而不是让它预先记住所有东西。Agent 看到书架上的书名,只有在相关的时候才会把书拿下来。
这一点很重要,因为上下文并非越多越好。一个试图同时记住所有事情的 Agent 可能会对当前任务的重点失去焦点。这可能会导致幻觉(hallucinations)。
举个实际的例子。我有一个用于撰写我们产品相关内容的 Agent。当我在写关于 LangSmith Deployment 的内容时,我希望 Agent 参考该产品的功能、受众和定位。当我在写关于 Agent Builder 的内容时,它需要完全不同的上下文。而当我在写一些不相关的内容时,比如 LangChain 即将举行的 Agent 大会 Interrupt,它根本不需要详细的产品上下文。
因此,我为每个产品设置了技能。我的 Agent 的核心指令负责处理语气和写作风格。而技能则负责处理特定于产品的上下文。Agent 会根据我正在写的内容引入正确的技能,并忽略其余的。
你可以随时要求你的 Agent 创建一项技能:“为 [主题] 创建一项技能,其中包含 [Agent 需要的上下文]。”
直接编辑你的 Agent 记忆
你的 Agent 的指令和配置文件是可以直接访问和编辑的。你不需要非得这么做,因为 Agent Builder 会根据你的反馈更新自己的指令。但有两个很好的理由值得你考虑直接编辑。
这有助于你了解 Agent 的思考方式。阅读 Agent 的指令就像审查队友的项目计划。你可以看到 Agent 是如何处理你的问题的,它优先考虑什么,以及它的假设在哪里可能与你的不一致。如果有些地方看起来不对劲,比如不必要的步骤或错误的假设,你可以直接修复它。
有时候这样只是更快。如果你想更改计划任务的运行时间,或者微调指令中的某一行,直接编辑只需几秒钟。要求 Agent 进行更改也行,但对于微小、精确的更新,自己编辑文件可能是最快的途径。
要查看和编辑 Agent 的指令,你可以导航到 Agent 的记忆文件。
开始构建
这些是让你的 Agent 随着时间的推移变得更聪明的一些简单方法:告诉它去记住,赋予它专业技能,并且不要害怕探究其底层原理。
如果你构建了自己喜欢的东西,请在 Community Slack 中与我们分享。
试用 Agent Builder