news 2026/7/6 8:04:56

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
让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.db

Hermes Agent:插件深度集成(推荐)

对于 Hermes Agent,我做了一个 Memory Provider 适配器插件,实现了进程内直接调用

  • 不走 MCP 协议,零 IPC 开销
  • 通过on_memory_write钩子,Hermes 内置 memory 工具的每次写入自动同步到 AML 数据库
  • 工具不重复,只暴露memory_storememory_searchmemory_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._engine=create_engine()# 直接 import,不走 IPCself._skip_writes=Falseasyncdefhandle_tool_call(self,tool_name,arguments,context):iftool_name=="memory_store":memory=self._engine.store(content=arguments["content"],category=arguments.get("category","general"),)return{"status":"ok","id":memory.id}asyncdefon_memory_write(self,memory,context):"""内置 memory 工具写入时的钩子 —— 自动同步"""ifself._skip_writes:returnself._engine.store(content=memory.content,category=memory.category,metadata={"source":"hermes_builtin"},)

其他 Agent:MCP 协议接入

对于 Claude Code、Cursor、Cline 等支持 MCP 的 Agent,通过标准 MCP Server 接入:

# 一行命令启动 MCP Serveruv run python-magent_memory_lite.entrypoints.mcp_server

MCP Server 提供 9 个工具:

工具名说明
store_memory存储一条记忆(支持去重)
search_memory搜索记忆(keyword/semantic/hybrid)
get_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 字符串"""tokens=jieba.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 接入(其他 Agent)

gitclone 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 search"Docker"# 查看统计uv run aml stats

30 秒快速体验

gitclone https://gitee.com/pimou/Agent-Memory-Lite.gitcdAgent-Memory-Lite uvsync# 存一条记忆uv run aml store"用户偏好使用 Docker 部署"-cuser_pref# 搜索uv run aml search"Docker"# 输出: #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,会锁死。

项目地址

  • GitHub:https://github.com/P1M0U/Agent-Memory-Lite
  • Gitee:https://gitee.com/pimou/Agent-Memory-Lite (国内更快)

写在最后

这个项目的核心理念是:AI Agent 的记忆应该是可移植的、零成本的、本地化的。

一份 SQLite 数据库,多个 Agent 共享。不依赖任何云服务,数据永远在你本地。Hermes 用户可以享受深度集成的自动同步体验,其他 Agent 用户通过 MCP 协议也能无缝接入。

如果觉得有用,欢迎点个 Star ⭐

有问题欢迎提 Issue,也欢迎贡献代码。


作者:P1M0U
邮箱:p1m0u@foxmail.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 8:02:49

iOS应用SSL Pinning绕过实战:以Instagram V405.1为例

1. 项目概述与背景 最近在移动安全研究圈里,一个老生常谈但又历久弥新的技术话题又被推到了台前:如何绕过 Instagram 这类头部社交应用的 SSL Pinning(证书绑定)机制,特别是在其 iOS 版本 V405.1 上。这可不是为了搞破…

作者头像 李华
网站建设 2026/7/6 8:01:35

+86 手机号登录 TG提示 smsfee 的排查与解决

问题描述近期尝试使用 86 手机号注册登录 Telegram,遇到以下情况:官方客户端输入手机号后,提示 smsfee,无法发送验证码部分教程建议支付 smsfee 费用,但支付后仍未收到验证码更换网络环境(Wi-Fi / 4G / 5G&…

作者头像 李华
网站建设 2026/7/6 8:01:02

Pid小车

旋转方向按照右手法则定义右手大拇指指向轴向方向,四指弯曲方向极为绕轴旋转的方向。 Y轴为:俯仰角飞机点头,抬头。x轴 为滚转角飞机左右翻转。z轴为偏航角 三者合称为姿态角。Mpu工作电压在3-5v通信协议iic,陀螺仪范围-250 Scl时钟线和sd…

作者头像 李华
网站建设 2026/7/6 7:58:47

打通CAN通信壁垒——ZLG与Vector XL无缝桥接解决方案

在汽车电子、工业控制和实验室测试领域,CAN(控制器局域网)总线是数据交互的核心。然而,工程师们常常面临一个现实难题:不同厂商的CAN工具之间缺乏直接互通。例如,当您使用Vector系列工具(如CANo…

作者头像 李华
网站建设 2026/7/6 7:58:36

KingFusion系列32-同一张表格仅部分行的操作按钮空白

AI还是厉害,开始我以为又在胡说八道,后来仔细检查了下代码,发现还真是。 起因是在使用KingFusion开发MES系统过程中遇到个问题,在某个查询界面,查询结果填充到下方的表格中,在查询结果中有一条数据可以正常…

作者头像 李华