跨代理记忆库(zilliztech/memsearch)的定位一句话说完:为你的所有 AI 代理(例如 Claude Code、Codex、DSH)提供持久、统一的记忆层。仓库 star 数 2,649,综合分 70.9,MIT 许可,最近上游提交在 2026/9/24;本站 2026/9/27 完成 L4 真实安装验证,信任档位「已验证」。
给代理加记忆,最常见的做法是把会话灌进向量库。memsearch 的选择正好相反:事实源是磁盘上那些 .md 文件,向量库只是缓存——这一个决定往下推,几乎能解释它所有模块的形状。
事实源放在 .md 上,Milvus 只做影子索引
README 的表述很直接:Markdown 是唯一事实来源,灵感来自 OpenClaw——记忆就是 .md 文件,人类可读、可编辑、可版本控制;Milvus 是「影子索引」,一个派生的、可重建的缓存。
结果是三件事。记忆可审阅:日志就是 memory/YYYY-MM-DD.md,想改措辞、删掉一条错误结论,直接编辑文件即可,diff 和 git 都能用。记忆可迁移:换机器、进版本控制,搬的是文件而不是数据库快照。索引可丢弃:Milvus 里的内容全由 .md 派生,想换嵌入模型了重建即可——memsearch reset --yes 删的是索引数据,不碰 .md 源文件,动手前分清这两层就不用纠结。
也因为这层关系,memsearch watch 才有意义:监视器盯着记忆目录,检测到 .md 变更就重新分块、重新索引,人工编辑与插件追加走的是同一条通路。
一轮对话怎么变成 Milvus 里的分块
以 Claude Code 为例,捕获发生在每一轮之后:用户提问 → 智能体响应 → Stop 钩子触发 → 解析最后一轮 → LLM 把这一轮总结成几句话 → 追加到当天日期的 .md 并带锚点 → memsearch index 写入 Milvus。
注意中间那步的产物是摘要而非原文:进索引的是「用户询问了 X」「Claude 做了 Y」这类压缩句。索引体积和检索噪音因此可控,代价是细节被抹过一遍——要看原始对话,得走第三层召回。DSH 这一侧还多了两件事:相关记忆只在有用时、在第一个模型步骤之前注入;Web 配置文件加一个只读停靠栏,用于查看技能候选与 .memsearch/ 下的文件。
三层渐进式召回与混合检索
召回分三级逐步加深。问「我们关于 batch size 讨论了什么」,第一层 memsearch search "batch size" 返回排序后的分块;不够时第二层 memsearch expand 把分块周围的完整章节摊开;还不够,第三层 parse-transcript 回到原始对话记录。经济性很明显:多数问题第一层就能答,只有少数翻到第二、第三层——这把「每次都把完整原始转录塞进上下文」这种最贵的做法,降级成了兜底选项。
排序本身是混合的。单用稠密向量有短板,专有名词、配置项名、函数名这类精确匹配查询,稀疏检索往往更稳,所以 memsearch 用稠密向量 + BM25 稀疏 + RRF 重排序叠在一起给最终排序。另有可选项 Jev 重排序,走 TypeSafe API,无需本地模型。
SHA-256 让没改过的分块一次嵌入都不花
增量索引的判据是内容哈希:文件变更后重新分块,每个分块算 SHA-256,哈希没变的直接跳过,一次嵌入调用都不发;哈希是新的或已变的,才嵌入并更新进 Milvus。对一天追加十几条的日志,真正变化的通常只有末尾一小块,前面所有历史块每次都被跳过,这是追加式记忆能长期跑下去的关键。
自动捕获的摘要模型各走各的
这里有一处容易误解的地方。memsearch 声称「一份记忆跨平台」,但摘要这一步并不强制统一:除非明确覆盖,每个插件都保留自己原生的捕获摘要器,Claude Code 用它的、Codex 用它的,装了 DSH 也一样。
想统一,得走 memsearch 管理的 API 提供方:先配 llm.providers.*,再把 plugins.<平台>.summarize.provider 指过去。留空即保留平台默认行为,除 DSH 外也接受 native;DSH 在提供方未设置时会选自己的无头代理后端。坑点在于插件级摘要设置不会回退到 llm.model,只改全局模型没动插件级字段,很容易得出「改了不生效」的结论。给单个平台换模型的写法类似 memsearch config set plugins.codex.summarize.model gpt-5.1-codex-mini;只想关掉某平台的自动捕获而保留插件,用 plugins.<平台>.summarize.enabled false。
第三层记忆:把重复工作流蒸馏成技能
情景日志是第一层,PROJECT.md / USER.md 这类跨会话笔记是第二层,第三层是程序性记忆——从记忆里生成技能。驱动全靠自然语言:「把我们刚才做的事做成一个技能」,代理会去读原始记录,起草技能存为候选;「我有哪些技能候选?安装那个部署的」,代理列出候选并把选中的装进技能目录,之后它就是一个真正的命令。
候选放在 git 跟踪的 .memsearch/skill-candidates/ 里,可 diff、可回滚,安装前处于惰性状态——安装始终由人完成。蒸馏出的技能遵循 Agent Skills 开放标准,可跨五个代理移植;该功能默认关闭,开启只需对代理说一句「启用 MemSearch 技能蒸馏」。
总结
把 Markdown 立为唯一事实源、让 Milvus 退居可重建的影子索引,再用三层渐进召回把检索成本按需分摊——这套架构真正的收益是记忆成了人和代理都能读写的普通文件,而不是只能通过接口访问的黑箱;想对照同类插件的中文清单与安装形态,见 DeepSeek Harness Hub 插件清单,里面按下载量排了序。
适合与不适合
适合:同时用两个以上编码代理、希望上下文互相流动的人;重视记忆可读、可编辑、可进版本控制的人;接受本地 ONNX 嵌入(CPU 运行、无 API 密钥、无调用成本)并愿意用 CLI 与配置文件管理记忆目录的人。
不适合:想一条命令装完就完事的人——仓库没有 package.json,必须先源码安装 CLI 后端,再指定 GitHub 源或 npm 包名;对安全结论敏感的人——静态扫描标「高危」,含安装期执行代码、读写删除本地文件与外部网络请求共 143 处证据,且尚无人工评估;磁盘或网络环境有约束、又不愿碰跨平台差异的人——首次启动要下载约 558MB 模型,五个代理的安装方式、开关与文件位置也各不相同。
标签:跨代理记忆库、DeepSeek Harness、记忆层架构、Milvus、Markdown
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。