文章摘要
YAMS是一个为大型语言模型和应用设计的持久性内存系统,采用基于SHA-256的内容寻址存储,支持数据去重、语义搜索和全文索引。其功能包括块级去重、智能压缩策略、全文和语义搜索、崩溃恢复以及高性能处理。YAMS通过内容寻址存储提供全面的版本控制,每个文档都有唯一的SHA-256哈希作为版本标识,支持元数据更新、集合组织和快照功能。支持Linux和macOS平台,可通过Docker和Homebrew安装。
文章总结
YAMS(Yet Another Memory System)是一个为大型语言模型(LLMs)和应用设计的持久性内存系统,具备内容寻址存储、去重、语义搜索和全文索引等功能。以下是其主要特点和用法:
主要功能
- 内容寻址存储:基于SHA-256哈希算法,确保数据完整性。
- 去重:使用Rabin指纹技术进行块级去重。
- 压缩:支持Zstandard和LZMA压缩算法,并采用智能策略。
- 搜索:支持全文搜索(SQLite FTS5)和语义搜索(向量嵌入)。
- 崩溃恢复:通过预写日志(Write-ahead logging)确保数据持久性。
- 高性能:支持100MB/s以上的吞吐量,且线程安全。
版本管理
YAMS通过内容寻址存储提供全面的版本管理。每个存储的文档都会生成一个唯一的SHA-256哈希值,作为不可变的版本标识。用户可以通过元数据更新、集合组织和快照来跟踪和管理版本。
安装与构建
YAMS支持Linux和macOS平台,可以通过Docker或Homebrew安装。构建时建议使用Conan包管理器,并需要C++20编译器、CMake 3.20+和Python 3.8+。
使用场景
YAMS特别适合用于LLMs的持久性内存管理,常见场景包括: - 代码开发:跟踪代码变更、存储工作版本、记录上下文。 - 研究:缓存网页内容、API响应和文档。 - 对话上下文:存储重要讨论、决策和需求。 - 知识库:构建可搜索的项目知识库。
CLI用法
YAMS提供了丰富的命令行工具,支持文档的存储、搜索、检索和浏览。用户可以通过命令行进行批量操作,如存储文件、搜索内容、检索文档等。
MCP集成
YAMS支持通过MCP(Model Context Protocol)与Claude Desktop等MCP兼容客户端直接集成,提供WebSocket和StdIO两种传输方式。
性能优化
用户可以通过调整块大小、缓存大小和压缩策略来优化YAMS的性能,特别是在处理大文件时。
许可证
YAMS采用Apache-2.0许可证。
YAMS通过其强大的功能和灵活的集成方式,为LLMs和应用提供了一个高效、可靠的持久性内存解决方案。
评论总结
评论内容主要围绕以下几个方面:
技术问题与改进建议:
- 重定向问题:winterrx指出GitHub仓库中的域名重定向次数过多。
- 引用:"The domain listed on the GitHub repo redirects too many times."
- 多用户支持:mempko询问是否有计划支持多用户,特别是针对需要每个用户沙箱的LLM项目。
- 引用:"Any plans to build support for multiple users? Would be useful for an LLM project that requires per user sandboxing."
- 文件版本控制:marcofiocco询问文件版本控制的问题。
- 引用:"What about versioning of files?"
- 重定向问题:winterrx指出GitHub仓库中的域名重定向次数过多。
功能与使用场景:
- 图形功能:sitkack询问如何使用内置功能启用图形功能,是否使用元数据或其他文档作为链接。
- 引用:"How would you use the built in functionality to enable graph functionality?"
- 工作流示例:retreatguru请求提供使用示例,以便更好地理解其用途。
- 引用:"How do you use this in your workflow? Please give some examples because it’s not clear to me what this is for."
- 图形功能:sitkack询问如何使用内置功能启用图形功能,是否使用元数据或其他文档作为链接。
技术细节与比较:
- 嵌入生成:rkunnamp询问嵌入是如何生成的,是否使用托管嵌入模型来实现语义搜索。
- 引用:"How are embedding generated? Does it use a hosted embedding model?"
- 与其他系统的比较:huqedato表示自己在RAG中使用qdrant和Redis,质疑是否需要另一个LLM内存系统。
- 引用:"I don't really see the use of 'another memory system for LLM', perhaps I'm missing something."
- 与Letta的比较:vira28询问该系统与Letta的比较。
- 引用:"How does this compare to Letta?"
- 嵌入生成:rkunnamp询问嵌入是如何生成的,是否使用托管嵌入模型来实现语义搜索。
技术实现与优化:
- 代码库去重:elpocko对代码库块级去重节省40%的可能性表示疑问,询问具体指哪种块。
- 引用:"How is savings of 40% on a typical codebase possible with block-level deduplication?"
- 库依赖:ActorNightly质疑是否为了使用特定库而引入不必要的复杂性。
- 引用:"I see stuff like this, and I really have to wonder if people just write software with bloat for the sake of using a particular library."
- 代码库去重:elpocko对代码库块级去重节省40%的可能性表示疑问,询问具体指哪种块。
其他反馈:
- 学习收获:JSR_FDED表示感谢,表示从中学习了很多。
- 引用:"Thanks, I learned a lot from this."
- 头文件缺失:yard2010对头文件的缺失表示困惑。
- 引用:"I'm puzzled - where are the header files?"
- 个人项目分享:jerpint分享了自己开发的另一个内存系统,并提供了视频演示。
- 引用:"I also developed yet another memory system!"
- 学习收获:JSR_FDED表示感谢,表示从中学习了很多。