funes: 编程代理的可持久化记忆层
TL;DR
Hugging Face 发布了 funes,这是一个轻量级、本地执行的记忆系统,它将编程代理的会话日志转换为索引化的、可搜索的数据集,使 Claude Code、Codex、pi 和 Hermes 等代理能够在不向远程服务发送数据的情况下,跨机器和模型召回准确的先前的对话轮次。
为现有代理提供一键式记忆集成
关键点: 为代理添加 funes 只需一个 funes add <agent> 命令,该命令会构建初始索引,注入 recall 和 get 工具,并设置对每个已完成轮次的增量索引。
curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh
funes add claude # or codex, pi, hermes
- 默认推理后端没有 ML 运行时依赖;嵌入(embeddings)和重排序(reranking)在用户机器上运行。
- 索引是增量的:新轮次会被嵌入并添加,而无需重新嵌入整个历史记录。
recall会返回轮次的原始文本以及来源元数据(代理、时间戳、会话、轮次),并提供一个get命令来打开周围的上下文。
"有了 funes,召回发生在对话内部。代理会自主寻求其记忆,并指明其答案背后的会话。"
确定性流水线与排序架构
关键点: funes 将所有支持的追踪格式规范化为统一的 turn-and-block 表示形式,然后通过一个确定性流水线进行处理:
- 分块(Chunking)每个轮次。
- 使用固定的本地模型进行嵌入(Embedding)。
- 将数据存储在本地的 Lance 追加式数据集中。
- 查询结合了向量相似度与 BM25,融合排名,使用 cross-encoder 进行重排序,按近期性重新加权,并附带相邻块。
这种设计带来了三个关键特性:
- 跨代理的统一记忆 – 所有支持的代理都会写入相同的结构,因此
recall可以跨越 Claude Code、Codex、pi 和 Hermes 的历史记录。 - 原始证据保持完整 – 写入时不对内容进行摘要,因此每个结果都可以追溯到产生它的确切切片/轮次。
- 默认本地运行 – 索引、嵌入和重排序不需要 Hub 账号或外部服务。
记忆即数据集,而非托管服务
关键点: funes 将记忆视为一个 Lance 数据集,它可以选择性地发布到私有的 Hugging Face 数据集,从而实现跨机器的无缝移植性。
funes add codex acme/funes-memory # bind to a remote dataset
- 发布时会在索引过程中脱敏处理凭证;安全扫描器(在
SECURITY.md中记录)会在上传前移除明显的敏感信息。 - 远程记忆会被本地缓存,因此后续查询可以以本地速度运行,而 Hub 提供所有权、访问控制、版本管理和分发。
- 该工作流不会创建一个单独的“记忆即服务”账号;同一个二进制文件可以同时为本地和远程记忆提供服务。
ask vs. recall: 单次查询 vs. 集成工作流
关键点: funes ask 让用户可以在不安装持久化代理集成的条件下,向记忆库进行单次提问。
funes ask claude "what did we decide about the streaming parser"
# Or against a published memory
funes ask claude "why is funes append-only" --memory huggingface/funes-memory
- 该命令会检索相关段落,将其提供给选定的编程代理,并将其返回为一个基于事实的答案,并引用其来源。
- 如果检索到的段落无法支持一个答案,代理会明确指出该局限性,从而鼓励用户进行重新措辞或通过
funes add进行完整集成。
跨代理的连续性,且不丢失上下文
关键点: 由于记忆是模型无关的数据集,因此在 Claude Code 中开始的任务可以由 Codex (或任何支持的代理) 在另一台机器上继续,任务后期的代理可以 recall 前期的推理过程。
- 跨机器: 将每个主机的代理绑定到同一个远程记忆,以保留线程的连续性。
- 跨团队: 新队友可以从共享记忆中直接检索数月前的决策、死胡同和推理逻辑。
- 开源项目: 维护者可以随发布版本发布记忆,创建一个可搜索、有版本控制的
CLAUDE.md,记录完整的决策轨迹。
已发布的记忆可以通过 Hub 上的 funes 标签进行发现,任何人都可以使用 --memory 参数进行查询公共项目历史记录。
成本效益:session compaction 与 handoffs 的替代方案
关键点: 在 handoff-vs-recall 基准测试中,召回(recall)在某项任务上比书面交接(handoff)便宜 8 倍,在另一项任务上便宜 4 倍,同时保留了原始证据。
- 压缩(summarization)通常会丢失关键细节,摘要化处理会导致在两个基准测试任务中都失败。
- 召回返回的是原始段落,避免了摘要化需求,从而降低了 token 消耗。

开源基础与社区参与
关键点: funes 构建在现有的开源组件之上:
- 本地嵌入模型(无需外部 API 运行)。
- Lance 追加式数据集,用于廉价的廉价增量写入。
- Hugging Face Hub 的数据集缓存与去重。
该项目完全开源,地址为 https://github.com/huggingface/funes。 用户被鼓励针对安装问题、缺失的召回功能、或请求支持更多代理,提交 Issue。
总结: funes 将编程代理原本静态的日志,转换为一个活跃的、可搜索的记忆层,它可以在本地运行,可以作为私有数据集进行共享,并实现无缝的跨代理、跨机器的连续性——这一切只需一个命令,且无需外部服务依赖。