Memoryfields:作为可移植文件格式的代理记忆
代理记忆应被视为一种可移植的数据格式,而非多阶段处理流程。Memoryfields 提案认为,现有的代理记忆系统——无论是专有的平台锁定框架、过于复杂的数据库架构,还是僵化的知识图谱——之所以失败,是因为它们将记忆视为一个过程,而非数据。通过将记忆表示为一系列 Markdown 文件(可选地搭配 SQLite 向量索引),代理能够以显著更低的延迟和更高的灵活性来维护和检索信息。
现有记忆系统的失败
传统的代理记忆系统通常分为三类,每类都有其独特的缺陷:
- 专有框架: 这些系统通常从对话历史中挖掘信息,过度关注用户特定数据,而非通用世界知识,并将用户锁定在特定的提供商平台上。
- 复杂架构: 一些系统依赖于 pgvector、Neo4j 图数据库和专用 LLM 的组合,仅为了判断哪些内容值得记忆。这种复杂性带来了管理开销,且常常让模型感到困惑。
- 高现代主义知识图谱: 这些系统剥离信息的上下文,以创建提炼后的事实或逻辑命题。这种方法使信息与上下文隔离,导致对代理和用户而言都失去了意义。
Memoryfield 规范
Memoryfield 是一种可移植的记忆文件格式,通常以 .zip 文件归档,包含:
- Markdown 页面: 记忆的主要存储形式,以散文体书写。
- YAML 前置元数据: 每个页面的可选元数据(标题、创建时间、更新时间、UUID 和摘要)。
- SQLite 向量索引: 可选的语义搜索索引,使代理能够直接跳转到相关内容。
设计决策 1:散文优于分块
与传统 RAG(检索增强生成)中复杂的分块与重排序流程不同,Memoryfields 采用散文形式。由于代理本身负责撰写记忆,它可以直接使用 Markdown——这是它已优化的格式。
为确保与向量嵌入的兼容性,每页设置约 8KB(~2,000 个 token)的软上限。这一限制鼓励创建多个聚焦页面,而非单一大文档,这对代理和检索器而言都是有益的约束。
设计决策 2:语义跳跃 vs. 图遍历
知识图谱(如 Karpathy 维基)要求代理串行遍历链接,导致“N+1 工具调用问题”。如果相关信息位于 N 层深度,代理必须进行 N+1 次串行工具调用,每次增加数秒延迟。此外,若页面标题或链接文本未完美优化,代理往往难以找到信息。
Memoryfields 用语义搜索替代图遍历。这使代理能够根据内容直接跳转到所有相关页面,并并行读取。该过程最多只需两次工具调用:一次用于搜索,一次用于读取。
设计决策 3:模型扩展的低机制
通过使用简单的文件格式而非复杂 API,Memoryfields 使代理能够利用其固有优势——如 Bash、Markdown 和 SQLite 的熟练操作——自行发明访问模式。这种“低机制”方法确保系统能随着模型前沿的发展而扩展;随着模型能力提升,它们可以更智能地管理记忆,而不会被固定 API 所限制。
设计决策 4:传输无关性
为避免锁定,该格式是开放且传输无关的。虽然标准归档格式是 ZIP 文件,但规范允许通过本地文件、Amazon S3、GitHub 或 HTTP 服务记忆。这确保用户积累的知识可在不同代理和模型间自由迁移和互换。
实现与技术约束
对于嵌入模型,规范建议使用 nomic-embed-text-v1.5。该模型在体积(270MB)与性能之间取得良好平衡,可在非 GPU 硬件上运行,同时仍是广泛推荐的默认选择。
安全考虑
由于记忆会直接注入上下文窗口,因此容易受到提示注入攻击。作者强调,用户不应与不可信方共享上下文窗口或 memoryfields。使用静态 ZIP 文件格式,用户可通过 sha256sum 手动审查和固定 memoryfields 以确保安全。
社区观点与反驳
技术用户之间的讨论突显了基于文件的记忆系统中的若干关键考量:
- “污染”问题: 一些用户认为,记忆中哪怕一行“污染”或错误文本,也可能对所有下游输出产生负面影响。一位用户建议,简单目录文档比正式记忆系统更优,以避免噪声和漂移。
- 与 RAG 的比较: 虽然有人认为这“不过是 RAG”,但另一些人指出,关键区别在于代理是记忆的作者,从而构建了一个既优化写作也优化阅读的系统。
- 外部化鸿沟: 一种哲学批判认为,将数据库附加到 Transformer 上只是“权宜之计”。其论点是,真正的记忆应整合进模型的训练或架构中,而非作为外部支架。
- 维护负担: 批评者指出,语义搜索并不能解决“遗忘”或更新过时信息的问题。如果某条记忆被证明是错误的,它仍可能在未来的搜索中语义相关,从而导致代理沿用过时路径。
"无关内容根本不会被语义搜索呈现……这相当乐观。有很多‘记忆’或与代理的过往对话应被抑制和遗忘,因为它们最初方向错误,或后来被证明是错误的。"
数据优先工作流的总结
- 撰写: 代理将记忆写成 Markdown 文件。
- 嵌入: 文件被嵌入,向量保存至 SQLite 数据库。
- 检索: 代理使用语义搜索并行查找并读取相关记忆。
Sources
相关
- Dispatch
- 项目
- Dispatch
- 项目
- 项目