复现 Karpathy 的个人知识库工作流:用 Obsidian 和 Claude Code 把 AI 变成你的知识管理员
灵感来源
Andrej Karpathy 最近在 X 上分享了自己的研究工作流:收集原始数据 → LLM 编译为 .md wiki → 通过 CLI 工具进行 Q&A 和增量增强 → 全部内容在 Obsidian 中查看。
这套工作流的核心思想不是"让 AI 帮你搜索",而是让 AI 成为知识库的管理员——人类负责丢原始材料,AI 负责结构化整理、索引维护和交叉引用。随着知识库逐渐成型,AI 会"理解"你的知识结构,后续只需一句指令就能完成新知识的归档。
本文是对这套工作流的完整拆解,包含可直接复用的目录结构、指令文件模板和日常操作流程。
整体架构
my-wiki/
├── CLAUDE.md # AI 管理员指令文件(核心大脑)
├── raw/ # 原始素材:论文、博客、发布会记录等
├── wiki/ # 精炼知识:按主题分文件夹
│ ├── _master_index.md # 主索引:所有主题及路径
│ ├── wiki_log.md # 操作日志:仅追加模式
│ ├── llm/ # 主题文件夹示例
│ │ ├── _index.md # 主题索引
│ │ └── *.md # 具体文章
│ └── agent/ # 主题文件夹示例
│ ├── _index.md
│ └── *.md
└── ai-research/ # AI 网络检索的原始完整内容
设计原则:原始素材与精炼知识严格分离。raw/ 是原材料仓库,wiki/ 是加工成品展厅,二者通过 YAML frontmatter 中的 source 字段建立溯源关系。
核心机制
CLAUDE.md:定义 AI 的角色
整个系统的核心是一个指令文件 CLAUDE.md,Claude Code 每次启动时自动读取。开头就定义了人机分工:
你是这个知识库(Vault)的管理员。`wiki/` 目录是你的专属领地。
你负责编写并维护该维基(Wiki)中的每一个文件。人类极少直接编辑这些维基文件。
这行定义从根本上改变了协作模式:人类是知识提供者,AI 是知识加工者。
五种操作
| 操作 | 触发条件 | AI 行为 |
|---|---|---|
| Ingest(摄入) | 用户提供新的原始素材 | 阅读 → 识别主题 → 生成文章 → 更新索引 → 记录日志 |
| Query(查询) | 用户提问 | 查主索引 → 查主题索引 → 读文章 → 综合回答并附引用 |
| Lint(审查) | 用户要求审查 | 遍历全部文件 → 生成矛盾/过时/孤立报告 → 等批准后修复 |
| Log(日志) | 每次操作 | 在 wiki_log.md 追加一行记录,仅追加,严禁修改 |
| AI Research(检索) | 发现知识缺口 | 网络搜索 → 保存完整原文到 ai-research/ → 文件不可变 |
摄入(Ingest)流程
这是最核心的环节:
[用户提供原始材料]
↓
[AI 完整阅读原始文件]
↓
[识别核心研究领域]
↓
[查阅 _master_index.md 匹配主题]
↓
┌─Y── 主题存在 ──N───┐
↓ ↓
[在主题文件夹新建文章] [新建主题文件夹 + _index.md + 文章]
↓ |
[更新主题 _index.md] |
└────────┬─────────┘
↓
[更新 _master_index.md]
↓
[在 wiki_log.md 追加日志]
同源异构:同一材料,多个视角
最有意思的设计。当一份原始材料跨越多个研究领域时,AI 会在各主题下分别生成不同视角的文章:
┌─────────────┐
│ 原始材料 │
└──────┬──────┘
│
┌────────┴────────┐
↓ ↓
wiki/llm/ wiki/agent/
侧重:模型架构 侧重:智能体能力
侧重:基准得分 侧重:工具调用
│ │
└────────┬────────┘
↓
交叉链接互引
不是复制粘贴同一篇文章,而是从不同研究视角重新组织信息,底部通过交叉链接形成知识咬合。
审查(Lint)机制
定期让 AI 遍历所有文件,检查:
- 矛盾信息:同一事实在不同文章中描述不一致
- 过时主张:模型版本、能力指标等已更新
- 孤立页面:没有任何交叉链接指向的页面
- 无来源断言:缺少 source 或引用链接的陈述
审查报告带日期输出,等待人类批准后才执行修复。
实操步骤
第一步:环境准备
必需软件:
| 软件 | 用途 | 安装 |
|---|---|---|
| Claude Code | AI 引擎,负责阅读、编译、维护 wiki | npm install -g @anthropic-ai/claude-code |
| Obsidian | 知识库前端 IDE,用于查看 raw/、wiki/ 和可视化输出 | 官网下载桌面客户端 |
Vault 隔离建议: 建议将这个 AI 驱动的知识库与日常个人笔记分开,存放在不同的 Vault 中。这样可以避免 AI 自动生成的文件与手动笔记混杂,也方便单独对知识库进行版本控制和 Git 管理。
Obsidian Web Clipper(官方浏览器扩展):
- 安装 Obsidian Web Clipper 浏览器扩展,用于一键保存网页为 Markdown 文件
- 在扩展设置中,将保管库改为你的知识库仓库路径
- 将笔记位置设置为该仓库下的
raw文件夹,确保所有抓取的网页都直接落入raw/目录
Local Images Plus(社区插件):
- 配合 Web Clipper 使用,在网页抓取时自动将图片下载到本地知识库,避免外部链接失效
- 安装后在插件设置中将 Media folder 设置为
_resources/${notename},图片会按文章名分文件夹存储,保持目录整洁
Terminal(社区插件):
- 安装后在 Obsidian 内直接打开终端,无需切换窗口即可运行 Claude Code
- 在插件设置中将默认配置设置为整合式:darwinIntegratedDefault(macOS),实现 Obsidian 内嵌终端体验
其他推荐插件:
| 插件 | 类型 | 用途 |
|---|---|---|
| Marp | 社区插件 | 将 markdown 渲染为幻灯片,Karpathy 提到用它查看输出 |
| Dataview | 社区插件 | 对 wiki 中的文章进行结构化查询和聚合展示 |
| Templater | 社区插件 | 创建标准化的文章模板(frontmatter、结构骨架等) |
| QuickAdd | 社区插件 | 快速执行自定义脚本,比如一键触发 Claude Code 的 ingest 流程 |
第二步:初始化目录
mkdir -p my-wiki/{raw,wiki,ai-research}
cd my-wiki
# 创建主索引
cat > wiki/_master_index.md << 'EOF'
# 维基主索引
| 主题 | 路径 | 简介 |
| ---- | ---- | ---- |
| | | |
EOF
# 创建操作日志(仅追加模式)
cat > wiki/wiki_log.md << 'EOF'
# Wiki 操作日志
| 日期 | 时间 | 操作 | 简短描述 | 涉及文件 |
| ---- | ---- | ---- | -------- | -------- |
EOF
第三步:编写 CLAUDE.md
在项目根目录创建 CLAUDE.md,这是整个系统的核心配置文件。Claude Code 每次启动都会读取它。以下是可直接使用的完整模板:
# 角色 (Role)
你是这个知识库(Vault)的管理员。`wiki/` 目录是你的专属领地。
你负责编写并维护该维基(Wiki)中的每一个文件。人类极少直接编辑这些维基文件。
# 核心操作 (Operations)
## 摄入 (Ingest)
1. **识别领域**:完整阅读原始文件,识别出一个或多个核心**主题**。
* **主题定义规范**:主题必须是一个**研究领域**(如 LLM, Agent, RAG, ML 等),而非具体的技术、算法或工程方法。
2. 在 `wiki/_master_index.md` 中查找匹配的主题文件夹。
3. **若主题存在**:在该主题文件夹内新建一个 `.md` 文章(仅当新输入来源是现有文章的精确延续时,才更新现有文章)。为所有受影响的页面添加反向链接。
4. **若主题不存在**:在 `wiki/` 下创建一个使用小写字母和连字符命名的新文件夹。**必须**在此新文件夹内创建**两个**文件:一个是 `_index.md`(主题索引),另一个是用于存放实际总结文章的全新 `.md` 文件。
5. **文章格式规则**:每篇新建或更新的维基文章必须包含:
* **Frontmatter 元数据**:
```yaml
---
title: 文章标题(中文)
source: "[[raw/原始文件名]]"
created: YYYY-MM-DD
---
```
* **顶级标题**:使用中文,概括文章核心主题
* **引言段落**:2-4 句话概述
* **核心摘要**:使用数字序号(1. 2. 3. …)列出核心要点
* **正文内容**:简明扼要,涉及算法/架构/量化指标时提供数学公式或逻辑推导
* **相关链接**:3-8 个指向 wiki 中实际存在页面的内部链接
6. **索引更新规则**:**始终**更新特定主题文件夹内的 `_index.md`,添加指向新文章的维基链接及简短描述。如果创建了新的主题文件夹,**必须**同步更新 `_master_index.md`。**严禁**直接创建名为 `topic_index.md` 的文件。
7. 在 `wiki/wiki_log.md` 中追加一行记录。
## 查询 (Query)
1. 首先阅读 `_master_index.md`,随后阅读匹配的主题 `_index.md`。
2. 完整阅读 1-3 篇具体文章。
3. 综合信息并附上引文(必须包含来源链接)来生成回答。
4. 询问是否将提供的大篇幅实质性解答归档为新的维基文章。
## 审查 (Lint)
1. 遍历并阅读维基中的所有文件,生成一份审查报告,涵盖:矛盾信息、过时主张、孤立页面、缺失概念、缺失交叉链接、无来源的断言,以及新文章建议。
2. 输出带有日期的审查报告。
3. 等待人类批准后再进行修复。
## 日志 (Log)
1. 每次操作都必须在 `wiki/wiki_log.md` 中追加一行记录,格式:`[YYYY-MM-DD] [HH:MM] [操作] [简短描述] [涉及文件]`。
2. 此日志为仅追加模式,严禁重写或修改现有行。
## AI 检索 (AI Research)
1. 触发条件:当人类要求你研究某个主题,或者在查询过程中发现现有维基资料无法填补的信息缺口时。
2. 在网络上搜索关于该主题的高质量、相关性强的来源。
3. 对于找到的每个来源,将其完整的原始内容(非摘要)保存为 `ai-research/` 文件夹下的 markdown 文件。
4. 该文件夹下的文件一经保存即不可更改(Immutable)。严禁覆盖,仅限创建新文件。
# 约定 (Conventions)
* **强制引用**:提供事实性信息或研究成果时,**必须始终包含来源链接**。
* **核心摘要**:每篇文章都强制要求包含"核心摘要(Key Takeaway)"部分。
* **命名规范**:文件名使用全小写及连字符(lowercase-hyphenated)。
* **维基链接**:所有交叉引用均须使用维基内部链接格式 `[[file-name]]`。**创建任何内部链接前,必须确认目标文件在 wiki 目录中实际存在**。
* **列表优先**:优先使用项目符号(Bullets)而非长篇大论的段落。
* **杜绝编造**:严禁凭空捏造主张。**严禁虚构 wiki 中不存在的文件链接**。客观标记知识缺口和未解问题。
* **标记矛盾**:发现矛盾信息时必须明确标出。
* **规则边界**:如果人类提出了规则之外的请求,请提出澄清问题。严禁悄悄发明或执行新的操作指令。
第四步:日常工作流
摄入新知识:
1. 把网页/论文/博客保存为 .md 放到 raw/
2. 启动 Claude Code,说:"将这份新文档归档到我们的 wiki"
3. AI 自动:阅读 → 识别主题 → 编译文章 → 更新索引 → 记录日志
Karpathy 强调早期需要手动参与每一步,随着 wiki 逐渐成型,AI 会理解模式,最终只需一句话就能完成。
查询知识:
1. 在 Claude Code 中直接提问
2. AI 自动查索引、读文章、综合回答并附引用
3. 如回答内容丰富,可要求保存为新文章
审查维护:
1. 要求运行 "lint"
2. AI 生成审查报告
3. 人类批准后 AI 执行修复
这套工作流的优势
- 人类做减法:只管丢原始材料,AI 负责加工整理
- 结构化输出:统一格式保证一致性和可检索性
- 可追溯:每篇文章通过 source 字段追溯到原始材料
- 可审计:仅追加日志记录所有操作
- 知识不断累积:每次查询和探索的输出都可以反哺回 wiki
与其他方案的对比
这套方案的本质区别在于:不是让 AI 搜索,而是让 AI 管理。大多数 AI 知识库方案(包括我自己用的 OpenClaw + VitePress)侧重于"AI 帮你写笔记",而 Karpathy 的方案侧重于"AI 帮你维护一个可查询、可审查、可扩展的知识网络"。
特别是同源异构跨主题摄入和双层索引结构这两个设计,对于需要管理大量跨领域知识的研究者来说非常实用。
参考来源
- Karpathy 原始推文:LLM Knowledge Bases
- Claude Code:claude.ai/code
- Obsidian:obsidian.md
本文基于 Andrej Karpathy 公开分享的工作流整理,结合实践细节补充。