# Hugging Face 发布开源工具 funes，为编码智能体提供可本地持有的记忆层

- 来源：Hugging Face：Blog（RSS）
- 发布时间：2026-09-03 08:00
- AIHOT 分数：72
- AIHOT 标记：精选
- AIHOT 链接：https://aihot.virxact.com/items/cmtlg0ht406hlrow5clznd0ld
- 原文链接：https://huggingface.co/blog/funes

## 精选理由

原文给出本地记忆层的检索机制、跨 Agent 复用方式，以及召回比压缩和交接更省成本的基准数字，方法可直接复用。

## AI 摘要

Hugging Face 发布开源工具 funes，为 Claude Code、Codex、pi、Hermes 等编码智能体提供本地记忆层，把已有会话记录索引成 Lance 数据集，一条 funes add 命令即可让 Agent 自主召回原始出处（Agent、时间戳、会话、轮次）。

## 正文

我在多台机器上工作，会根据任务切换不同的编码智能体。它们每一个面对我的项目时都形同陌路。“上周二”的推理过程在会话结束时便消失无踪。每个新智能体，在每台新主机上，都从零开始。今年早些时候，《软件会遗忘：智能体轨迹才是记忆》一文指出，编码智能体其实早已产出了我们一直在丢失的那份记录。当它们搜索代码库、尝试各种方案、遭遇错误、阅读文档、改变方向时，会留下详尽的轨迹，不仅记录了改了什么，更记录了为什么这么改。

虽然诊断是正确的，但轨迹只是潜在的记忆。智能体的会话日志仍然只是一份存档。你无法靠 grep 在上万轮对话中检索出“我们为什么放弃了流式解析器？”这个问题。要让智能体在工作时利用这些轨迹，就需要对它们进行索引、检索、排序，并确保精确的来源追溯。

这正是 funes 所提供的。它是为你的智能体（Claude Code、Codex、pi 和 Hermes）打造的持久记忆层。它基于你机器上已有的会话构建。它在本地运行，只需一条命令即可成为智能体日常工作流程的一部分。当你需要时，它还可以将数据传送到你拥有的 Hugging Face 数据集上，默认设为私有。

为你正在使用的智能体添加记忆

funes 是一个单一二进制文件。其默认推理后端不依赖任何 ML 运行时，嵌入向量和重排序都在你的机器上本地完成。安装它：

curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh

然后将其添加到某个智能体：

funes add claude # or: codex, pi, hermes

这一条 add 命令会构建首个索引，让智能体具备 recall 和 get 工具，并安装自动化流程，对每一轮已完成的对话进行索引。索引是增量式的，新的运行只会新增对话轮次，而不会重新嵌入整个历史记录。较旧且更深层的内容可以在有界步骤中回填。

从那里开始，你只需正常工作。当某个任务涉及过去的决策、理由或发现时，智能体可以自行调用 recall。你无需记住旧的会话，也无需将其上下文粘贴到新会话中。

加入 funes 之后，回忆发生在对话内部。智能体会自行调用其记忆，并在其回答背后标明对应的会话。

recall 返回的是原始文本而非摘要，并精确显示其来源（智能体、时间戳、会话和轮次）。每个结果都包含一个 get 命令，可打开完整的对话轮次及其上下文。

在底层，一条确定性的流水线将每种受支持的 trace 解析为统一的轮次与块结构，对其进行分块，用固定的本地模型嵌入，并写入本地 Lance 数据集。查询时结合向量搜索和 BM25 搜索，融合两者的排序结果，用 cross-encoder 对候选进行重排，按时间远近重新加权，并附上相邻的块。

这种设计赋予了 funes 三个重要特性：

跨智能体的统一记忆：Claude Code、Codex、pi 和 Hermes 都写入相同的数据结构。recall 可跨越它们的历史记录，每条命中结果都会标明是由哪个智能体产生的。

原始证据保持完整：写入时不会将任何内容蒸馏成一条事实。任何结果都可以回溯到产生它的那一轮对话。

默认情况下，召回是本地化的：不需要任何账户或 Hub 仓库。托管模型不会处理你的会话用于索引；嵌入向量和重排序都在你的机器上运行，而你的编码智能体负责推理。

“智能体是陌生人”的问题在一台机器上已经解决了。但当下一个智能体在别处运行时，记忆会变得更加有用。

记忆是一个数据集，而不是一项服务

要让记忆跟随你的工作流转，在向智能体添加 funes 时绑定一个即可：

funes add codex acme/funes-memory

绑定操作会将你当前的记忆发布到该处。随后 funes 会持续保持其更新，在本地为每一轮交互建立索引，并在会话边界处进行发布。智能体在整个过程中都从该记忆中进行回忆。在另一台机器上运行同样的命令，记忆便会跟随你到那里。

