MemoryLake
返回全部文章
Pain Point2026 年 5 月 22 日7 分钟阅读

为什么 AutoGPT 会忘记工具历史?

您的 AutoGPT 运行到达第 60 步。它已经搜索了网络,抓取了两页,并调用了您的内部 API 四次。然后它又重复这一切,因为它没有记录任何事情发生过。相同的 URL 被提取,相同的查询被发送,相同的文件被写入。您一半的代币消耗是代理重新做它一个小时前完成的工作。

这就是工具历史遗忘问题,并且有一个明确的解决方案。

简短答案

AutoGPT 忘记工具历史是因为过去的工具调用及其观察结果存在于模型的滚动上下文窗口中,随着新步骤的增加而被总结或截断。一旦旧的工具调用掉出,规划者就没有记录它曾经运行过。持久的记忆层保持每次调用、其参数和结果的结构化日志,以便代理永远不会重复自己。

为什么 AutoGPT 会忘记工具历史

AutoGPT 的循环运行计划、选择工具、执行、观察、更新记忆。观察步骤将工具的输出写回工作上下文,而更新记忆则要么总结它,要么将其交给您连接的任何向量存储。两条路径都会失去保真度。

1. 工具输出是循环中最大的代币成本。 单次网络抓取可能返回 10K 代币。三次抓取加上几个 API 调用填满 32K 窗口。代理的默认行为是压缩较旧的观察结果以腾出空间。具体内容如“我们已经用此过滤器调用了端点 /v1/orders”被压缩为规划者无法可靠匹配的一行摘要。

2. 向量记忆回忆语义,而不是精确调用。 当您插入向量存储时,AutoGPT 可以通过相似性检索过去的观察结果。这对于“我是否读过关于这个主题的内容?”有帮助,但对于“我是否已经 POST 了这个确切的有效负载?”则没有帮助。精确调用去重需要结构化日志,而不是嵌入。

3. 没有规范的工具账本。 AutoGPT 不维护每次工具调用的单独附加记录。历史仅存在于对话记录中,而这是在上下文紧张时首先被修剪的内容。

Mem0 2026 年 AI 代理记忆状态 报告指出:在 30 到 100 次工具步骤后失去线索的代理通常首先在工具历史上失去线索,其次在规划上。

当 AutoGPT 忘记工具历史时您会失去什么

工具历史丢失比目标丢失更昂贵,因为它在每个周期中都会累积:

  • 重复的 API 调用和重复的支出。 每次重新调用都需要支付推理费用和工具配额。在速率限制的 API 上,您还会比工作需求更快地消耗预算。
  • 不一致的结果。 在第 12 步抓取一个页面,在第 47 步再次抓取。页面发生了变化。现在代理有两个版本的相同事实,而没有办法知道哪个是当前的。
  • 调试失败。 当长时间运行失败时,您无法重建实际发生的事情。记录仅显示最后几步的完整内容;之前的所有内容都是可能准确也可能不准确的摘要。

成本并不是抽象的。一个应该需要 40 步的运行需要 80 步,仍然会遗漏内容,因为一半的预算用于重走老路。

AutoGPT 的内置解决方法

社区围绕这个问题已经建立了两年,每个解决方法都留下了空白。

向量存储记忆后端。 连接 Pinecone、Weaviate 或本地 Chroma 实例为 AutoGPT 提供了一个语义回忆层。对于“我是否读过类似的内容?”很好,但对于“我是否调用过这个确切的端点?”则较弱。工具调用去重并不是向量搜索的目的。

工作区文件。 AutoGPT 可以将笔记和日志写入其工作区目录。如果您仔细提示代理记录每次调用并在每次新调用之前检查日志,这样是有效的。实际上,它会忘记记录,然后忘记检查。

自定义操作历史块。 一些分支在提示中维护操作历史列表。对短期运行有帮助。列表本身与最初填满的代币预算竞争,因此它会与其他内容一起被修剪。

您可以在官方 记忆挑战文档 中看到该项目如何框定此问题。

AutoGPT 的内置记忆不足之处

根本问题在于 AutoGPT 将记忆视为对话的属性,而不是代理与外部世界关系的属性。工具接触外部世界,而外部世界应该拥有自己的结构化账本,与聊天记录分开。

没有这个账本,每次运行都是失忆的。切换到不同的模型并没有帮助。遗忘是结构性的,而不是特定于模型的。

MemoryLake 如何修复 AutoGPT 忘记工具历史

MemoryLake 提供了一个专用的记忆层,代理可以在每个步骤中写入和读取,而无需消耗提示代币来保持历史。

  • 结构化工具账本。 每次工具调用、其参数、完整输出和时间戳都作为事实记忆存储在项目中。代理可以在每次新调用之前查询“我是否已经用这些参数调用过这个工具?”并跳过重复。
  • 完整保真度观察存储。 原始输出以原始保真度持久化。当规划者需要重新访问第 12 步的结果时,它提取完整文本,而不是压缩摘要。这就是 10,000 倍上下文优势在实践中显现的地方。
  • 冲突解决和记忆来源。 当相同的端点在不同时间戳返回不同数据时,MemoryLake 会标记冲突并记录来源。代理可以选择更新的来源或将冲突呈现给人类。

MemoryLake 的检索引擎从数十亿个项目记忆的代币中读取,并在每次转弯时仅向 AutoGPT 提供相关切片,延迟为毫秒级。

在 3 个步骤中将 MemoryLake 连接到 AutoGPT

  1. 创建项目并加载上下文。 登录 MemoryLake,打开项目管理,点击创建项目,并将其命名为“AutoGPT — 工具账本”。通过文档驱动上传任何现有参考(API 规范、抓取目标、允许列表)。使用记忆选项卡添加代理在每次调用时必须遵循的工具使用政策。
  2. 生成 MCP 服务器端点。 在项目内打开 MCP 服务器选项卡,点击添加 MCP 服务器,命名为“AutoGPT 工具”,然后点击生成。MemoryLake 返回一个 API 密钥 ID、密钥和端点 URL。立即复制密钥,它只显示一次。
  3. 连接 AutoGPT。 在您的 AutoGPT 配置中将 MemoryLake 注册为 MCP 兼容的记忆提供者,或从自定义操作调用 REST API,记录每次工具调用并在执行新调用之前查询过去的调用。如果您并行运行多个代理,Python SDK 支持集群级别的记忆操作。

常见问题

AutoGPT 是否保留工具调用历史?

AutoGPT 将工具调用保留在其对话记录中,该记录受模型上下文窗口的限制。一旦窗口填满,较旧的调用会被总结或驱逐,因此没有可靠的长期账本。

我如何让 AutoGPT 记住它已经调用过哪些工具?

将每次工具调用写入外部记忆存储,并让代理在每次新调用之前查询该存储。MemoryLake 公开带有时间戳和参数的事实记忆,因此去重是精确的,而不是近似的。

为什么 AutoGPT 会重复调用相同的工具?

因为在规划者选择下一步时,之前的相同调用已经从活动上下文中掉出。没有外部账本,代理无法知道它已经运行过。

我可以导出 AutoGPT 的工具历史吗?

不可以,除了实时记录或工作区文件中的内容。MemoryLake 将工具历史存储为结构化数据,您可以导出、审计或重放。

什么是 AutoGPT 最好的长期记忆?

一个将工具调用存储为带有时间戳的结构化事件的记忆层,支持精确匹配查询,并能在进程重启后存活。MemoryLake 在此基础上增加了 Git 风格的版本控制和冲突解决。