Karpathy LLM Wiki 知识库最佳工程实践全解
Karpathy LLM Wiki 知识库最佳工程实践全解
一、核心哲学:编译,而非检索
Karpathy 的核心洞见可用一句话概括:与其让 LLM 每次都重新读取原始文档来回答问题,不如一次性构建一个持久的、结构化的 Wiki,然后永远保持更新。 Karpathy 使用了一个来自软件工程的类比:编译(compilation)。 他将系统映射到编译器架构:raw/ 是源代码,LLM 是编译器,wiki/ 是可执行输出,lint 是测试,query 是运行时。 其核心洞察是:停止反复推导,开始编译。RAG 检索后即遗忘,而 Wiki 则在积累中复利增长。
二、三层架构(Three-Layer Architecture)
系统由三层组成:原始来源层(不可变文档——PDF、转录、书签、笔记),Wiki 层(LLM 生成的 Markdown——摘要、实体页面、交叉引用、矛盾标记),和模式层(一个 CLAUDE.md 文件,告诉 LLM 如何维护 Wiki)。
1️⃣ Raw Sources(原始来源层)
原始来源是你的输入。Wiki 是 LLM 对这些输入的持久、不断演进的理解。 PDF 最适合研究论文。Markdown 文件适用于从网络剪辑的文章(Obsidian Web Clipper 浏览器扩展可自动将任何网页转换为 Markdown)。纯文本、导出的聊天对话和 .md 笔记也都可以。LLM 可以读取你放入的任何内容。
2️⃣ Wiki(知识编译层)
关键洞见:Wiki 层是一个不断复利增长的制品(compounding artifact)。 概念文章(约100篇,约40万字)按主题组织,带有反向链接和交叉引用。 LLM 不是在读 PDF 第14页的随机片段,而是在读一个预合成的、交叉引用的百科全书条目——它已整合了系统从所有已摄入来源中学到的关于该概念的一切。
3️⃣ Schema(模式/规范层)——最重要的文件
Schema 文档(CLAUDE.md 或 AGENTS.md)是系统中最重要的文件。它将通用 LLM 转变为一个有纪律的知识工作者。
Schema 定义了如何摄入不同来源类型(论文 vs. 代码仓库 vs. 网页剪辑)、索引文件格式及如何更新、如何生成反向链接以及命名规范。Karpathy 描述该 schema 是共同演进的——他会随着 wiki 的发展而持续改进它。
人类的主要编辑角色不是写文章,而是编写和改进指导 LLM 如何写文章的 schema。如果你这样思考,知识库与其说是 LLM 的产物,不如说是 Karpathy 指令编写的产物——LLM 只是大规模执行。
这个 schema 是关键投资。花三十分钟为你的领域把它调对,LLM 就能在每一次会话、每一周中一致地维护 wiki,只要你一直使用它。
三、三大核心操作(Three Operations)
架构有三层(来源、wiki、schema)和三个操作(ingest、query、lint)。该模式映射到编译器架构:来源是源代码,ingest 是编译,wiki 是中间表示,query 是链接,lint 是优化传递。
🔹 操作一:Ingest(摄入)
Ingest 是知识进入系统的入口。你将新来源放入 raw 目录并告诉 LLM 处理它。单次摄入可触及 10-15 个 wiki 页面。
每次你添加新文档,LLM 不只是索引它——它会读取、提取关键信息、更新现有页面、修订摘要、标记矛盾并加强交叉链接。Wiki 是一个持久的、复利增长的制品。
Karpathy 更倾向一次一个来源并由人工审查。批量摄入加少量监督也是可以的——在 schema 中记录你的选择。
最佳实践:
Wiki 在来源主题相关时复利效果最好。用同一主题的五篇论文开始,比五个不同主题的五篇论文产生更丰富的图谱。
🔹 操作二:Query(查询)
你针对 wiki 提问。LLM 搜索相关页面、阅读它们,并综合出带引用的答案。好的答案可以作为新页面归档到 wiki 中。你的探索像摄入的来源一样在知识库中复利增长。
还有一个步骤完成闭环:--save 标记。启用后,代表新的有价值知识的综合答案会自动作为新 wiki 页面归档。Slug 从问题本身派生。未来的会话立即受益。这就是 Karpathy 所说的复利原则:你问了一个问题,系统回答了,现在 wiki 也知道答案了。
答案可以采取多种形式:Markdown、对比表格、Marp 幻灯片、matplotlib 图表。
🔹 操作三:Lint(审计/健康检查)
Lint:定期由 LLM 对 wiki 进行健康检查。它查找页面间的矛盾、过时的声明、没有入站链接的孤立页面、被提及但缺少自己页面的重要概念,以及缺失的交叉引用。
Lint 操作运行结构检查:孤立页面(wiki 中的文件但未在 schema 中定义)、缺失页面(schema slug 没有对应文件)、断裂的交叉引用([[slug]] 链接指向不存在的页面)、过时的嵌入以及缺失的来源出处。
LLM 还会建议要调查的新问题——lint 是主动的,不仅仅是清理。
四、两个关键导航文件
两个特殊文件帮助导航不断增长的 wiki。index.md 是每个页面的目录,带一行摘要。log.md 是按时间顺序排列的操作追加记录。
LLM 搜索 index.md,读取相关页面,并综合出带有 [[wiki-link]] 引用的答案。LLM 通过索引导航,而不是暴力将所有文档加载到上下文中。
规模边界:
原始模式依赖 index.md——一个记录每个页面的单一文件。这在大约 100-200 页时有效。超过这个规模,索引本身对 LLM 来说一次读取太长,你需要真正的搜索。
五、角色分工原则
你不写 wiki,LLM 写。你的工作是策展来源、提出好问题,并思考这一切意味着什么。
Karpathy 的经典总结:"Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase."
六、规模化后的进阶实践(LLM Wiki v2)
v2 文档添加了在生产环境中运行该模式后学到的教训:什么在规模化时会崩溃、缺少什么,以及什么区分了保持有用的 wiki 和腐烂的 wiki。
知识有生命周期
原始模式将所有 wiki 内容视为永远同等有效。在实践中,知识是有生命周期的。 上周发现的 bug 比六个月前的更重要。你见过十二次的模式比只见过一次的更可靠。
混合搜索(超过 200 页后必需)
最佳方法结合三个流:BM25(关键词匹配)、向量搜索(语义相似性)和图遍历(实体感知的关系游走),用倒数排名融合来合并结果。每个流捕获其他流遗漏的内容。BM25 找到精确术语、向量找到语义相似性、图找到结构连接。它们一起胜过任何单一方法。
Schema 共同演进
Schema 编码了你的领域中存在什么类型的实体和关系、何时创建新页面 vs. 更新现有页面、什么是私有的 vs. 共享的。你和 LLM 随时间共同演进这个文档。第一个版本会很粗糙。经过几十个来源和几次 lint 之后,你将拥有一个真正反映你领域运作方式的 schema。
工作流编码化
Karpathy 的操作(Ingest、Query、Lint)是你在会话中手动输入的提示。生产环境可用 26 个 skill + 触发短语编码在 schema 中。 工作流是编码的,而非即兴的。这种区别在规模化时至关重要。
学习循环分级
每日观察被捕获——系统工作方式的发现、客户对话中的模式、犯的错误、阅读的洞见。每周回顾扫描积累的观察,发现跨会话模式并提出升级建议。
七、进阶扩展:两层 Lint
Karpathy 将"找矛盾、幽灵链接、孤立页面、过时声明"合并为一个 Lint 操作。有人将其拆分为两层:程序化层(scripts/lint.sh)处理确定性检查(幽灵链接、孤立页面、格式违规);LLM 层处理语义检查(矛盾、过期声明)。程序化层先运行,这样 LLM 就不会在格式问题上浪费注意力。
八、未来方向:Fine-tuning
Karpathy 提到一个未来方向:使用 wiki 生成合成训练数据并微调 LLM,使其在权重中"知道"数据,而不仅仅通过上下文窗口。这将把个人知识库变成一个个性化模型。
📋 最佳实践速查表
| 编译而非 RAG | |
| 三层架构 | raw/wiki/(LLM 生成)→ CLAUDE.md(schema) |
| 三大操作 | |
| Schema 是最高投资 | |
| 主题聚焦摄入 | |
| 逐一摄入 + 人工审查 | |
| 答案回写 Wiki | --save 归档为新页面 |
| 定期 Lint | |
| index.md + log.md | |
| Schema 持续演进 | |
| 超 200 页用混合搜索 | |
| 两层 Lint |
普通人如何用 AI 搭建自己的知识操作系统?
一个程序员出身的知识工作者,公开记录自己如何用 AI 工具搭建个人知识系统、把读过的书和做过的项目变成可复用资产的全过程。
我是【一只阿木木】——公开建造我的 AI 第二大脑。
欢迎加入行动营👇获取更多Obsidian + AI数字大脑实践
我相信:在 AI 时代,每个普通人都该拥有一个自动生长的知识系统
欢迎关注【一只阿木木】🌊