基于SQLite与HRR技术构建多AI智能体本地共享记忆库
1. 项目概述为AI智能体构建一个本地共享记忆中枢最近在折腾几个不同的AI智能体项目比如Hermes、OpenClaw还有Claude Code这类工具。一个很实际的问题摆在了面前这些智能体各自为战它们之间的“记忆”是割裂的。Hermes不知道OpenClaw刚刚处理了什么任务Claude Code也无法直接利用Hermes之前总结的经验。这就像让一个团队里的成员各自用不同的笔记本记录信息无法高效流转和复用。为了解决这个问题我深入研究了agent-memory-bridge这个项目它提出了一个极其简洁优雅的方案用一个本地的SQLite数据库文件作为所有AI智能体共享的“中央记忆库”。这个项目的核心思想是“零服务器、零云端、一个文件”。它不依赖任何外部API服务不需要你注册账号、申请密钥更不用部署和维护一个记忆服务器。所有数据包括智能体存储的事实、知识、对话上下文都安全地存放在你本地的一个SQLite数据库文件里。通过为不同的智能体Agent编写轻量级的适配器Adapter它们就能像读写本地文件一样向这个共享记忆库存入和检索信息。这不仅仅是解决了数据孤岛问题更重要的是它把数据的控制权和隐私完全交还给了用户。对于处理敏感信息、追求离线工作流或者单纯不想为云服务付费的开发者来说这无疑是一个极具吸引力的选择。接下来我将从设计思路、核心实现、实操集成以及避坑经验四个方面为你完整拆解如何利用agent-memory-bridge构建属于你自己的多智能体记忆系统。2. 核心设计思路与架构解析2.1 为什么选择SQLite作为共享记忆的基石在构思多智能体共享记忆时我们面临几个基础的技术选型是用内存数据库如Redis、传统的客户端-服务器数据库如PostgreSQL还是文件数据库agent-memory-bridge坚定地选择了SQLite这是一个经过深思熟虑的决策背后有极强的工程逻辑。首先零依赖与极致简洁是SQLite的最大优势。它被直接内置于Python标准库中这意味着你不需要安装任何额外的数据库服务项目本身也几乎没有任何外部依赖。部署成本降到最低git clone之后即可运行完美契合“开箱即用”的理念。其次单文件即真理。整个记忆库就是一个.db文件。这个特性带来了无与伦比的便利性备份只需复制一个文件迁移到另一台机器也只需移动这个文件版本控制虽然不直接推荐对数据库文件进行git管理但可以通过导出SQL语句来实现。这种物理上的单一性在概念上极大地简化了“共享记忆”的模型——所有智能体都围绕着这同一个“事实源”工作。再者进程间安全与并发访问。SQLite本身支持多进程读、单进程写的并发模式通过WAL模式。对于多智能体场景通常的读写模式是多个智能体进程并发读取记忆写入操作相对较少且可以序列化。SQLite能够很好地处理这种负载通过合理的连接和事务管理可以安全地在多个Python进程间共享同一个数据库文件而无需引入复杂的消息队列或锁服务。最后内置FTS5全文搜索引擎。这是实现高效记忆检索的关键。FTS5允许我们对存储的文本内容建立倒排索引实现毫秒级的模糊关键词搜索。这意味着智能体可以像使用搜索引擎一样快速从海量记忆中定位相关片段而无需自己实现复杂且低效的字符串匹配算法。注意虽然SQLite在轻量级应用中表现卓越但它并非为高并发、高频写入的大型网站设计。在智能体场景下如果你的应用涉及每秒数百次以上的并发写入可能需要考虑更高级的并发控制或换用其他方案。但对于绝大多数自动化、辅助编程或知识管理类智能体SQLite的性能完全绰绰有余。2.2 整体架构适配器模式与核心引擎分离agent-memory-bridge的架构清晰地区分了“核心记忆引擎”和“智能体适配器”这体现了很好的模块化设计思想。核心引擎是记忆系统的“大脑”它不关心外部是谁在调用只负责三件事存储接收一段文本事实为其分配唯一ID、时间戳、类别、标签并计算一个初始的“信任度”分数然后存入SQLite。同时它会将文本内容同步到FTS5虚拟表中以便后续全文检索。检索这是最复杂的部分。项目实现了多策略混合检索。当智能体查询“关于XX的信息”时引擎会同时进行全文搜索利用FTS5快速找到包含关键词的条目。词集相似度检索使用Jaccard相似度等算法查找与查询语句用词重叠度高的条目。组合推理检索这是项目的亮点它利用“全息表征”HRR技术。简单类比就像把每个事实编码成一个特定“波形”通过波形的叠加和比较可以找到在语义上相关联但字面上不匹配的记忆。例如“猫会抓老鼠”和“ feline hunts rodent”可能被关联起来。推理与关联提供probe探查实体、related查找相关事实、reason推理两个实体的关系等高级接口基于存储的事实网络进行简单的关系推理。适配器层则是核心引擎与各个智能体之间的“翻译官”或“桥梁”。每个适配器都是一个轻薄的封装hermes_adapter.py将Hermes智能体的记忆插件接口调用转换为对核心引擎store和search等函数的调用。openclaw_adapter.py让OpenClaw技能可以直接import这个模块调用其功能。MCP Server规划中这是为了适配Claude Code、Codex等通过Model Context Protocol与外部工具交互的智能体。MCP服务器会作为一个后台进程接收智能体的请求操作记忆库再返回结果。这种架构的好处是高内聚、低耦合。核心引擎可以独立发展和优化适配器可以针对不同智能体的API特性进行定制互不干扰。未来要支持一个新的智能体平台只需要为其编写一个新的适配器即可核心逻辑无需改动。2.3 信任度机制让记忆“保鲜”并自我净化一个静态的记忆库会迅速过时和“污染”。比如智能体A早期存储了一个错误信息“项目使用MongoDB”后来被纠正为“项目使用SQLite”。如果没有机制处理过时的错误信息在检索时仍可能被返回干扰决策。agent-memory-bridge引入了简单的信任度评分机制来缓解这个问题。每个被存储的事实都有一个初始的信任分数例如0.8。这个分数会随着时间或基于反馈动态调整正向反馈当某个记忆被频繁检索并关联到成功的任务完成时可以通过update命令增加其信任度--trust-delta 0.1。负向反馈/过期如果发现某个记忆过时或错误可以手动降低其信任度或者系统可以设计一个简单的随时间衰减的规则虽然当前版本未内置衰减但预留了接口。检索过滤在search或probe时可以设置--min-trust参数例如0.3只返回信任度高于阈值的高质量记忆。这样低信任度的陈旧或可疑信息就被自然过滤掉了。这是一个非常实用的设计它模拟了人类记忆的“强化”与“遗忘”过程确保了记忆库的时效性和准确性。在实际使用中你可以结合智能体的自我验证逻辑例如让智能体对检索到的关键信息进行二次确认来动态更新这个信任分数。3. 核心引擎深度剖析与实操3.1 从零开始初始化与基础操作让我们暂时抛开适配器直接深入到核心引擎理解它是如何工作的。首先获取项目代码并尝试其命令行接口这是理解一切的基础。# 1. 克隆仓库 git clone https://github.com/zoom0102/agent-memory-bridge.git cd agent-memory-bridge # 2. 探索命令行工具 hmem # 存储第一条记忆。--category 参数用于分类便于后续管理。 python3 hmem.py store Python的默认交互环境是IDLE但推荐使用IPython或Jupyter Notebook进行开发。 --category 编程知识 --tags python,开发环境 # 再存储几条构建一个小型知识库 python3 hmem.py store Pandas是Python中用于数据分析和操作的核心库构建于NumPy之上。 --category 编程知识 --tags python,pandas,数据分析 python3 hmem.py store 在Hermes Agent中任务被分解为子任务并由不同的工具Tools来执行。 --category 智能体知识 --tags hermes,agent,架构 python3 hmem.py store OpenClaw是一个开源的AI智能体框架专注于可扩展的技能Skills系统。 --category 智能体知识 --tags openclaw,agent,技能 # 3. 进行搜索 # 全文搜索查找所有包含“python”的记忆 python3 hmem.py search python # 输出会显示每条记忆的ID、内容、类别、标签、信任度和存储时间。 # 4. 探查实体查找所有与“Hermes”这个实体相关的记忆 python3 hmem.py probe Hermes # 5. 列出所有记忆按时间倒序排列 python3 hmem.py list --limit 5 # 6. 查看记忆库状态 python3 hmem.py status # 这会输出数据库路径、总事实数、不同类别的数量等统计信息。通过以上操作你已经亲手创建了一个微型知识库。hmem命令行工具虽然简单但它暴露了核心引擎的所有关键功能。你会发现默认的数据库文件创建在~/.hermes/memory_store.db。你可以通过环境变量AGENT_MEMORY_DB来修改这个路径例如export AGENT_MEMORY_DB/path/to/your/shared_memory.db这对于统一管理多个项目的记忆非常有用。3.2 存储与检索的内部原理当我们执行hmem store时背后发生了什么文本预处理与分词输入的文本内容会被清洗去除多余空格、特殊字符等并为FTS5索引进行分词。SQLite的FTS5支持多种分词器默认适用于英文。对于中文你可能需要集成如jieba等分词库并自定义FTS5分词器这是一个进阶优化点。生成全息表征这是项目的“黑科技”部分。引擎会使用holographic.py中的HRR算法将文本内容转换成一个固定长度的、高维的“全息向量”。这个向量的特点是不同事实的向量可以进行叠加和绑定操作。叠加后的向量仍能近似解码出原始事实而绑定操作则能表示两个事实之间的关系。这为后续的“组合推理”提供了数学基础。数据库事务写入在一个数据库事务中引擎会执行以下操作向主表memories插入一行包含内容、类别、标签、信任度、时间戳和上一步生成的HRR向量通常存储为BLOB二进制数据。向FTS5虚拟表memories_fts插入一行内容字段被分词索引。可能还会更新一些关联表或索引。检索过程search则更为复杂它是一个混合检索管道# 伪代码展示混合检索逻辑 def hybrid_retrieve(query, limit10, min_trust0.1): results [] # 策略1: FTS5全文搜索 (速度快精度取决于关键词) fts_results fts_search(query, limit*2) # 多取一些候选 # 策略2: 基于词集相似度的检索 (Jaccard, 捕捉用词重叠) lexical_results lexical_search(query, limit*2) # 策略3: 基于HRR的组合推理检索 (捕捉语义关联) hrr_results hrr_search(query, limit*2) # 合并、去重、重排序 # 这里会有一个打分函数综合考虑FTS排名、词法相似度、HRR相似度以及信任度 # 例如final_score 0.4*fts_score 0.3*lexical_score 0.2*hrr_score 0.1*trust combined merge_and_rerank(fts_results, lexical_results, hrr_results, min_trust) return combined[:limit]这种多策略融合的方式确保了无论用户用关键词、自然语句还是相关概念进行查询都有较大几率找到相关的记忆。probe和related函数则是在此基础上更侧重于利用事实中提及的实体名称和HRR向量之间的关系来进行查找。3.3 信任度系统的实操与维护信任度系统不能只依赖于自动规则更需要人工或智能体反馈的介入。以下是一些实操建议初始信任度设置对于不同来源的记忆可以设置不同的初始信任度。例如从权威文档中解析的信息可以设为0.9从网络爬取的信息设为0.6智能体自己推测的信息设为0.5。设计反馈循环在你的智能体工作流中加入验证环节。例如当智能体根据记忆A做出了一个决策或输出了一个答案你可以设计一个简单的验证步骤比如让另一个智能体审核或者与已知正确源对比。如果验证通过则调用hmem update fact-id --trust-delta 0.05来奖励该记忆如果发现错误则降低其信任度甚至可以调用hmem remove fact-id将其删除。定期清理可以写一个简单的维护脚本定期例如每周列出所有信任度低于某个阈值如0.2的记忆供你审核是删除还是修正。# 示例查找所有低信任度的记忆 python3 hmem.py list --min-trust 0 --max-trust 0.3 # 审核后决定删除ID为5的记忆 python3 hmem.py remove 5 # 或者修正记忆ID为10的内容并提升其信任度 python3 hmem.py update 10 --content 修正后的内容... --trust-delta 0.3实操心得信任度机制是一个强大的工具但也是一个需要精心设计的子系统。一开始不必过于复杂可以从静态信任度开始然后逐步引入一两个关键的反馈点。关键在于要让记忆库的“质量”成为一个可观察、可管理的指标而不是一个黑盒。4. 与主流AI智能体集成实战4.1 集成Hermes Agent无缝记忆持久化Hermes Agent从0.7版本开始已经内置了“全息记忆”插件。agent-memory-bridge的巧妙之处在于它默认使用了与Hermes内置插件相同的SQLite数据库路径~/.hermes/memory_store.db。这意味着对于Hermes用户来说集成几乎是零成本的。工作原理Hermes在运行过程中其内置的记忆插件会自动将重要的对话上下文、任务结果、工具使用记录等存储到上述数据库文件中。而agent-memory-bridge的hermes_adapter.py或直接使用hmemCLI读取的是同一个文件。这样你通过CLI手动存储的知识和Hermes自动记忆的内容就天然地共存于同一个记忆库中。验证集成是否生效确保你使用的是Hermes 0.7或更高版本。正常启动并运行Hermes完成一些任务或对话。在另一个终端使用hmem命令进行搜索python3 /path/to/agent-memory-bridge/hmem.py search 你刚才在Hermes里讨论的主题你应该能看到Hermes自动存储的相关记忆条目。高级用法你还可以编写自定义的Hermes技能Skill在技能中主动调用hermes_adapter模块实现更复杂的记忆交互。例如一个“知识查询”技能可以主动搜索记忆库来回答用户关于项目历史的问题。# 示例在自定义Hermes技能中调用记忆桥 from adapters.hermes_adapter import MemoryBridge class KnowledgeQuerySkill: def __init__(self): self.memory MemoryBridge() # 默认使用 ~/.hermes/memory_store.db async def execute(self, task_input): query task_input.get(query) if query: results self.memory.search(query, limit5) # 格式化results并返回给Hermes return {answer: format_memory_results(results)} return {answer: 请提供查询内容。}4.2 集成OpenClaw作为可加载技能OpenClaw的架构以技能为核心。将agent-memory-bridge集成到OpenClaw就是将其包装成一个OpenClaw技能。步骤详解复制技能目录按照项目说明将整个agent-memory-bridge目录复制到OpenClaw的技能目录下。这个路径通常是~/.openclaw/workspace/skills/。建议重命名文件夹以更清晰例如agent_memory。cp -r agent-memory-bridge ~/.openclaw/workspace/skills/agent_memory在OpenClaw中启用技能OpenClaw通常有一个配置文件或UI界面来管理技能。你需要确保agent_memory技能被加载。这可能需要在OpenClaw的配置文件如config.yaml的skills部分添加该技能或者在UI中点击启用。在OpenClaw任务中调用一旦技能加载你就可以在OpenClaw的工作流或对话中调用它。具体的调用方式取决于OpenClaw的API设计。通常技能会暴露一些可调用的函数。你可能需要参考adapters/openclaw_adapter.py文件看它提供了哪些接口然后在OpenClaw的上下文中去调用这些接口。一个假设的OpenClaw任务YAML配置示例name: research_and_remember description: 研究一个主题并将关键发现存入共享记忆 steps: - action: web_search params: query: {{user_query}} - action: summarize params: text: {{step1.results}} - action: agent_memory.store # 调用记忆桥技能的store函数 params: content: 关于{{user_query}}的总结{{step2.summary}} category: 研究记录 tags: research,{{user_query}}在这个例子中OpenClaw完成网页搜索和总结后自动将总结存入共享记忆库供其他智能体如Hermes后续使用。4.3 规划中的MCP服务器连接Claude Code等现代IDE智能体Model Context Protocol是Anthropic推出的一种协议旨在让AI助手如Claude Code能够安全、标准化地访问外部工具、数据和功能。agent-memory-bridge规划开发MCP服务器意义重大。MCP服务器如何工作作为后台进程运行MCP服务器会是一个长期运行的程序它加载agent-memory-bridge核心引擎。暴露标准接口通过MCP协议向Claude Code暴露诸如memory_search、memory_store、memory_probe等工具函数。在IDE中调用当你在VS Code或Cursor中使用Claude Code时你可以直接通过自然语言命令如“查一下我们之前关于用户认证的讨论”Claude Code会通过MCP协议调用你本地运行的记忆桥服务器获取结果并展示给你。提前准备虽然该功能还在规划中但你可以提前了解MCP的基本概念。关注项目的GitHub更新一旦MCP服务器发布集成步骤通常会非常简单安装MCP服务器包配置Claude Code的MCP设置文件添加服务器地址和工具列表即可。集成带来的想象空间这意味着你的编码智能体Claude Code、你的自动化智能体Hermes、你的专用任务智能体OpenClaw技能全部共享同一个记忆库。你在IDE里写的设计思路可以被Hermes用来规划任务Hermes执行任务时遇到的错误日志可以被存储下来当你下次在IDE中遇到类似问题时Claude Code能直接检索到解决方案。这真正实现了跨工具、跨场景的知识流转。5. 高级应用场景、问题排查与优化5.1 设计多智能体协作工作流拥有了共享记忆你可以设计出真正协同的智能体工作流。下面是一个结合了研究、开发和文档编写的复合场景示例场景启动你向Hermes发出指令“研究一下‘使用FastAPI和SQLModel构建后端服务’的最佳实践并生成一个项目骨架。”研究阶段Hermes调用其网络搜索技能浏览相关文档和教程。它将找到的关键代码片段、配置要点、注意事项通过hermes_adapter存储到共享记忆库类别为“后端研究”标签为“fastapi, sqlmodel, python”。骨架生成阶段Hermes根据记忆中的最佳实践开始规划创建项目文件。在此过程中它需要生成数据库连接代码。这时它可以调用hmem probe SQLModel或hmem search SQLModel session快速检索到之前存储的相关配置示例直接引用。代码审查与优化项目骨架生成后你可以让OpenClaw的一个代码审查技能来分析。该技能读取项目文件同时也会去共享记忆库中搜索“FastAPI常见错误”、“SQLModel性能提示”等记忆将这些建议融入审查报告。文档生成最后你可以启动一个文档生成智能体也可以是Hermes或OpenClaw的另一个技能。它读取记忆库中整个研究、开发过程中存储的所有关键决策点、代码示例和注意事项自动整理成一份结构化的README.md或设计文档。在整个流程中记忆库充当了中央知识黑板每个智能体都在上面读写共同完成任务并且后序的智能体可以充分利用前序智能体的工作成果避免了重复劳动和信息割裂。5.2 常见问题与排查指南在部署和使用agent-memory-bridge的过程中你可能会遇到以下典型问题问题现象可能原因排查步骤与解决方案hmem命令执行报错提示找不到模块或数据库。1. Python依赖未安装。2. 数据库文件路径错误或无权访问。1. 确保在项目根目录下执行命令。检查是否有requirements.txt并运行pip install -r requirements.txt。2. 检查环境变量AGENT_MEMORY_DB是否设置正确或默认路径~/.hermes/memory_store.db是否存在且可读写。可以尝试指定绝对路径AGENT_MEMORY_DB/tmp/test.db python3 hmem.py status。搜索中文内容不准确或搜不到。SQLite FTS5默认分词器针对英文对中文是按字符分割效果差。解决方案集成中文分词库。这是一个进阶改造。你需要1. 安装jiebapip install jieba。2. 编写一个自定义的FTS5分词器在store时用jieba分词后存入在search时也对查询词进行分词。这需要修改store.py中与FTS5相关的部分。多个进程同时写入数据库时报“database is locked”。SQLite的写锁是数据库级别的多进程同时写会冲突。解决方案1.重试机制在适配器代码中对写操作store,update添加简单的重试逻辑例如重试3次每次间隔100ms。2.写入队列对于高频写入场景可以引入一个单进程的写入服务其他智能体通过消息队列如ZeroMQ或简单的文件socket将写入请求发送给该服务由它串行执行。agent-memory-bridge的核心设计更适合“多读少写”的场景。记忆库文件越来越大检索变慢。随着时间积累存储的事实数量过多。1.定期归档编写脚本将旧的、低信任度的记忆导出为JSON或SQL文件然后从主库中删除。hmem list命令可以配合--category和--min-trust筛选出候选记忆。2.启用SQLite的WAL模式这能提升并发读性能。可以在初始化数据库连接时设置PRAGMA journal_modeWAL;。3.优化检索确保对memories_fts表的查询使用了有效的FTS5语法并合理使用limit。Hermes没有自动存储记忆。Hermes的记忆插件未启用或配置有误。1. 确认Hermes版本≥0.7。2. 检查Hermes的配置文件确保记忆Holographic Memory插件是启用的。3. 查看Hermes的运行日志看是否有关于记忆存储的错误信息。5.3 性能优化与扩展思路当你的记忆库规模增长到数万甚至数十万条时以下优化措施会变得必要数据库索引优化除了FTS5索引可以在memories表上为常用查询字段建立索引例如category、timestamp。CREATE INDEX idx_memories_category ON memories(category); CREATE INDEX idx_memories_timestamp ON memories(timestamp);HRR向量检索优化原生的HRR相似度计算如余弦相似度是O(n)的全表扫描在大数据量下不可行。可以考虑使用向量数据库将HRR向量导入到专门的向量数据库如Chroma、Qdrant、Weaviate中利用其高效的近似最近邻搜索ANN算法。这需要修改retrieval.py和holographic.py将向量存储和检索逻辑分离。降维与聚类对高维HRR向量进行PCA降维然后进行聚类。检索时先确定查询向量所属的簇再在簇内进行精细搜索大幅缩小搜索范围。记忆抽象与压缩不是所有对话细节都需要永久存储。可以设计一个“摘要”层定期让智能体对一段时间内的琐碎记忆进行总结生成一条高度抽象的“元记忆”存入同时清理或归档原始细节数据。这模仿了人类从短期记忆到长期记忆的转化过程。实现记忆“遗忘”曲线当前的信任度是手动或简单规则调整的。可以引入一个基于时间的衰减函数例如每条记忆的信任度随时间缓慢下降除非它被频繁检索或更新这类似于“间隔重复”学习系统的原理。这样长期无用的记忆会自动沉底保持记忆库的活性。agent-memory-bridge项目提供了一个坚实、简洁的起点。它的强大之处在于其理念和可扩展性。你可以从最简单的单文件共享开始随着需求复杂化逐步引入上述优化将其打磨成支撑你复杂多智能体系统的核心基础设施。