让AI Agent拥有本地永久记忆:零费用且中文友好的解决方案

📅 2026/7/6 8:05:05
让AI Agent拥有本地永久记忆:零费用且中文友好的解决方案
让你的 AI Agent 拥有永不遗忘的长期记忆。一行命令接入零 API 费用数据 100% 本地存储。前言AI Agent 的金鱼记忆之痛用过 Claude Code、Cursor、Cline、Hermes 等 AI 编程助手的同学一定有过这种体验上次告诉它用 uv 管理依赖这次它又开始用 pip昨天讨论好的架构方案今天它全忘了换个对话窗口之前积累的上下文全清零多个 AI 工具之间各管各的记忆无法共享这些问题的根源是大多数 AI Agent 没有可靠的长期记忆系统。我尝试过 Mem0但它是 SaaS 服务数据要上传到云端按 token 计费对隐私敏感的项目不友好。也试过一些本地方案但中文分词效果差搜索结果不理想。于是我自己做了一个Agent Memory Lite。它是什么Agent Memory Lite 是一个轻量级、中文友好的 AI Agent 记忆增强系统。核心特点零 API 费用— 本地 ONNX 推理不调任何外部 API数据 100% 本地— SQLite 单文件存储复制即备份中文分词精准— jieba 定制分词 SQLite FTS5 全文搜索两种接入方式— Hermes 插件深度集成自动同步其他 Agent 通过 MCP 协议接入目前 GitHub 和 Gitee 双平台开源版本 v0.6.0。架构设计整体架构分为三层┌─────────────────────────────────────────────────┐ │ Agent 层 │ │ Hermes Agent │ Claude Code │ Cursor/Cline │ │ (插件深度集成) │ (MCP 接入) │ (MCP 接入) │ └────────┬───────────┬──────────────┬──────────────┘ │ │ │ 进程内调用 MCP 协议 MCP 协议 │ │ │ ┌────────▼───────────▼──────────────▼──────────────┐ │ Agent Memory Lite │ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ jieba │ │ ONNX │ │ SQLite FTS5 │ │ │ │ 中文分词 │ │ 语义嵌入 │ │ 全文搜索 │ │ │ └──────────┘ └──────────┘ └──────────────────┘ │ └────────────────────┬─────────────────────────────┘ │ ~/.agent-memory/ memory.dbHermes Agent插件深度集成推荐对于 Hermes Agent我做了一个 Memory Provider 适配器插件实现了进程内直接调用不走 MCP 协议零 IPC 开销通过on_memory_write钩子Hermes 内置 memory 工具的每次写入自动同步到 AML 数据库工具不重复只暴露memory_store、memory_search、memory_list三个工具数据流用户输入 → Hermes Agent → memory_store 工具 → AgentMemoryLiteProvider.handle_tool_call() → MemoryEngine.store()进程内直接调用 → SQLite WAL → on_memory_write() 钩子触发 → 镜像写入 ~/.agent-memory/memory.db关键代码适配器核心逻辑classAgentMemoryLiteProvider(MemoryProvider):def__init__(self,config:MemoryProviderConfig):self._enginecreate_engine()# 直接 import不走 IPCself._skip_writesFalseasyncdefhandle_tool_call(self,tool_name,arguments,context):iftool_namememory_store:memoryself._engine.store(contentarguments[content],categoryarguments.get(category,general),)return{status:ok,id:memory.id}asyncdefon_memory_write(self,memory,context):内置 memory 工具写入时的钩子 —— 自动同步ifself._skip_writes:returnself._engine.store(contentmemory.content,categorymemory.category,metadata{source:hermes_builtin},)其他 AgentMCP 协议接入对于 Claude Code、Cursor、Cline 等支持 MCP 的 Agent通过标准 MCP Server 接入# 一行命令启动 MCP Serveruv run python-magent_memory_lite.entrypoints.mcp_serverMCP Server 提供 9 个工具工具名说明store_memory存储一条记忆支持去重search_memory搜索记忆keyword/semantic/hybridget_memory获取指定记忆update_memory更新记忆delete_memory删除记忆delete_memories_by_category按分类批量删除list_memories列出记忆memory_stats查看统计reindex_memories重建 FTS5 分词索引中文搜索为什么我要自己做分词这是整个项目最值得说的技术点。SQLite FTS5 默认的unicode61tokenizer 对中文完全无效 —— 它按空格分词而中文没有空格。搜用户返回 0 条结果搜记忆也是 0 条。我用 jieba 做了一套 FTS5 自定义分词方案写入时jieba 分词 → 拼接为 FTS5 可识别的 token 字符串deftokenize_for_fts5(text:str)-str:jieba 分词后拼接为 FTS5 token 字符串tokensjieba.cut_for_search(text)return .join(tokens)比如用户偏好使用 Docker 部署会被分词为用户 偏好 使用 Docker 部署存储到 FTS5 虚拟表时这些 token 会被正确索引。查询时用同一套分词器保证 token 完全对齐。搜索时三种模式自动选择keyword— FTS5 关键词匹配精确查找semantic— ONNX 本地向量语义搜索模糊查找hybrid— 关键词 语义加权排序兼顾精确和模糊安装有多简单方式一Hermes Agent 插件安装推荐# 1. 安装依赖到 Hermes venvuv pipinstall--python~/.hermes/hermes-agent/venv/bin/python jieba tokenizers# 2. 复制适配器插件cp-r~/Desktop/Agent-Memory-Lite/hermes_plugin/ ~/.hermes/plugins/agent-memory-lite/# 3. 修改 config.yaml# memory.provider: agent-memory-lite# 4. 重启 Hermeshermes gateway restart搞定。Hermes 内置的 memory 工具写入会自动同步到 AML 数据库。方式二MCP Server 接入其他 Agentgitclone https://gitee.com/pimou/Agent-Memory-Lite.git ~/Desktop/Agent-Memory-Litecd~/Desktop/Agent-Memory-Lite uvsync# 在 config.yaml 中添加 MCP Server 配置即可方式三CLI 直接使用# 存一条记忆uv run aml store用户偏好使用 Docker 部署-cuser_pref# 搜索uv run aml searchDocker# 查看统计uv run aml stats30 秒快速体验gitclone https://gitee.com/pimou/Agent-Memory-Lite.gitcdAgent-Memory-Lite uvsync# 存一条记忆uv run aml store用户偏好使用 Docker 部署-cuser_pref# 搜索uv run aml searchDocker# 输出: #1 user_pref# 用户偏好使用 Docker 部署和 Mem0 对比对比维度Agent Memory LiteMem0内置记忆中文分词✅ jieba 定制默认分词默认分词本地部署✅ SQLite 单文件❌ 需 API✅ 绑定框架嵌入模型✅ ONNX 本地 ~24MBOpenAI API无MCP 协议✅ 标准 MCP Server❌❌跨 Agent 共享✅ 一份 .db 通用❌❌数据库可备份✅ 单文件复制即可❌❌费用 零 API 费用 按 token 计费 零遇到的坑做这个项目踩了不少坑分享几个关键的1. FTS5 中文搜索返回 0 条原因是 unicode61 tokenizer 不做 CJK 分词。解决用 jieba 分词 自定义 tokenchars 配置。2. 适配器 is_available() 静默失败Hermes 插件的is_available()内部 import jieba 时如果 hermes venv 没装 jieba会抛 ImportError 被捕获后静默返回 False。调试时要加上日志才能发现。3. SQLite 并发锁死MCP Server 和适配器同时写入时需要开启 WAL 模式。默认的 journal_mode 是 DELETE会锁死。项目地址GitHubhttps://github.com/P1M0U/Agent-Memory-LiteGiteehttps://gitee.com/pimou/Agent-Memory-Lite 国内更快写在最后这个项目的核心理念是AI Agent 的记忆应该是可移植的、零成本的、本地化的。一份 SQLite 数据库多个 Agent 共享。不依赖任何云服务数据永远在你本地。Hermes 用户可以享受深度集成的自动同步体验其他 Agent 用户通过 MCP 协议也能无缝接入。如果觉得有用欢迎点个 Star ⭐有问题欢迎提 Issue也欢迎贡献代码。作者P1M0U邮箱p1m0ufoxmail.com