让你的 AI Agent 真正记住你:混合检索 + 治理 + 可视化控制台 + 双引擎自动挡,单机自托管,MIT。 宿主(Hermes / Claude Code / Cursor / 任何 MCP 客户端)管短期对话,aiduMEI 管长期记忆。
当前公开版本 v21.1 正式版 —— 优忆思:一行 Prompt 全自动部署 · 双引擎自动挡 · 众神殿多 bot 记忆人格 · 市面独一份。(v21.1:众神殿地基版——多 bot/多 profile 各据一殿、记忆人格独立、跨殿默认隔离;含 v21.0 认知治理:记忆出身标签 / 知识溯源 / 记忆档案导出。详见 CHANGELOG。)
| 杀手锏 | 一句话 |
|---|---|
| 🚗 双引擎自动挡 | 云端断供自动降本地备胎、恢复自动升挡、欠账自动重放——单查询内就地换腿,挡位永远如实可见 |
| 📊 可视化控制台 | 零构建 Web 控制台(/ui):记忆可见、可调、可追溯——「记忆是黑盒」这个行业痛点,我们正面回答 |
| 🧠 认知治理(v21) | 每条记忆有出身(你亲口/AI 推断/外部引用/不明,写入零成本打标)、有户口(溯源三件套:谁、哪次会话、第几轮)、可导出(一键 Markdown 记忆档案);AI 只有「提出候选认知」的权限,没有「直接创造事实」的权限 |
把这句话发给你的 AI Agent:
你现在是部署工程师。请按 https://github.com/monkey2jack/aiduMEI 的
prompts/install.txt全文(13 行正典)在我这台机器上部署 aiduMEI,每步自己验证,不许假装成功。
正典会带它走完:环境检查 → 装依赖 → 选挡位 → 配 Key(向你索要,不编造)→ 起服务 → 真实写入/召回验证(不是只看 /health)→ 接入宿主 → 装定时任务与备份 → 给你出报告。
不用 Agent?手动五行:
git clone https://github.com/monkey2jack/aiduMEI.git && cd aiduMEI
python3.12 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
cp mem0_config_local.json.example mem0_config_local.json && cp .env.example .env # 编辑这两个文件填 Key
python api_server.py # → http://127.0.0.1:8767
python scripts/e2e_smoke.py --json # 真实验证,PASS 才算数三档引擎,按你的机器选(AIDUMEI_ENGINE_MODE=auto 为默认推荐;cloud / local 同理):
| 挡位 | 需要什么 | 效果 |
|---|---|---|
cloud |
云端 LLM + Embedding Key | 最轻;断供时召回诚实降级 |
auto(默认推荐) |
Key + pip install .[local-embed] |
云优先、断供自动换本地、恢复自动换回 |
local |
本地模型,零 Key | 零 token、零出站调用 |
容器化部署见 docs/DEPLOY_DOCKHOLD.md;Agent 侧的完整作业说明(验收探针、备份、维护)在 AGENTS.md。
这套东西部署起来重不重?取决于你选哪个挡位。(2 核 3.5G 云主机 · 2026-08-27 实测)
| 维度 | ☁️ 云端档(cloud) |
⚙️ 自动挡(auto,默认) |
🔋 本地档(local) |
|---|---|---|---|
| 运行内存 | 约 280 MB | 约 430 MB | 约 430 MB |
| 依赖磁盘 | 约 275 MB | 约 353 MB + 模型 91 MB | 同自动挡 |
| 断供时 | 无备胎,如实判 degraded |
自动降挡续跑 | 不依赖外部,无所谓断供 |
| Token 消耗 | 正常 | 正常(断供期为零) | 恒为零 |
| 需要密钥 | 需要 | 需要(缺了就恒跑本地) | 不需要 |
共同项:CPU 2 核足够、闲时 < 1%;/search 单次 0.14~0.23s;冷启动 5.2s;数据盘千级记忆约 13 MB 向量 + 数百 KB SQLite;前端 0 依赖;Python 3.10–3.12。
那 150 MB 花在哪、能不能省(实测,不是估算):onnxruntime 运行库只 import 不加载模型 75 MB;bge-small-zh-v1.5 会话与权重约 122 MB;两档服务实测差 150 MB(构成项单独实测、与档差有共享页,两个口径如实并列不做加法)。我们试过压它:threads=1、ONNX arena 按需分配、malloc_trim、MALLOC_ARENA_MAX=2——四种旋钮实测全部无效;模型已是 fastembed 目录里最小的中文可用款(次小的多语言方案是它的 2.4 倍)。所以我们没假装优化,而是给了你开关:不需要备胎就选云端档,那 150 MB 一分不花。
备胎为什么常驻:双索引要求每一次写入都同步算一份本地向量——断供那一刻再加载模型也召回不到任何东西。备胎是提前备好的,不是临时找的。 其余的轻是刻意设计:向量库嵌入式落盘(无独立进程/端口)、不吃 GPU、相关性闸门先拦闲聊、SQLite+FTS5 兜底。一句话:云端档 1 核 1G 跑得动;自动挡/本地档建议 2 核 2G 起步。
按机器内存选挡(部署 Agent 请照此选):可用内存充裕(≥2G 余量)且要「云断了还能本地召回全部历史」→ 用
auto(本地备胎常驻热备,那约 174MB 就是买这份断网韧性);机器内存吃紧或不需要断网兜底 → 用cloud(约 280MB,云断则如实degraded、不本地降级)。别让内存紧张的机器默认跑auto再嫌重——挡位是给你按机器余量选的,选前先free -m看余量。规划中(v21.2)冷备挡:本地模型不常驻(平时省那约 174MB),仅在云端失效时才加载 + 批量补算存量本地向量;实测中小库(约 1500 条)补算窗口十几秒,期间
degraded、补完全量恢复。它兼顾「平时省内存」与「故障后全量韧性」,代价是故障后有一个补算窗口(时长随库大小线性增长,大库需增量补算)。这正面回应「自动挡该按需加载」——热备(当前auto)与冷备(规划)的取舍会并入选挡指南。
起服务后开 http://127.0.0.1:8767/ui:记忆浏览/搜索/调整、健康探针与挡位状态、联邦与演化、检索质量面板、记忆档案一键导出(Markdown,按出身分区、推断逐条标注「未经验证」)。
| 宿主 | 方式 |
|---|---|
| Hermes Agent | MemoryProvider 插件:每轮自动记、自动召回(压缩前抢救) |
| Claude Code | CLI hook / MCP |
| Cursor | 规则文件(保存时自动入 Raw Drawer) |
| 任意 MCP 客户端 | MCP Server(41 工具,默认 :8766,stdio/HTTP 双传输) |
| 其他 | REST API(:8767) |
接入细节:docs/AGENT_INTEGRATION.md。
MCP 与 REST 同进程双栈:REST 在 :8767,MCP 在 :8766(stdio/HTTP 双传输)。鉴权纪律:非回环绑定必须配置 AIDUMEM_API_TOKEN,否则拒绝启动;确有公网暴露需求才显式设置 AIDUMEM_ALLOW_INSECURE_PUBLIC=1(默认关闭,开启会打 critical 日志)。工具分组与调用示例见 docs/AGENT_INTEGRATION.md。
Bearer 令牌(AIDUMEM_API_TOKEN)+ 控制台口令(PBKDF2)+ 注入防护 + 默认仅回环。启动后先查三个数:/health 的 health_status、degraded、probes.runtime_paths.data_dir_writable(未带凭据时探针脱敏,附 _redacted 说明)。三轮外部安全审计留痕见 docs/SECURITY-AUDIT-LEDGER.md。
| 变量 | 作用 | 默认 |
|---|---|---|
AIDUMEM_API_TOKEN |
API 鉴权令牌(非回环强制) | 空=仅回环 |
AIDUMEM_ENTITY_KEYWORDS |
实体词表(人名/项目代号,喂给相关性闸门) | 空 |
AIDUMEM_DATA_DIR |
数据目录 | ~/.aidumem |
AIDUMEI_ENGINE_MODE |
引擎挡位 cloud/auto/local | auto |
AIDUMEM_CONFIG_READONLY |
控制台配置只读演示模式 | 0 |
全量环境变量登记册见 ducky/env_registry.py(代码即真相源,错拼会启动告警)。
| 层 | 能力 |
|---|---|
| 检索 | bge-m3 向量 + FTS5 中文 BM25/trigram + cross-encoder 真重排;相关性闸门(闲聊不检索,省 token) |
| 记忆语义 | 三轨遗忘(身份永不衰减/情感加速/标准曲线)· 双时间轴(记忆过期而非删除)· 六型分类 |
| 治理 | 写入双审 + 冲突消解 + 注入防护;事件账本全路径留痕;密码学谱系(可检测篡改) |
| 进化 | 反思(主动/定时)· 本能升格技能(人工审批闸门)· 检索自进化反馈环 |
| 协作 | 联邦:多 Agent 共享一套记忆(MoE 门控 + 细粒度授权 grants) |
| 周边 | 多模态视觉记忆 · 代码图谱 · 原文保真抽屉 · Obsidian 双链 |
测试层级如实说明(v19.4.1 P3-3)
读表口径:每行「通过 · 跳过」相加等于该形态、该日期下
pytest --collect-only的收集数;不同日期的行分母可以不同(树在长),以各行括注的日期为准。跳过数按「轴」解释(见 docs/TESTING.md),不是失败。
| 维度 | 现状 |
|---|---|
| 用例总数 | 2048(pytest --collect-only 实测,2026-09-15,v21.1-dev 本树)= 行为用例 1842(产品代码直测)+ 脚本/钩子行为 70 + 守卫用例 136(文档/口径/结构)。三桶口径与名单见 scripts/count_test_kinds.py,可一键复算——v20.5.1 起头条不再用混合数(外部审计 C-1) |
| 独立开发机 | 2036 通过 · 12 跳过 —— 2026-09-15 实测(v21.1-dev 本树,Python 3.12;完整 extras + 模型缓存,只缺 Hermes 宿主) |
| 基础安装路径 | 1821 通过 · 25 跳过 —— 只装 requirements.txt + requirements-dev.txt(2026-09-09 生产机干净 venv 实测,v20.5a 本树,Python 3.12) |
| 生产机沙箱 | 1967 通过 · 26 跳过 —— 2026-09-11 生产机实测(v20.5.1 本树 de09794,独立沙箱 venv:宿主源码在场、不带 .env、无 ruff/mcp/fastembed 等);生产实机部署后 1983 通过 · 10 跳过(同树,宿主轴齐备) |
| 全轴齐备 | 1844 通过 · 1 跳过 —— 2026-09-09 生产机实测(v20.5a 本树,独立全轴 venv:工具、extras、宿主源码、模型缓存与公开 LoCoMo 数据集齐备;那 1 跳过为本树新增用例的条件轴) |
| 层级 | 以模块级单元测试 + 源码级守卫断言为主,TestClient 驱动的接口测试为辅 |
| 平台前提 | 全量套件按 **Linux/macOS(POSIX)**口径维护:backup_gate 轴要 POSIX shell;/health 的 CPU/RSS 指标走 resource 模块,非 POSIX 平台诚实置 None 不崩(v20.1 整改)。Windows 未列为全量测试平台 |
| 语句覆盖率 | 约 51%(ducky/ + 入口,coverage 实测) |
| 未覆盖 | 真实 mem0 / Qdrant 集成、真实 LLM 调用、并发压测 —— 这些依赖外部服务,由生产环境实机冒烟承担 |
# 全量回归
pytest tests/
# 编译检查
python -m compileall ducky api_server.py mcp_server.py为什么要把 2036 和 1967 都写出来:2036 是本树开发环境 2026-09-15 实测(缺宿主 ×12);1967 是生产机独立沙箱 2026-09-11 实测(
de09794,宿主在场但沙箱缺多项可选轴)——两者的跳过轴不同,数字必须与环境、日期和测试树一起读(生产沙箱数待生产机 v21.1 实机复测更新)。
这 12 条不是玄学,自己就能验:十三条跳过轴(宿主、工具、可选依赖、模型文件)全部登记在册(docs/TESTING.md),
HERMES_SRC三态可控、两个方向都能复现:# 2026-09-14 实测:先装齐依赖、部署模型缓存,并让 AIDUMEI_BENCH_DATA_DIR 指向含 locomo10.json 的目录 pip install -r requirements.txt -r requirements-dev.txt pip install "mcp>=1.0.0,<2" ruff nltk regex numpy fastembed python scripts/fetch_local_embed_model.py pytest tests/ -q -rs | tail -1 # 无宿主:2036 passed, 12 skipped HERMES_SRC=/path/to/hermes-agent pytest tests/ -q | tail -1 # 有宿主:2048 passed HERMES_SRC=none pytest tests/ -q -rs | tail -1 # 装了宿主也强制关掉,照旧 2036 passed, 12 skipped上面代码块里的
有宿主:2048 passed要十三条轴同时齐备才拿得到,宿主只是其中一条 —— 别把「装上宿主」当成「全绿」。
跳过轴全量登记(门控条数与实测逐行对账,改一条这里就红):
跳过轴 门控用例数 位点 宿主 Hermes 源码 12 tests/test_hermes_plugin.py整份git 工作区 1 tests/test_v20_brand_policy.py(要git ls-files当比对基准)scripts/backup_gate.sh+ POSIX shell8 tests/test_v19_4_1_backup_gate.py整份qdrant_client已安装1 tests/test_v20_vector_bank_contract.pyLoCoMo 数据集已就位 1 tests/test_v20_locomo_official.py(全量数据集扫描要真文件)regex已安装1 tests/test_v20_locomo_official.py(拿regex给标准库re对拍)numpy已安装1 tests/test_v20_locomo_official.py(拿numpy.mean给sum/len对拍)nltk已安装13 tests/test_v20_locomo_official.py与tests/test_v20_benchmarks.py(官方 F1 的 PorterStemmer,换实现就不是官方口径)git可执行文件在场6 tests/test_v20_gitignore_guard.py整份(拿一个临时空仓当 ignore 判据,不碰本仓的.git)mem0ai已安装20 tests/test_v20_mem0_patch_layer.py整份(补丁层疗法要真实基座在场;此前缺 mem0 是 20 条 ERROR 冒充真缺陷,现在诚实跳过)fastembed已安装1 tests/test_v20_2_autoshift.py(自动挡备胎真模型测试;缺依赖诚实跳过,模型未部署时用例内二次跳过)ruff已安装3 静态规则守卫:F821/F811/F841;缺依赖时跳过,发布门禁仍会拦截 mcpextra 已安装7 MCP 导入面守卫 + 鉴权行为 + SSE 传输用例 生产机独立沙箱裸跑(宿主源码在场、不带
.env),实测跑出来是 1967 passed、26 skipped(2026-09-11,v20.5.1 本树de09794)——跳过轴不同,数字必须与环境、日期和测试树一起读。
MIT License。SECURITY.md + docs/SECURITY-AUDIT-LEDGER.md:多轮外部安全审计逐条留痕(含我们驳回误报的理由)。MCP 层非回环绑定强制 token,否则拒绝启动。
- 需要嵌入与 LLM 服务(云端或本地备胎)——换来的是真语义检索与抽取质量;要「完全离线 + 亚毫秒」的极简场景,零依赖本地类工具更合适,这话我们不遮。
- 基准协议(LoCoMo / LongMemEval)已冻结,正式跑分待发布——benchmarks/RESULTS.md 如实登记。
- 本地 lite 挡与云端挡的召回重叠率实测有限(差异全部明码标价写在 docs),auto 挡存在的意义正在于此。
部署与运维:🤖 Agent Guide(Agent 唯一入口)· docs/HEALTH.md · docs/OPERATIONS.md · TROUBLESHOOTING.md · docs/BACKUP_RESTORE.md · docs/POSITIONING.md(与同类对比,口径全部可复算)
| # | 例外 | 说明 |
|---|---|---|
| 1 | 租户隔离是按租户收窄可见性 | 非互不信任客户的硬隔离层;域契约见 ducky/bank_contract.py,边界详录 docs/SECURITY-AUDIT-LEDGER.md。 |
| 2 | fetch_local_embed_model.py 必须部署期执行 |
运行时零网络;ducky/local_embed.py 强制 HF_HUB_OFFLINE=1。取模后按 scripts/local_embed_model_sha256.json 逐文件 sha256 校验,不匹配即删除并非 0 退出。 |
| 3 | capture_wave 的 entity_keywords 漏配时零召回 |
无报错,需配置 AIDUMEM_ENTITY_KEYWORDS。详见 ducky/pipeline/memory_gate.py。 |
aiduMEI/
├── AGENTS.md / llms.txt # Agent 部署入口与文档索引
├── api_server.py # 主入口(API + /ui 控制台托管)
├── ducky/ # 业务逻辑(hot/ pipeline/ speed/ salience/ federation/ evolve_mem.py …)
├── frontend/ # 控制台(零构建纯静态;js/vendor/ 本地 echarts)
├── tests/ # 回归测试集(pytest)
├── prompts/install.txt # 一行 Prompt 部署正典
├── docs/ # 运维/健康/备份/容量/测试口径
├── scripts/ # e2e_smoke.py · report.py · restore_gate.sh 等
└── mem0_config_local.json # 模型配置(gitignored,含密钥)
MIT — 详见 LICENSE。
aiduMEI⚕爱嘟优忆思(曾用名 aiduMEM / duMem,历史版本与文档中保留)|Powered by monkey²