funes: 编程代理的可持久化记忆层

TL;DR

Hugging Face 发布了 funes,这是一个轻量级、本地执行的记忆系统,它将编程代理的会话日志转换为索引化的、可搜索的数据集,使 Claude Code、Codex、pi 和 Hermes 等代理能够在不向远程服务发送数据的情况下,跨机器和模型召回准确的先前的对话轮次。


为现有代理提供一键式记忆集成

关键点: 为代理添加 funes 只需一个 funes add <agent> 命令,该命令会构建初始索引,注入 recallget 工具,并设置对每个已完成轮次的增量索引。

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 表示形式,然后通过一个确定性流水线进行处理:

  1. 分块(Chunking)每个轮次。
  2. 使用固定的本地模型进行嵌入(Embedding)。
  3. 将数据存储在本地的 Lance 追加式数据集中。
  4. 查询结合了向量相似度与 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 消耗。

Weighted tokens per successful task for five channels across two tasks, with recall the shortest bar on both

开源基础与社区参与

关键点: funes 构建在现有的开源组件之上:

  • 本地嵌入模型(无需外部 API 运行)。
  • Lance 追加式数据集,用于廉价的廉价增量写入。
  • Hugging Face Hub 的数据集缓存与去重。

该项目完全开源,地址为 https://github.com/huggingface/funes。 用户被鼓励针对安装问题、缺失的召回功能、或请求支持更多代理,提交 Issue。


总结: funes 将编程代理原本静态的日志,转换为一个活跃的、可搜索的记忆层,它可以在本地运行,可以作为私有数据集进行共享,并实现无缝的跨代理、跨机器的连续性——这一切只需一个命令,且无需外部服务依赖。

Sources