SOTA Sync
全部文章
记忆与上下文2026-09-04

Agent 的记忆,不该被锁在某个产品里

Hugging Face 开源 funes,把 Claude Code、Codex、pi 与 Hermes 的本地会话轨迹统一成可检索的 Lance 数据集。它保留原始证据与出处,结合向量、BM25、重排和时间衰减,并可同步到用户自己控制的私有 Hugging Face Dataset。

Coding Agent 每次换机器、换模型或开新会话,往往又变成第一次接触项目的陌生人。funes 的出发点很直接:Agent 已经在会话轨迹里写下了搜索、失败、取舍和决策依据,问题不是没有记忆,而是这些记录没有变成可用的 检索层

#记忆从本地轨迹开始

funes 解析 Claude Code、Codex、pi 和 Hermes 的会话,把不同格式统一成 turn 与 block,再写入本地 Lance 数据集。每次任务结束后增量索引新轨迹,不必重新嵌入全部历史。

查询不是单一向量搜索。系统组合向量检索与 BM25,融合排序后用 cross-encoder 重排,再加入时间权重和相邻片段。recall 返回原文而不是摘要,并附带 Agent、时间、会话和 turn 位置;get 可以继续打开周边上下文。

这套设计刻意避免在写入时把轨迹蒸馏成“永久事实”。原始证据保存下来,之后的 Agent 可以根据当前任务重新解释,也能追溯一条结论到底来自哪里。

#记忆是数据集,不是租来的服务

本地记忆可以绑定到用户自己拥有的 Hugging Face Dataset,默认设为私有。另一台机器或另一种 Agent 读取同一个数据集,就能继续检索过去的工程决策。Hub 提供访问控制、版本和分发,funes 负责在本地索引与查询。

发布前系统会在索引阶段和同步阶段两次扫描凭据与疑似秘密,但这不是绝对安全保证。会话里可能包含业务代码、客户信息和无法被规则识别的敏感上下文,因此团队仍需设置数据边界、保留策略和访问审计。

#Recall 与 Compaction 解决不同问题

长会话常用 Compaction 把旧上下文压成摘要,但摘要一旦删掉关键差异,后续无法恢复。funes 的基准比较了继续压缩、手写交接与按需召回:在两个依赖先前会话知识的任务上,Recall 都是成本最低的方案,分别比手写交接便宜约 8 倍和 4 倍;Compaction 在其中一个任务上没有成功完成。

不同上下文交接方式的成功任务 Token 成本,Recall 在两个任务中都最低不同上下文交接方式的成功任务 Token 成本,Recall 在两个任务中都最低

这不是说检索能取代当前上下文。活跃任务仍需要工作集,长期轨迹则适合外置、按需取回。更稳妥的分层是:当前窗口保存正在推理的状态,结构化项目文件保存稳定约束,轨迹记忆负责找回过去的证据与决策过程。

funes 的意义不只是多了一个 Memory 工具,而是把记忆所有权从 Agent 产品抽离出来:模型和 Harness 可以更换,项目的工作历史仍属于使用者。