让知识库「适时出现」:实测 26 个开源项目后,结论是直接用 basic-memory
「适时出现」被当成一个需求,其实是三件事:沉淀、检索、触发。多数项目只解决中间那件。
结论先行
我的诉求很具体:知识库、待办事项、做过的事情(例如「给 OpenCode 添加模型的 API Key」),能不能在我需要的时候自己冒出来,而不是靠我想起来去翻。
实测 26 个开源项目之后,结论是三条:
| 选项 | 判断 |
|---|---|
| 直接用一个现成项目 | ✅ 主方案 basic-memory(4147 星,AGPL-3.0,调研当天仍在提交)。Markdown 当唯一真相源 + 本地 SQLite 索引 + 原生 MCP |
| 基于现有项目二开 | ⚠️ 只有两个可选点:① 加约 100 行的 hook 做自动注入;② 想接 claude-mem 的自动捕获,需要写适配器 |
| 自己开发 | ❌ 不建议。索引、增量同步、embedding 管理、检索排序这四块是真正的工程量,自研第一版一定不如成熟项目,而且会烂尾 |
同时排除:RAGFlow、Onyx、AnythingLLM、open-webui、GraphRAG 这类重平台。它们都要求把知识「导入」进去,等于你多了一份数据;而且我本机 C 盘只剩 8.4 GB(已用 93%),Docker + Postgres + 向量库根本装不下。MemOS 自建要 Neo4j + Qdrant,同样出局。
先把问题拆开,不然选型一定选错
「适时出现」听起来是一个需求,实际是三个互相独立的问题。大部分项目只解决中间那个,所以直接拿来用会失望。
| # | 问题 | 说明 |
|---|---|---|
| 1 | 沉淀 | 东西有没有落到一个能被检索的地方 |
| 2 | 检索 | 能不能按「意思」找回来,而不是按关键词 |
| 3 | 触发 | 不用你主动想起来,它自己出现 |
第 3 层才是真正想要的,也是最容易被忽略的。 有前两层没有第三层,你得到的是一个「更好用的搜索框」——还是得自己去搜。
第 3 层在实际工作里有三种现成触发点:
| 触发方式 | 机制 | 什么时候冒出来 |
|---|---|---|
| Skill 触发词 | SKILL.md 的 description 被语义匹配 | 任务类型命中时(如「配置 API Key」) |
| MCP 工具 | Agent 自己决定调用 | 你提问的时候 |
| Hook 自动注入 | 会话生命周期事件执行脚本 | 会话开始 / 提交消息时,无需你开口 |
第三种最接近「适时出现」的形态。WorkBuddy 支持 hooks(配置在 settings.json 的 hooks 段,事件模型对齐 Claude Code,支持 matcher 按工具名或事件上下文筛选,自动注入 session_id、会话转录文件路径、当前目录),所以这条路是通的,不需要为了它换工具。
实测:26 个候选项目
数据全部来自 GitHub API 实时查询(2026-10-12)。
笔记 / 知识库 + MCP 检索层
| 项目 | 星 | 最近提交 | 协议 | 部署难度 | 关键特征 |
|---|---|---|---|---|---|
| basic-memory | 4147 | 2026-10-12 | AGPL-3.0 | ★ 一条命令 | Markdown + SQLite,MCP 原生,自带 22 个 skill,中英混合 embedding 可换 |
| mcp-obsidian | 4471 | 2026-08-31 | MIT | ★★ 需装 Obsidian 插件 | 只做 Obsidian 读写,无语义检索 |
| obsidian-smart-connections | 5496 | 2026-10-10 | 非标准 | ★★ 需 Obsidian | 语义关联面板,插件形态,不是 MCP |
| 思源 SiYuan | 46727 | 2026-10-12 | AGPL-3.0 | ★★ 客户端 | 中文生态好,块级引用,官方已在强调「人与智能体协作」 |
| Logseq | 45213 | 2026-10-12 | AGPL-3.0 | ★★ 客户端 | 大纲式,插件生态,1005 个待办 issue |
| TriliumNext | 38281 | 2026-10-12 | AGPL-3.0 | ★★ 客户端/服务端 | 结构最严谨,学习曲线最陡 |
| memos | 63715 | 2026-10-12 | MIT | ★ 单二进制 | 轻量速记,适合当收件箱,不做知识图谱 |
判断:我的知识现在本来就是 Markdown(站点内容、skill、选题库、日记全是 .md),不要为了工具去改格式。这一条直接把 Obsidian 系和思源系降到「可选外壳」——它们能当编辑器用,但不该成为数据的所有者。basic-memory 是唯一「以 Markdown 为唯一真相源、同时提供检索层」的选项。
Agent 记忆层(自动捕获 + 自动注入)
| 项目 | 星 | 最近提交 | 协议 | 部署难度 | 关键特征 |
|---|---|---|---|---|---|
| claude-mem | 99813 | 2026-10-12 | Apache-2.0 | ★ 一条 npx | 自动捕获工具调用 → AI 压缩成摘要 → 新会话自动注入。已支持 OpenCode |
| mcp-memory-service | 2008 | 2026-10-11 | Apache-2.0 | ★ 一条 pip | REST + MCP + 知识图谱 + 面板,本地 ONNX embedding,有 OpenCode 插件 |
| mem0 | 67013 | 2026-10-09 | Apache-2.0 | ★★ 需向量库 | 面向产品的记忆 API,适合嵌进应用 |
| supermemory | 31192 | 2026-10-11 | MIT | ★★ 服务 | 速度快,可全本地 |
| MemOS | 11819 | 2026-10-10 | Apache-2.0 | ★★★ 要 Neo4j + Qdrant | 基准分数最好(LoCoMo 88.83),但自建太重 |
| cognee / graphiti | 32061 / 31657 | 2026-10-12 / 11 | Apache-2.0 | ★★★ 图数据库 | 时序知识图谱,学术味重 |
| letta | 25113 | 2026-09-10 | Apache-2.0 | ★★★ 平台 | 有状态 Agent 框架,等于换一套 Agent 跑 |
两个值得记下来的发现:
- claude-mem 和 mcp-memory-service 都已经支持 OpenCode —— 我举的例子「给 OpenCode 加模型 API Key」正好落在这个生态里,安装命令就是
npx claude-mem install --ide opencode。 - claude-mem 的 99813 星是真实的(2025-08 建仓,8748 次 fork,中文 README 齐全),但它对 WorkBuddy 没有现成安装器。它的
docs/adapters.md写了通用适配路径:src/adapters/generic-rest/examples.ts提供 Codex、OpenCode 和「自定义 REST 摄入」示例。接 WorkBuddy 要写一点适配代码——这是唯一需要二开的地方,而且是可选项。
重平台(看过即排除)
| 项目 | 星 | 为什么排除 |
|---|---|---|
| RAGFlow | 92025 | Docker + 向量库,镜像几个 GB,C 盘装不下 |
| open-webui | 154352 | 是 AI 前台,不是记忆层,解决的不是这个问题 |
| anything-llm | 66956 | 同上,且知识库是它的私有格式 |
| Onyx | 32409 | 企业级检索,需要 Postgres + 向量库 + 模型服务 |
| khoj | 37646 | 定位最接近(「AI second brain」),但最近提交是 2026-08-02,且要跑一整套服务 |
| GraphRAG | 36294 | 建图成本高,适合静态语料不适合个人流水 |
| LightRAG | 40075 | 轻量,但它是库不是产品,用它等于自己开发 |
共同问题:它们都要求把知识「导入」进去,你就有了第二份数据。而真正要的是让已有的 Markdown 活起来。
待办
Vikunja(5698 星)和 AppFlowy(77238 星)都是好产品,但它们是另一个待办应用,不会读你的 Markdown。
结论:不要为待办引入新应用。 basic-memory 自带 memory-tasks skill,把待办定义成 type: Task 的笔记(带 status / steps / current_step / context 字段),专门为「上下文压缩后还能接着干」设计。这比任何独立待办 App 都更贴合实际情况——待办本来就散在文章和对话里。
四个决定性事实
- 中文检索不会失灵。 basic-memory 默认用
bge-small-en-v1.5(英文模型),但文档明确给了多语言方案,作者也跑过覆盖中文、日文、韩文等语言的 benchmark:换成sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2(384 维,不用改表结构)或jinaai/jina-embeddings-v2-base-zh(768 维)。这一步必须做,否则中文笔记的语义检索会明显变差。 - WorkBuddy 的 hooks 是通的。 这是「自动出现」的技术前提,已确认。
- 磁盘是硬约束。 C 盘剩 8.4 GB(已用 93%)。这直接排除所有 Docker 方案,也决定 embedding 模型要选小的(384 维 MiniLM 比 768 维的 jina-zh 省一半以上)。
- 数据已经散了。 工作区里有牙科内容、图书带货、公众号发布、小红书发布、接单文案、站点仓库、skill 仓库,加上 memory 日记。不先归拢,接什么工具都是白搭。
最简 MVP(半天可跑通)
第 1 步:建知识库目录,先归拢(约 60 分钟)
建 C:\Users\LH\knowledge\,按用途分目录,把散落的内容放进去:
knowledge/
experience/ 做过的事(OpenCode 加 API Key、Cloudflare 部署、Docker 配置……)
projects/ 牙科号 / 站点 / 小程序 / 图书带货 的项目笔记
decisions/ 决策记录(为什么选 GoatCounter、为什么不做自动发布)
tasks/ 待办(一条一个文件,或一个月一个文件)
inbox/ 随手记,之后整理
判断标准:这个目录里的内容,是你愿意让 Agent 随时读到的。敏感的东西(口令、账号密码)不要放。
第 2 步:装 basic-memory 并接入(约 15 分钟)
- 本机已有
uv,所以是uv tool install basic-memory - 指向第 1 步建的目录,跑一次索引
- 在
~/.workbuddy-ai/mcp.json里注册 MCP 服务(配置写法和 Claude 一致:command+args)
第 3 步:换中文 embedding(约 10 分钟)
把 embedding 模型换成 multilingual MiniLM 或 jina-zh,然后重建向量索引。这步不能省。
第 4 步:装它自带的 skill(约 5 分钟)
basic-memory 仓库的 skills/ 目录有 22 个现成 skill,直接放进 skill 目录。最相关的四个:
| Skill | 作用 |
|---|---|
memory-capture | 把一个话题的结论沉淀成一篇笔记(同一话题重跑会原地重写而不是追加) |
memory-tasks | 待办管理,专为上下文丢失后能接着干而设计 |
memory-notes | 笔记读写规范 |
memory-research | 跨笔记做研究汇总 |
装完之后,「适时出现」的第一层就有了——说「记一下这个」它会写进知识库,说「上次那个怎么弄的」它会去搜。
第 5 步(第二阶段):加 hook 做自动注入
这是真正实现「不用你开口」的一步:会话开始时自动把今天到期的待办 + 最近改动的笔记注入上下文。
先做最小版本,只注入待办,不做语义检索。跑两周看噪音大不大,再决定要不要加。
验收标准
问一句「上次给 OpenCode 加模型 API Key 是怎么弄的」,它不用你给文件名就能答出来,并指出笔记路径。
风险与边界
| 风险 | 说明 | 对策 |
|---|---|---|
| 接上 MCP 后任何 Agent 都能读这个目录 | 这是能力也是风险 | 知识库目录不放凭证、不放私密内容 |
| AGPL-3.0 | 自己用没问题;如果哪天拿它做成对外服务,需要遵守开源义务 | 现阶段不构成问题,心里有数即可 |
| 中文 embedding 要重建索引 | 换模型必须 reindex,向量不可互换 | 一次性成本,早点做 |
| 噪音 | 自动注入最容易失败的地方是「注入太多」,反而让 Agent 变笨 | 先只注入待办,观察两周 |
| 磁盘只剩 8.4 GB | 模型文件 + 索引会占空间 | 选 384 维的 MiniLM,不选 768 维 |
| 重复建设 | 已经有云记忆和项目日记 | 知识库定位为「长期事实与经验」,日记保持「当天流水」,不要互相抄 |
一句话总结
「适时出现」不是买一个工具能解决的,它是三层结构:先把知识归拢成 Markdown,再用 basic-memory 做中文语义检索,最后用 hook 让它在你没开口的时候自己出现。 工具只值三分之一,归拢的纪律值三分之二。
— 完 —
返回首页
留言
还没有留言,来当第一个吧。
加载留言中…