一直很羡慕那种会自生长的知识库。不靠人每天勤勤恳恳维护,而是像植物一样,把散落的灵感当养分,自己生发出新的联系。前阵子打开我的Obsidian仓库,看到三年前存的一堆读书笔记孤零零躺在文件夹里,没标签、没双链,标题都是乱打的。那时我意识到,知识库最大的悖论就是整理比记录累十倍。后来我试了试让OpenAI的Codex CLI来当这个"整理工",花了大概5分钟搭了一套自动化流程,Obsidian里的笔记开始互相勾连、自动生成索引,甚至能根据旧笔记提出新主题的方向。
这篇文章就把整套做法拆开讲清楚。它不是一篇软件评测,而是一个可以直接抄作业的方案:你需要准备什么、5分钟里到底做了什么、背后的"自生长"机制是怎么运转的,以及我实际跑了三周之后踩到的坑。适合被笔记整理折磨过、手头有Obsidian但没动力维护、又想试试Agent自动化的朋友。
1. 先聊聊我为什么受够了手动知识库
1.1 知识库烂尾的真相:不是懒,是维护成本太高
大多数知识库都是建好之后慢慢死掉的。我身边很多朋友加过我,热情满满地下载了Notion、语雀或者Obsidian,存了几十篇文章、写了几条摘录,然后就没有然后了。
问题不在于你的自律,而在于"手动维护"这条路径每一步都很费力。你记录了,接下来要分类;分类完了要打标签;标签打完了还要做链接;链接做完了,过两周回来发现结构又变了,需要重新梳理。这五步里任何一步断了,整个库就开始腐败。收藏夹越满,打开它的欲望越低;笔记越多,反向链接越稀疏,最后它变成了一个专门放吃灰文件的硬盘。
我自己就是典型。长期用Obsidian的原因很简单——本地Markdown文件,存放不受平台限制,双链机制也符合我对知识网络的想象。但用了一年后,仓库里的笔记从几十篇涨到几百篇,整理频率却趋近于零。每次打开页面看着零散文件,我唯一的感受是愧疚。
1.2 我在Obsidian里发现"链接"才是知识的根
Obsidian相对其他笔记软件,最值钱的东西不是漂亮的界面,而是双链。[[笔记A]]这个语法,让你能在笔记B里指回笔记A,形成一个真正的网状结构。
但我逐渐发现,双链的价值取决于谁在建立它。如果靠人手动加,双链永远只会出现在兴致勃勃的第一周。知识库要活起来,真正的"根"不是某一条笔记内容,而是笔记与笔记之间的关系。一段阅读摘录如果没有跟你的其他想法产生连接,它本质上还是一个孤儿文件,和放在网盘里的PDF没什么区别。
这也让我开始思考:能不能有一种机制,自动为笔记建立关系网络?不是靠插件模板那种硬编码,而是真正理解笔记内容之后,把"这篇在讲意志力"和"那篇在讨论习惯养成"关联起来。这个需求,传统Obsidian插件解决不了,但AI Agent可以。
1.3 为什么这次选了Codex这种Agent,而不是传统插件
Obsidian生态里其实有不少自动化插件:Templater可以套模板,Dataview能动态汇总,QuickAdd能快速录入。但它们都有同一个局限——它们只做结构层面的运算,不理解语义。它们可以给每篇新笔记加一行tags: 未整理,但判断不了这篇笔记到底属于"心理学"还是"效率工具"。
Codex这类CLI Agent不一样。它能读文件、分析内容、规划步骤、执行命令,再把你要求的结果写回文件系统。你可以让它"看看inbox里有什么,给它们分类,找到全仓库相关的笔记并建立双链,最后生成一个主题索引"。它不会只格式化标题,而是真的处理内容之间的关系。
我把这次对比总结成一句话:传统插件是在你设计好的管道里搬运数据,Agent是在文件系统上替你干活。后者对于"整理知识库"这件事,是质变。
2. 5分钟上手准备:让Codex和Obsidian先握手
2.1 把Codex CLI跑起来
先说Codex是什么。它是OpenAI出的命令行AI编码代理,在终端里使用,能自己读取指定目录的文件、执行命令、修改文件,天然适合处理本地笔记这类文本任务。安装流程其实不复杂:你可以从OpenAI官方渠道拿到CLI工具,装好之后在终端里登录一次自己的账号完成鉴权,然后用codex exec "你的指令"直接跑任务。
我用的是macOS环境,安装完成后简单验证:
codex --version codex loginlogin那步会跳出一个授权链接,完成之后就开启了。Windows用户同样可以装,流程差异不大。这里不展开太多安装细节,因为官方文档写得很清楚。我要强调的一点是:Codex对网络环境敏感,第一次登录时如果提示会话失败、组织设置加载不出来之类的问题,别慌,大概率是网络抖动,重试一次或者重启终端通常就好了。
2.2 搭一个适合自动生长的Obsidian目录骨架
Obsidian的优势是它本质上就是一个文件夹。所以"让Codex整理Obsidian知识库"这件事,直接变成"让Codex整理一堆Markdown文件"。为了让Agent不至于迷路,我建立了一套带编号的目录结构:
MyVault/ ├── 00_inbox/ # 所有新内容先进这里,等待处理 ├── 10_sources/ # 一手资料:书摘、文章、课程笔记 ├── 20_topics/ # 主题卡片:自己的思考、概念解释 ├── 90_mocs/ # 地图笔记(MOC),主题索引集中地 └── _system/ # 系统文件:grow.md、模板等,AI不随便动这套结构的逻辑其实很简单。00_inbox是所有种子的入口,新东西一律先丢进来;10_sources存放它们本来的样子;20_topics放你提炼出来的思考;90_mocs是知识地图,它本身不承载深内容,只负责"指向哪里有什么"。这样设计是因为,自生长的前提是输入流稳定。如果你往十个文件夹里随手乱塞,Agent再强也理不顺。
说到这,也顺便解释一下我为什么不选Notion或者语雀。它们的AI功能再强,底层也是数据库和网络服务,Agent很难直接读取原始文件,每次都要导来导去。Obsidian这种本地优先方案,等于把所有内容暴露在文件系统里,Codex只要面对.md文件就能无阻碍地干活。
2.3 5分钟内写出的"生长规则"
这是整套方案最关键的一步:把"你的知识库应该怎样生长"写成一份规则文件,放在_system/grow.md里。之后每次喊Codex干活,它都会先读这个文件,再按规则执行。相当于给Agent立了一部宪法。
我当时的grow.md内容大概是这样的:
# 知识库生长规则(grow.md) 1. 只处理 00_inbox 下状态为 new 的笔记,处理完之后把 frontmatter 里的 status 改为 grown。 2. 每处理一篇笔记: - 用原文提炼 3-5 个要点,不得添加原文没有的观点; - 补充 frontmatter:tags、type、date; - 扫描全库相关主题,在必要处添加 [[双向链接]]。 3. 移动文件:一手资料(书籍、文章摘录)放入 10_sources,个人思考、概念笔记放入 20_topics。 4. 移动后,更新对应主题的 MOC;如果 MOC 不存在,则创建一个。 5. 禁止删除原文;除排版和错别字外,不修改用户原句。 6. 每轮最多处理 15 篇笔记;处理完输出变更摘要。为什么每一条都写这么细?因为AI在不设边界时,会倾向于"发挥"。比如它可能觉得某篇文章结尾不够精彩,顺手帮你改写两句;也可能删掉它认为重复的段落。对知识库来说,这是灾难。规则里明确"禁止删除原文""不得添加原文没有的观点",就是在给自生长上围栏——它可以整理、关联、索引,但不能篡改知识来源。这一点后面避坑部分我会再展开。
写完这个文件,核心准备就结束了。从零开始装环境算起大概二十分钟,但从写完规则到跑通第一轮指令,真的就是5分钟的事。
3. 会自生长的关键机制:Codex循环与Obsidian索引的配合
3.1 Agent循环:读取、规划、落盘、再读取
很多人以为"用AI建知识库"就是让AI一口气把所有笔记全部重写一遍。那是批量生产,不是自生长。自生长强调的是增量循环——每次只消化一点点新内容,然后基于已经存在的网络结构决定它应该长在哪里。
Codex之所以适合干这件事,是因为它具备Agent式的循环能力:读取最新文件,理解内容,判断它们与旧笔记的关系,修改文件,然后再读取下一批。每次执行任务时,它都会重新回到grow.md,确保自己在同一个规则框架下行动。这就像植物在生长周期里不断从土壤吸收养分,再把养分转化为新的枝叶,而不是一口气把一整棵树砍下来重新拼装。
我实际使用时的触发方式很简单。往inbox里丢了几篇笔记之后,在终端里跑:
codex exec "请阅读 _system/grow.md,按规则处理 00_inbox 里所有 status: new 的笔记,处理完输出摘要"Codex会自己列出待处理文件、分析内容、找到知识网络中的挂载点,然后修改仓库。这个过程的本质是"人提供种子,AI提供光合作用"。
3.2 双链和Dataview让AI产出形成复利
Codex在文件里写下的双链、frontmatter标签,单看都是一行行文本。但它们一旦进入Obsidian,就会被双链图谱和Dataview插件变成活的界面。
我另外装了Dataview插件。它可以根据文章里的frontmatter动态生成表格和列表。比如我在90_mocs文件夹里建了一个"知识管理 MOC",里面的内容不是手工写的目录,而是一个Dataview查询块:
LIST FROM "20_topics" WHERE contains(tags, "知识管理") AND status = "grown" SORT file.cday DESC这样每次Codex给新笔记打上#知识管理标签并移动过来,MOC页面就会自动多出一行。我不需要手动更新任何索引,AI建立链接、我查看网络,两者形成复利效应。最初几篇笔记看不出什么,等到跑完两三个星期,你会看到原本孤立的笔记开始被反复引用,主题卡片从单个概念长成一簇簇主题集群。
3.3 有这层结构之后,还要不要RAG?
写到这,稍微回应一下很多人会有的疑问:现在知识库不是都讲RAG(检索增强生成)吗?向量数据库、嵌入模型、召回流水线,为什么我的方案里一个都没提?
RAG适合解决的是"给我这一段资料,基于它回答我的问题"。它把文档切块、做向量召回、再扔给大模型生成答案,像一个训练有素的资料员。但知识库要"生长",核心不是问答,而是积累和关联。RAG的结果是瞬时的、不可积累的,每一次问答都是独立过程。而Obsidian里已经有了主题、双链、目录这些结构化的骨架,Agent要做的是在这个骨架上做增量整理,而不是把所有资料再平铺成一块块向量。
打个比方:RAG是租了一间图书馆,每次你要资料,管理员跑进去把相关几本书翻出来递给你;本文的方案是自己在院子里种树,每片新叶子都会长在原有的枝干上。后者不会替代前者,两者可以共存——如果你未来确实需要基于知识库做问答,因为Agent已经用frontmatter、标签、MOC做了一层结构化,再接入向量库反而更轻松。所以顺序应该是:先把知识长成结构化的树,再考虑要不要加RAG的果实。
| 维度 | Agent + Obsidian 双链方案 | RAG 向量检索方案 |
|---|---|---|
| 核心能力 | 在已有结构上增量写作、建立关联 | 基于资料切块做相似性召回 |
| 适合场景 | 长期积累知识、建立个人体系 | 基于固定语料做问答/客服 |
| 维护方式 | 跑一轮AI更新MOC和链接 | 新增资料后需重建向量索引 |
| 产出结果 | 可视化的主题网络与卡片 | 检索结果,不形成知识网络 |
4. 实操实录:从一堆乱笔记变成会生长的知识库
4.1 第一轮:让Codex梳理inbox并建立卡片
到动手环节了。假设你的Obsidian库现在还是一团乱麻——几十篇文章散落在不同文件夹,有的有标签,有的连标题都没改。第一步,你不需要瞬间把它们全部理清,只需要把最想消化的那些往00_inbox里拖。
我第一次就是这么干的:把积压的三篇读书摘录和两篇网页剪藏丢进inbox,然后运行上面提到的那句指令。Codex先是列出"读取到5篇笔记",然后逐篇分析。大概过了一分多钟,它给出了类似这样的变更摘要:
- 《自控力》第九章摘录 → 移动到
10_sources,添加标签#心理学 #行为设计,链接到[[意志力 MOC]] - 《为什么你总是三分钟热度》 → 移动至
20_topics,建立与[[习惯回路]]的反向链接 - 《Obsidian自动化实践》 → 移动到
10_sources,链接到[[知识管理 MOC]]
看到这个输出的时候我是很兴奋的,因为以前我自己整理这几篇笔记至少得花半小时,而且要读内容、回忆自己写过什么、再决定往哪挂。Codex在几秒内读完了全部内容,并找到了我看不到的关联点。
4.2 第二轮:自动生成MOC和反向链接
第一轮跑完只是把文件归位,真正体现"生长"的是它顺手生成MOC的动作。因为grow.md里的规则写着"移动后更新对应主题的MOC,不存在则创建",所以Codex会自动建立主题索引。
当我打开90_mocs文件夹,里面多了一个"知识管理 MOC.md"。打开之后不是空目录,而是一个Dataview列表,把所有打上#知识管理标签的文档动态汇总到一起。更妙的是,Codex还会在经典笔记之外生成新的20_topics卡片。比如它发现好几篇笔记都在讨论同一件事,就会创建一张总结性卡片,把这些观点汇总起来,并反向链接到所有来源笔记。
这里我想提醒一句:Agent生成的新卡片要谨慎对待。我要求它"不得添加原文没有的观点",所以它生成的总结通常是对现有笔记的归纳。但归纳仍然可能有偏差,所以我个人习惯是:AI生成的主题卡片我会快速走读一遍,确认逻辑没有问题再标记为final。知识库的生长可以是自动的,但它的"主权"还是你的。
4.3 日常播种:往知识库里喂新内容
自生长知识库真正和一次性搭建的区别,体现在日常使用上。现在我的工作流很简单:
- 看到微信公众号文章?直接复制全文,建一个md文件丢进
00_inbox,文首标注来源链接; - 读了Zotero里的文献?导出Markdown格式的笔记,丢进inbox;
- 随手冒出一个想法?什么都不管,先丢进inbox再说。
积累到三五篇,就跑一次Codex。第二天如果忘了,第三天想起来再跑也无所谓,因为它只处理status: new的文件,已经整理过的不会重复动。
有人可能会问:知识库里的图片怎么办?Obsidian本身就是本地文件夹,图片附件可以统一放在vault附件目录里。AI虽然不能直接"看"所有图片,但你可以让它在处理图片时创建一条描述卡片,把图片链接和上下文写进去,再把它和相关的text笔记关联起来。这就把原本"死"的图片也纳入了生长网络。
5. 踩坑记录:这套方案翻过车的地方
5.1 AI一自由发挥就容易"编"
我最开始那份grow.md没有写"不得添加原文没有的观点",结果Codex在生成主题卡片时,直接补了一段"我认为意志力和多巴胺之间的关系是..."。那段文字读起来很有道理,但根本不是我读过的内容来源,我差点当作自己的思考存进库里。
后来我在规则里加了强约束:处理笔记时不得添加原文没有的信息,生成摘要也只能基于原文;如果它想补充知识背景,必须明确标注"AI补充推断"。这个调整之后,知识库的"可信度"才稳住了。用AI整理知识库,最大的风险不是你懒,而是它替你编造记忆。
5.2 文件编码和中英文文件名的坑
我有一阵子在Windows上跑Codex,遇到一个很诡异的现象:AI创建的md文件,用记事本打开正常,但Obsidian里显示乱码。排查了一圈,是文件编码问题。Obsidian对Markdown的默认处理是UTF-8,但Windows某些环境下终端输出会变成UTF-8 with BOM,或者GBK,导致Obsidian识别异常。
解决办法很简单:让Codex统一以UTF-8编码写入文件,文件名不要用太奇怪的特殊字符。另外,中文文件名在跨平台同步时容易出问题,我建议统一用简短的英文文件名加中文frontmatter标题。比如文件名是willpower-moc.md,frontmatter里的title写成意志力 MOC。这样无论后续用Git、网盘还是换电脑,都不会崩。
5.3 网络波动与长任务中断
Codex连接远程服务时对网络稳定性相当敏感。有一次我让它处理20篇笔记,跑到第15篇左右,终端里出现会话中断,任务直接停在那。更尴尬的是,已经处理过的十几篇已经落盘了,我很难判断哪些完成、哪些没完成。
从那之后我养成了两个习惯:一是把大任务拆小,一批不超过15篇;二是每次跑完立刻看一眼摘要,确认处理边界。如果会话中途断了,重新执行同一命令即可——因为grow.md里有status字段,已处理的文件会被跳过,这就是增量设计的安全感。
5.4 别让Codex一次吞下整个库
这里说的"吞下"不是字面意义上的读取,而是指上下文窗口。如果文件库特别大,Codex就要反复读很多文件,很容易忘了最初的规则约束,或者处理到后面开始偏离grow.md。尤其是让它处理整库双链检查这种任务,跑着跑着就可能出现"把所有笔记都改了一遍"的失控状态。
我的止损经验是:给每轮任务设定一个明确的边界。比如"只处理00_inbox里的新笔记""只扫描90_mocs下名为知识管理的MOC""最多创建5条新链接"。宁可多跑几轮,也不要让它自由探索整库。知识库的成长需要节奏,不是一次大爆炸。
5.5 给一个能回滚的保险:版本管理
整理笔记是写操作,AI改坏文件的风险是真实存在的。哪怕有grow.md约束,也要给自己留后悔药。我把整个Obsidian库做成Git仓库,每次Codex跑完任务,就提交一次快照:
git add . git commit -m "知识库自动生长:$(date +%Y-%m-%d)"图片附件占空间大的话,可以在.gitignore里排除附件目录,只追踪Markdown文本。这样即使哪一轮跑歪了,随时可以回退到上一次提交,五分钟内的损失几乎为零。我现在已经养成了肌肉记忆:每次看到Codex输出摘要,顺手就commit,几乎没出过事。
最后再分享一个我个人的体会
这套方案跑了两三周之后,我最意外的收获不是"笔记自动整理好了",而是知识库开始反过来影响着我的阅读。以前我读完一本书,记完笔记就再也不看第二次;现在因为Codex会给新笔记自动挂上指向旧笔记的双链,我经常在写新内容时,因为看到链接提示而点回去回看几个月前的想法。这种"旧的被重新发现"的体验,是任何手工分类都给不了的。
另外还有一个小技巧送给打算动手的朋友:把grow.md里的规则当成一个活文件,不要写死。跑了一周之后,如果发现AI经常在某个环节犯错,就把对应原则补进去。比如我后来就加了一条"如果发现内容相似但无法确定是否同一主题,保守处理,宁可只加标签不加双链"。知识库在生长,规则也应该跟着生长。