文章摘要
DiffMem是一种基于Git的轻量级内存后端,专为AI代理和对话系统设计。它使用Markdown文件进行人类可读的存储,Git用于通过差异跟踪时间演变,内存中的BM25索引用于快速、可解释的检索。DiffMem将内存视为版本化存储库,当前知识状态存储在可编辑文件中,历史变化保存在Git的提交图中。这种分离使代理能够查询和搜索最新的紧凑数据,同时允许在需要时深入查看历史演变。相比传统数据库或向量存储,DiffMem通过Git的优势,专注于当前状态,减少查询和搜索的表面区域,提高操作效率。
文章总结
DiffMem:基于Git的AI代理差分记忆系统
DiffMem是一个轻量级、基于Git的记忆后端,专为AI代理和对话系统设计。它使用Markdown文件进行人类可读的存储,Git通过差分跟踪时间演变,内存中的BM25索引用于快速、可解释的检索。该项目是一个概念验证(PoC),探索版本控制系统如何作为AI应用中高效、可扩展记忆的基础。
核心设计
DiffMem将记忆视为一个版本化的存储库:知识的“当前状态”存储在可编辑的文件中,而历史变化则保存在Git的提交图中。这种分离允许代理查询和搜索紧凑、最新的数据,而无需处理历史数据的开销,同时在需要时深入探究演变过程。
为何选择Git作为AI记忆系统?
传统的AI代理记忆系统通常依赖数据库、向量存储或图结构。这些在某些规模下表现良好,但在处理长期、不断演变的个人知识时可能会变得臃肿或低效。DiffMem通过利用Git的优势采取了不同的路径:
- 当前状态聚焦:记忆文件仅存储信息的“现在”视图(例如,当前关系、事实或时间线)。这减少了查询和搜索的范围,使操作更快,在LLM上下文中更节省令牌。历史状态默认不加载,它们存在于Git的历史中,按需访问。
- 差分智能:Git的差异和日志提供了一种自然的方式来跟踪记忆的演变。代理可以询问“这个事实是如何随时间变化的?”而无需扫描整个历史,仅提取相关提交。这类似于人类记忆从线索中重建事件,而不是完整回放。
- 持久性和可移植性:纯文本Markdown确保记忆是人类可读的且与工具无关。Git的分布式特性意味着数据易于备份,不受专有格式限制。
- 代理效率:通过将“表面”(当前文件)与“深度”(Git历史)分离,代理可以有选择性——加载当前数据以快速响应,深入差异以进行分析任务。这保持了上下文窗口的精简,同时实现了丰富的时间推理。
这种方法在长期AI系统中表现出色,记忆在多年中积累:它扩展而不蔓延,保持可审计性,并通过修剪实现“智能遗忘”,同时保留可重建性。
工作原理
DiffMem结构化为可导入模块——无需服务器。关键组件包括:
- 写入代理(writer_agent):分析对话记录,识别/创建实体,在Git的工作树中暂存更新。提交是显式的,确保原子更改。
- 上下文管理器(context_manager):在不同深度组装查询相关上下文(基本:核心块;广泛:语义搜索;深度:完整文件;时间:带Git历史)。
- 搜索代理(searcher_agent):LLM协调的BM25搜索——从对话中提炼查询,检索片段,合成响应。
- API层(api.py):用于读/写操作的简洁接口。
项目状态与限制
这是一个早期的PoC——功能完备但未达到生产级。已知限制包括:
- 无自动Git同步(手动拉取/推送)。
- 基本错误处理。
- 每次初始化时重建索引(生产环境需添加缓存)。
- 无多用户并发锁。
未来愿景
DiffMem指向一个未来,AI记忆像代码一样版本化和协作。想象一下:
- 代理驱动的修剪:LLM通过归档到Git分支“遗忘”低强度记忆,模仿神经可塑性。
- 协作记忆:多代理系统共享存储库,通过合并请求进行“记忆协调”。
- 时间代理:专门模型查询Git日志以回答“我是如何改变的?”——实现自我反思的AI。
- 混合存储:与向量嵌入结合以获得语义深度,使用Git作为嵌入上的“差异层”。
- 开源生态系统:语音输入、移动同步或与Obsidian等工具集成的插件。
随着AI代理成为长期伴侣,类似Git的系统可以使它们可进化而不形成数据孤岛。我们期待社区将其推向分布式、隐私优先的个人AI。
如何开始
克隆存储库:git clone https://github.com/alexmrval/DiffMem.git
安装依赖:pip install -r requirements.txt
设置环境:export OPENROUTER_API_KEY=your_key
运行示例:python examples/usage.py
贡献
欢迎分叉、实验、提交PR!我们正在寻找:
- Git同步优化。
- 高级搜索插件。
- 实际集成。
问题和PR欢迎。让我们一起构建AI记忆的未来。
许可证:MIT
Growth Kinetics © 2025
评论总结
评论内容总结:
正面评价与支持:
- 多位评论者对该项目表示兴趣和支持,认为其具有创新性和实用性。例如,namrog84提到:“I really like this. It seems clever and easy for me to grasp some pros for this approach.”(我真的很喜欢这个。它看起来很聪明,我很容易理解这种方法的优点。)
- jmtulloss建议进行更多评估:“It would be great to see some evals to understand how well this works.”(希望能看到一些评估,以了解它的效果。)
技术改进建议:
- 一些评论者提出了技术上的改进建议。例如,bob1029建议使用BM25和FM索引结合:“Maybe having both kinds of search at the same time could work better than either in isolation.”(也许同时使用两种搜索方式会比单独使用任何一种更好。)
- lsb建议使用SQLite替代文件存储:“It could be worth sketching out how to use SQLite for your application.”(值得考虑如何在你的应用中使用SQLite。)
质疑与对比:
- 部分评论者对项目的实际效果提出质疑。BenoitP表示:“I'm failing to grasp how it solves/replaces what vector db were created for.”(我无法理解它如何解决或替代向量数据库的初衷。)
- pdp认为git和向量数据库是不同用途的工具:“So saying that git replaces vector database is like saying that a filing cabinet replaces a search engines.”(说git替代向量数据库就像说文件柜替代搜索引擎。)
其他替代方案:
- 评论者提到了其他类似的技术方案。例如,albertdessaint提到Graphiti/Zep:“How does it compare to Graphiti / Zep?”(它与Graphiti/Zep相比如何?)
- mingtianzhang分享了自己使用“Table of Content”替代向量数据库的经验:“I also replaced vector databases with 'Table of Content' for retrieval.”(我也用“目录”替代了向量数据库进行检索。)
总结:评论者对项目普遍持积极态度,认为其具有创新性,但也提出了技术改进建议和质疑。同时,评论者还分享了其他类似的技术方案,供项目参考和对比。