在底层，本地记忆是一个 Lance 数据集，而共享记忆则是一个归你所有的 Hugging Face 数据集（默认设为私有）。

在内容到达 Hub 之前，凭据已在索引过程中被移除。发布时则会再次扫描每一个分块，并扣留任何看起来仍像机密的内容。这背后的扫描机制已在 SECURITY.md 中说明，包括其覆盖范围与不覆盖的内容。

当智能体读取远程记忆时，funes 会在本地缓存数据集文件，因此热查询可恢复到本地速度。Hub 提供它已为其他数据集提供的所有权、访问控制、版本管理和分发能力。你的记忆不会成为某个独立记忆服务中的账户，也不需要通过 API 付费租回自己的记忆。

先提问，后接线

recall 是为智能体而设计的。当你想亲自向记忆提问时，请使用 ask。它默认读取你的本地记忆：

funes ask claude "what did we decide about the streaming parser"

也可以指向共享记忆。我们发布了一份 funes 开发过程的记忆，因此你可以询问 funes 为何如此运作，而无需自行创建记忆：

funes ask claude "why is funes append-only" --memory huggingface/funes-memory

funes ask 是 funes add 的只读、单次提问的姊妹功能。它会检索相关段落，将其交给编码智能体，并返回一个注明来源的有据可依的答案。它不会安装集成，也不会改变智能体的持久化配置。

检索未命中不会被掩盖。如果段落不足以支撑答案，智能体会如实说明。你可以重新表述问题，或将 funes 添加到智能体中，以便它在正常工作期间迭代式地搜索记忆。

切换智能体而不丢失上下文线索

共享记忆不绑定于创建它的智能体或模型。在 Claude Code 中开始一项任务，下周在 Codex 中继续，第二个智能体可以回忆起第一个智能体的推理过程。使用 pi 搭配本地模型或通过 Hugging Face 路由器提供的模型，然后再回到 Claude。

Claude 做出决定；一个 hook 将其索引；Codex 在另一个会话中回忆起它。演示中较早的命中记录是同一实验的早期录音：一个仅追加的记忆也记住了排练过程。

这在几个不同的层面都很重要：

跨你的机器：将每个智能体绑定到一个记忆，无论你使用哪台主机，都能回忆起历史记录。

跨团队：新队友的智能体可以在第一天就检索到数月的决策记录，包括从未进入 pull request 的死胡同和决策理由。

伴随开源项目：维护者可以发布某个版本背后的会话，并在推送时为其命名。可以把它看作一个可搜索的 CLAUDE.md，保存着项目为何成为如今这般模样的历史，而不是一个需要有人不断重写的页面。任何人都可以通过 --memory 读取公共记忆。

已发布的记忆带有数据集卡片和 funes 标签，使其在 Hub 上易于识别和发现。Hub 已经托管开放权重和数据集。funes 增加了开放的工作记忆。它保存着项目背后的决策、失败的方法和理由，可被其他智能体查询，并可追溯到产生它们的会话。

长会话最省钱的出路

长时间的调查会让会话不断膨胀，直到每一轮携带上下文的成本超过实际完成工作的成本。通常的解决办法是让智能体压缩上下文后继续，或者写一份交接文档然后重新开始。Recall 是第三种方案，因此我们在“交接 vs. Recall”基准上对它们进行了对比测试：两个任务，其答案在缺少会话先前知识的情况下无法重建。

压缩（Compaction）是大多数智能体默认采用的方式，也是三种方案中唯一一个结果出现分歧的：它在一个任务上成功到达，在另一个任务上却始终未能到达。在失败的地方，它的摘要把关键发现给抹平了。Recall 返回的是原文段落本身，因此发现不必经受摘要这一关的考验。

Recall 在两个任务上都是三者中最便宜的方案，在一个任务上比书面交接便宜 8 倍，在另一个任务上便宜 4 倍。

每个条形图中较浅的部分是准备通道、交接或压缩的一次性开销，在提出第一个问题之前就已支付，且只计一次。叉号标记表示该通道始终未能到达，因此没有每次成功的成本。

别再从头开始

“思考就是遗忘差异、进行概括、做出抽象。” —— 豪尔赫·路易斯·博尔赫斯，《博闻强记的富内斯》

你的智能体已经写下了记录。funes 托管在 github.com/huggingface/funes，只需一条命令，就能把那条记录变成下一个智能体可以读取的记忆——无论你此刻在哪台机器上。

基于开源构建

funes 几乎没有自创什么。它依托于足以在本地运行的开源嵌入模型、Lance 支持低成本增量写入的追加式数据集，以及 Hub 针对数据集提供的缓存与内容去重能力。真正的工作在于把这些能力整合成智能体真正可用的记忆。

funes 同样是开源的。无论是安装问题、记忆召回遗漏，还是你希望支持的智能体，都可以提交 issue。
