@cup319/mmpl
MMPL (Memory Palace) — DuckDB 向量记忆 MCP Server(单二进制,Rust 实现)。
当前版本 3.3.8:常驻热块 / 每轮 L0 捕获 / 后台四层 CRUD / 默认鉴权 / 模型下载源可选(Linux 包内置 libonnxruntime.so.1)。
npm install -g @cup319/mmpl
mmpl # 启动 → http://127.0.0.1:7680/mcp
- 零 node_modules 原生依赖(v3.3.0 起 Linux/Windows 双平台二进制直接打包在 npm 包内,postinstall 解包即用、离线可用;包内缺失时才回落 CNB Release 下载)
- Streamable HTTP MCP(多 client 共享单进程,DuckDB 独占无锁冲突)
- 9 工具:
memory_write/memory_search/memory_list/memory_manage/memory_stats/memory_evolve/memory_compress/memory_palace/memory_symbol - BM25(jieba + DuckDB FTS5)+ ONNX 语义向量(bge-small-zh)+ RRF 三路融合 + 复习强化
- v0.5.1 起出厂默认 = 知识库模式(stability_days=30 / review_boost=0.5,无复习半衰期 ~20.8 天)
- SIGTERM 优雅关停
记忆保持怎么配?
| 想要 | 做法 |
|---|---|
| 全部永久 | MCP 里执行一次 memory_manage action=forgetting_disable(自动持久化,重启生效);或环境变量 MMPL_FORGET=0 |
| 单条永久 | memory_write action=encode input="…" permanent=true;已有条目 reinforce_action=promote_to_permanent |
| 换个场景档 | 启动时 `MMPL_PROFILE=code |
场景档位一览:knowledge(默认, S=30/boost=0.5) / code(S=7/boost=1) / vocab(S=0.5/boost=2 背单词) / assistant(S=1/boost=1) / lab(S=0.01 观察遗忘)。
背英语单词:MMPL_PROFILE=vocab 启动,词条 memory_write encode 录入 → memory_search 自测(命中即算一次复习)→ 记得 reinforce confirm(稳定期 0.5→1.5→2.5 天递增)、忘了 reinforce deny → mode=deep 定期捞半忘词强化。详见仓库 rust/README.md。
环境变量:DB_PATH(默认 data/memory.duckdb)/ HOST / PORT(默认 7680)/ MCP_PATH(默认 /mcp)/ MMPL_PROFILE / MMPL_FORGET / MMPL_STABILITY_DAYS / MMPL_REVIEW_BOOST / MMPL_ONNX / MMPL_MODEL(v0.5.2 起四档:base 默认 / small / m3 / qwen3)。
Windows 开机隐藏自启(无 cmd 窗口)
Windows 版 mmpl.exe 是 GUI 子系统(无窗口),但注册表 Run 键直指 .cmd 会弹出并常驻一个 cmd 窗口;经 npm shim(node run.js)启动同样会带出 node 的控制台窗。隐藏启动的正解是 VBS 包一层:
rem %USERPROFILE%\mmpl\start-mmpl.cmd — 环境变量与日志重定向的唯一配置源
@echo off
set "ORT_DYLIB_PATH=%USERPROFILE%\.dsh\bot\workspace\onnx\onnxruntime.dll"
set "MMPL_MODEL=base"
cd /d "%USERPROFILE%\.dsh\bot\workspace"
"%APPDATA%\npm\node_modules\@cup319\mmpl\bin\mmpl.exe" > "%USERPROFILE%\.dsh\bot\workspace\mmpl.log" 2>&1
' %USERPROFILE%\mmpl\start-mmpl.vbs — Run 键指向它,窗口样式 0 = 隐藏
CreateObject("WScript.Shell").Run "cmd.exe /c ""%USERPROFILE%\mmpl\start-mmpl.cmd""", 0, False
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v mmpl-server /d "wscript.exe //nologo \"%USERPROFILE%\mmpl\start-mmpl.vbs\"" /f
注意:同一台机器只保留一个 Run 项。若既有 .cmd 直指项又有 VBS 项,登录后会双开(其一必现窗):reg delete HKCU\...\Run /v <项名> /f 删掉多余的。
Hermes Agent 插件接入
MMPL 可作为 Hermes Agent 的原生 MemoryProvider 插件(与 holographic 等并列的记忆后端):插件源码在仓库 integrations/hermes/ 目录,纯 HTTP 客户端、零 Python 依赖,把上面 9 个 MCP 工具透传给 Agent 并自动沉淀对话。
# 1. 拷贝插件
mkdir -p $HERMES_HOME/plugins/mmpl
cp integrations/hermes/__init__.py integrations/hermes/plugin.yaml $HERMES_HOME/plugins/mmpl/
# 2. config.yaml:
# memory: { provider: mmpl }
# plugins:
# mmpl: { url: "http://127.0.0.1:7680/mcp", top_k: 5 }
# 3. 保持 mmpl 服务在跑(插件健康检查不过会自动拉起)
hermes memory status 应列出 mmpl (no setup needed)。安装细节与生命周期映射见仓库 rust/README.md「Hermes Agent 插件接入」章节。
完整文档见仓库 rust/README.md 与 rust/USERS_GUIDE.md。