这篇写给谁
正在用 Obsidian 但越用越觉得「整理跟不上输入」的人。装了 Claude Code 但只用来写代码,没拿它管过笔记的。或者看到 Karpathy 那篇 Wiki Gist,觉得太抽象、不知道怎么落地的。
正文
前几天 Karpathy 在 X 上宣布,自己正式加入 Anthropic 了。
进的是 Claude 预训练团队,跟着 Nick Joseph 干。同时新拉一支队伍,研究怎么用 Claude 加速预训练研究本身——也就是让 Claude 帮 Anthropic 改进 Claude。
这条消息出来之后,我想起他 4 月发过的一篇 Gist,标题就叫 LLM Wiki。讲怎么让大模型在你给它原始文档之后,持续帮你维护一个有结构的 Wiki——他自己把这个 pattern 叫 LLM-maintained Wiki。
那篇 Gist 里最让我记着的一句话是:
Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase.
入职 Anthropic 这件事之外,我把那篇 Gist 翻出来又看了一遍。
他自己说这个文档"故意是抽象的,描述的是 pattern 而不是某种实现",建议把它丢给你自己的 LLM,一起做出一个适合你的版本。
那就做一个。
这套是我跟着他思路、用 Claude Code 落地的一个最小版本。每一步都跑过,你照着抄一遍就能用。
它和 RAG 有什么不一样
先说为什么不直接 RAG。
RAG 是每次提问,LLM 去原始文档里现搜现拼,答完就忘了。下次问类似的问题,所有检索和拼接重来一遍。
Karpathy 的思路是:让 LLM 在你提供原始文档之后,把要点编辑进一个持续维护的 Wiki。 下次提问,LLM 先读 Wiki,而不是从原始文档从头检索。
知识沉淀在 Wiki 里,不在每次查询里被消耗掉。
整套系统有三层 + 三个操作。
三层架构
- Raw sources:你的原始文档,LLM 只读不写
- The wiki:LLM 生成和维护的 markdown 文件
- The schema:配置文件,告诉 LLM 这套规则。用 Claude Code 的话就是 CLAUDE.md
三个操作
- Ingest:摄入新文档
- Query:向 Wiki 提问
- Lint:定期健康检查,找矛盾、过时信息、孤立页
下面咱们就跟着我的脚步具体实操下吧
第 1 步 · 起 vault 结构
新建一个 Obsidian vault,目标是这样三层:
如果你已经在用 Obsidian、当前进到某个库里,那就点左下角库名,选「管理仓库」切回新建界面。
如果是第一次打开 Obsidian,会直接到启动页。点「新建仓库」右边的「创建」。
填仓库名称(我用的是 karpathy-wiki-demo),通过「浏览」选好存放位置,再点「创建」。
进新 vault 后,左上角有「新建文件」和「新建文件夹」两个按钮。用它们分别建:
- 新建文件夹 → raw/(放原始资料)
- 新建文件夹 → wiki/(放 AI 整理后的笔记)
- 新建文件 → CLAUDE.md(写规则,告诉 Claude Code 怎么处理资料)
建完之后,左侧文件树是这样:
- raw/ 里放你要喂给 Wiki 的源:从浏览器截的文章 markdown、论文、播客转录、自己写的随笔。
- wiki/ 暂时是空的,等 LLM 来填。
- CLAUDE.md 必须放 vault 根目录,Claude Code 启动时会自动读它。
第 2 步 · 写 CLAUDE.md
CLAUDE.md 是整套系统的灵魂。 它告诉 Claude 三件事:这个 vault 是什么、收到新源时怎么处理、回答问题时怎么搜。
最小版本我是这样写的,你可以直接抄过去:
这个文件后续会随你用着用着改。Karpathy 在 Gist 里专门强调过,这是 you 和 LLM 一起 co-evolve 的,不用一开始就追求完美。建议先写 10 条以内,跑一周再看哪些规则没在用、哪些场景缺规则,然后调。规则太多 Claude 每次操作要花很久核对,还容易漏掉其中几条。
第 3 步 · 在 vault 目录启动 Claude Code
在 Finder 里对 vault 文件夹(我这里是 karpathy-wiki-demo)右键 →「服务」→「新建位于文件夹位置的终端窗口」。iTerm2 用户选「New iTerm2 Window Here」就行。终端会直接在 vault 根目录打开。
在新开的终端里执行命令:
让 Claude 先确认它认得这套规则。可以直接问:
如果 Claude 的回答能复述出 ingest 的几个步骤、提到 index.md 和 log.md,说明 schema 生效了。
到这一步,IDE 和程序员握上手了。
第 4 步 · 第一次 Ingest
挑一篇你最近读过的文档当种子,保存成 markdown 丢到 raw/ 里。
我用的是这篇正在写的教程本身——让 Wiki 自己 ingest 自己,有点元的味道,而且这一篇本来就是这个 vault 的起点文献。
对 Claude Code 说:
Claude 会按 CLAUDE.md 写的步骤跑一遍,你能看到它依次 Write 一串文件:
- wiki/sources/<文档名>.md(摘要页)
- wiki/entities/karpathy.md、anthropic.md、obsidian.md、claude-code.md(文档涉及的实体)
- wiki/concepts/llm-maintained-wiki.md、wiki-vs-rag.md、three-layer-architecture.md、ingest-query-lint.md、claude-md-schema.md(涉及的概念)
- wiki/index.md(新建或更新)
- wiki/log.md 追加一条
[YYYY-MM-DD] ingest | <文档名>
第一次跑会有一个小卡点:Claude Code 默认对每个新文件都会问你要不要创建,长这样:
Do you want to create index.md?
› 1. Yes
- Yes, allow all edits during this session (shift+tab)
- No
直接选 1,或者选 2 让它这次会话全程放行,省得每次按。十几个文件全确认完,ingest 才算跑完。
跑完之后回 Obsidian 看 wiki/ 目录。第一次会有点意外——刚才还是空目录,这会儿多出来一整套 sources/ entities/ concepts/ 子目录,index.md 已经按你 CLAUDE.md 里规定的格式登记好所有新页,每条带一句简介。
第 5 步 · Query
不是 RAG 式的"重新检索",而是基于 wiki 的"读已有笔记答"。
对 Claude Code 说:
Claude 会先打开 wiki/index.md,找到相关的概念页,读完之后给你答案。关键差别在这:每个判断都会附 [[wiki-vs-rag]]、[[llm-maintained-wiki]] 这种 wiki 内引用,你点进去能看到原始来源页是哪一条。
Karpathy 在 Gist 里建议过一个用法:好的 query 答案可以 file back 到 wiki 成新页。这样你的探索是累加的,不是每次问完就丢。
我会在 Claude 答完之后追加一句:
归档之后回 Obsidian 看,wiki/explorations/ 下会多一篇页,顶部写清起源(哪天的什么 query、原问题是什么),下面是一句话答案 + 展开 + 引用。
后面任何时候想回到这次 query,都能从这页翻;答案里的 [[wiki-vs-rag]] 之类引用也能直接点进去查依据。
顺便看一眼 wiki/log.md。每一次 ingest 和 file-back 都按 CLAUDE.md 规定的
[YYYY-MM-DD] <动作> | <主题> 格式追加在这里,日期成倒序锚点。后面想知道 wiki 是怎么一步步长起来的,看这一份文件就够。
每这么做一下,wiki 就在长。
第 6 步 · Lint
跑了几次 ingest 之后,wiki 会开始有「脏数据」:两篇源说法不一致、有些页没人引用、有些重要概念漏建。
对 Claude Code 说:
Claude 会扫一遍 wiki,给你一份报告。我跑出来的样子大概是:
Lint 不直接改,你看完报告自己决定哪条要修。 修起来很简单,让 Claude 按报告条目逐个改就行。
几个用着的观察
Graph View 比 index.md 更直观
打开 Obsidian 图谱视图——左侧边栏图标点一下,或者用命令面板(Cmd+P / Ctrl+P)搜 "Open graph view"。默认是没有快捷键的,如果你常用,自己去 Settings → Hotkeys 里绑一个。打开之后,能看到 wiki 的形状:哪些页是 hub(被很多页引)、哪些是 orphan(没人引)、哪些方向有断层。
第一次看到自己的 wiki 长成这样一张网的时候,我对 Karpathy 那句「Obsidian 是 IDE,LLM 是程序员」突然有了体感——整个流程下来,我在编辑器里没敲过几个字,但 vault 里有一片活的笔记。
Web Clipper 让 raw/ 灌起来很快
如果你要持续往 raw 里灌网页文章,装一个 Obsidian Web Clipper 浏览器扩展。看到好文章点一下,自动保存成 markdown 进 raw/。再对 Claude 说 ingest 就完了。
Vault 直接 git init
它本质就是个 markdown 仓库,git init 之后每次 ingest 完一个 commit。后悔了能回滚,看历史能知道 wiki 是怎么一步步长起来的。