LLM-WIKI.md:关于自我维护型知识库(Knowledge Base That Maintains Itself)的实践方法
编者按:Karpathy的这篇文章为构建 AI 知识库 提供了一套简洁而清晰的方法论:人负责筛选和保存原始资料,AI Agent 负责整理、链接、更新和维护知识库,而 AGENTS.md 等规则文件则规定整个知识库的组织方式和运行原则。这套方法并不复杂。你可以先在 AI Agent 中打开一个空文件夹,将本文内容完整提供给 AI,让它按照文中的原则生成知识库的目录结构和 AGENTS.md 等规则文件。在此基础上,再根据自己的研究、工作或学习需求调整规则,并持续把需要管理的资料加入知识库即可。
摘要
这份文件之所以存在,是因为多数个人知识系统(personal knowledge systems)[1]的失败,并不是源于理念不好,而是源于维护困难。收集很容易,组织很困难,而让五十条相互链接的笔记持续保持更新,是很少有人愿意反复做的工作。这里提出的模式,是把这部分工作转移给模型(model):你负责筛选资料来源并提出问题,智能体(agent)[2]负责归档、链接、总结和协调。全文各节贯穿同一条主线:人类掌握判断权和原始记录,模型负责整理性工作,而维基(wiki)[3]则成为一种可编译、可复利积累的产物,而不是一个不断膨胀的资料堆。

索引词(Index Terms)
由大语言模型维护的知识库(LLM-maintained knowledge bases)[4]、Obsidian(Obsidian)[5]、Claude Code(Claude Code)[6]、Markdown(markdown)[7]、复利式笔记(compounding notes)[8]、检索与编译(retrieval versus compilation)[9]、第二大脑(second brain)[10]。
一、资料来源不可变(Sources Are Immutable)
你保存的所有内容都应进入 raw/[11],并且一旦进入后就不再编辑。文章、访谈记录、PDF、截图:这些都是事实来源(source of truth)[12],其唯一作用就是成为维基构建的依据。如果某个来源存在错误,应当添加一个用于修正的新来源,而不是改写历史。一旦你开始手动编辑原始文件(raw files),系统中就会出现两套记录体系,你也将无法判断哪一套才是真实依据。
二、区分层级(Separate the Layers)
三层结构,对应三个所有者。raw/ 保存不可变的资料来源,归你所有;wiki/[13] 保存生成出来的页面,归模型所有;一个单独的模式文件(schema file)[14],如 CLAUDE.md[15] 或 AGENTS.md[16],保存规则,由你和模型共同维护。不要混淆这些边界。当模型开始写入 raw/,或者你为了“修正”某个结论而手动调整 wiki/,使其符合自己的判断时,支撑整个系统可信性的边界就会消失。
三、模型拥有维基(The Model Owns the Wiki)
你很少需要亲自写维基页面。你的任务是决定哪些内容进入 raw/,提出问题,并进行思考。模型的任务则是人类往往不愿意做的部分:总结、交叉引用(cross-referencing)[17]、归入正确实体(entity)[18]之下,以及在新信息进入时更新相关页面。如果你发现自己正在做这些整理性工作,问题通常不是模型不够好,而是模式文件(schema)规定得还不够具体。
四、编译,而不是检索(Compile, Don't Retrieve)
这不是 RAG(RAG)[19]。RAG 每次回答问题时,都会从原始片段中重新推导答案,但并不积累任何东西。在这里,资料来源会被一次性编译为结构化、相互链接的页面,问题则从这个已经构建好的产物中获得回答。这个类比是成立的:raw/ 是源代码(source code),模型是编译器(compiler)[20],wiki/ 是可执行文件(executable)[21],查询是运行时(runtime)[22]。经过编译的知识能够复利积累;仅靠检索得到的知识则总是在被重新发现。
五、一次只摄入一个来源(Ingest One Source at a Time)
把一个文件放入 raw/,然后让模型摄入(ingest)[23]它。好的摄入并不是简单新增一个页面,而是模型沿着图谱(graph)[24]追踪这一来源的含义,触及每一个会被新事实改变的页面。一个周末把自己的全部数字生活批量导入,只会得到一个资料倾倒场,而不是维基,因为在资料堆尚未成形时,没有任何内容会被真正链接起来。
六、链接一切(Link Everything)
每个页面都应通过维基链接(wikilinks)[25]连接到其他页面,而每一个维基链接都是图谱中一条可见的边(edge)[26]。这正是 Obsidian 成为首选前端(front-end)[27]的原因:图谱视图(graph view)[28]可以显示簇群正在形成、枢纽正在出现,以及哪些孤立页面(orphans)[29]没有被任何页面链接。一个实体如果出现在五个页面中,却没有链接到任何页面,就说明摄入过程过于粗疏。系统的价值在边,而不在节点(nodes)[30]本身。
七、通过索引导航(Navigate by Index)
模型应当通过阅读 index.md[31]、跟随少数相关页面并进行综合来得到答案,而不是把整个资料库(vault)[32]都加载到上下文中。只要索引是诚实、有效的,一个包含上百篇文章和几十万字内容的维基依然可以快速使用。如果模型在每个问题上都以蛮力方式遍历语料库(corpus)[33],就说明索引已经不能反映实际知识版图,需要重新整理。
八、为知识做 Lint 检查(Lint the Knowledge)
应当像对待代码一样对待维基,并定期运行健康检查。让模型找出页面之间的矛盾,暴露低置信度主张(low-confidence claims)[34],列出孤立页面,并标记那些因为拼写差异而漂移成两种写法的实体。矛盾本身是一种信息,而不是一个需要掩盖的错误:它通常意味着两个来源之间存在分歧,而你现在知道该去哪里查证。跳过 Lint(lint)[35],正是维基在图谱看起来仍然漂亮的情况下悄然腐烂的方式。
九、从小开始(Start Small)
从十个来源开始,而不是从一万个来源开始。在增加搜索引擎、复杂的前置元数据(frontmatter)[36]或包含二十条规则的模式文件之前,先让摄入、查询和 Lint 检查变得自然。最初几次摄入需要监督;命名规范会发生变化,早期页面也会比较杂乱,这都是正常现象。一个你会持续投喂的小型维基,胜过一个第三周就被放弃的漂亮架构。
© 2026 A. Karpathy。允许个人使用本材料。本文是对作者关于由大语言模型维护的知识库(LLM-maintained knowledge bases)的工作笔记(llm-wiki.md,v040426)进行的独立重排,整理为会议论文风格文档。本文可自由获取,相关观点会随着模型变化而修订。

脚注
1. **个人知识系统(personal knowledge systems)**:个人用于收集、组织、检索和复用信息的工具与方法体系,常见形态包括笔记库、文献库、卡片盒和知识管理软件。↩︎2. **智能体(agent)**:能够在一定目标和规则下调用工具、执行任务并进行多步骤操作的 AI 系统。↩︎3. **维基(wiki)**:一种由页面和页面之间链接构成的知识组织方式,强调可编辑、可互联和可持续扩展。↩︎4. **由大语言模型维护的知识库(LLM-maintained knowledge bases)**:由大语言模型参与整理、链接、更新和校验的知识库。↩︎5. **Obsidian(Obsidian)**:一款基于本地 Markdown 文件的知识管理与双向链接笔记软件,常用于构建个人知识库。↩︎6. **Claude Code(Claude Code)**:Anthropic 推出的面向编程和代码库操作的 AI 编程辅助工具。↩︎7. **Markdown(markdown)**:一种轻量级标记语言,常用于笔记、文档、README 和静态网站内容写作。↩︎8. **复利式笔记(compounding notes)**:指能够在持续整理、链接和复用中不断提高价值的笔记系统,而不是一次性记录后闲置的信息片段。↩︎9. **检索与编译(retrieval versus compilation)**:这里指两种知识使用方式的区别:检索强调临时从材料中找答案,编译强调把材料预先整理为结构化知识产物,再从中回答问题。↩︎10. **第二大脑(second brain)**:知识管理领域常用概念,指个人外部化的信息存储、组织和复用系统。↩︎11. **`raw/`**:原始资料目录,用于存放未经改写的资料来源。↩︎12. **事实来源(source of truth)**:系统中被视为最权威、最原始的记录依据。↩︎13. **`wiki/`**:由模型生成和维护的知识页面目录。↩︎14. **模式文件(schema file)**:规定知识库结构、命名、实体、链接、摄入流程和质量标准的规则文件。↩︎15. **`CLAUDE.md`**:常见于 Claude Code 工作流中的项目规则文件,用于告诉模型如何理解项目和执行任务。↩︎16. **`AGENTS.md`**:面向 AI 智能体的项目规则文件,通常用于规定工具使用、代码规范、工作流程和知识库维护规则。↩︎17. **交叉引用(cross-referencing)**:在不同页面、实体或资料之间建立相互参照关系。↩︎18. **实体(entity)**:知识库中可被识别和链接的对象,如人物、项目、概念、文件、工具或决策。↩︎19. **RAG(Retrieval-Augmented Generation)**:检索增强生成,即模型先从外部知识库检索相关片段,再基于检索结果生成回答。↩︎20. **编译器(compiler)**:将源代码转换为可执行或中间形式的程序;在本文中是对模型整理知识过程的类比。↩︎21. **可执行文件(executable)**:可以被直接运行的程序文件;在本文中比喻已经结构化、可直接用于回答问题的知识库。↩︎22. **运行时(runtime)**:程序运行时发生的执行过程;在本文中比喻用户提问和系统回答的时刻。↩︎23. **摄入(ingest)**:将新资料导入系统,并由模型进行解析、归档、链接和更新的过程。↩︎24. **图谱(graph)**:由节点和边构成的结构,用于表示知识对象及其关系。↩︎25. **维基链接(wikilinks)**:维基或笔记系统中的内部链接,通常用于连接不同页面。↩︎26. **边(edge)**:图结构中连接两个节点的关系。↩︎27. **前端(front-end)**:用户直接交互的界面或应用层。↩︎28. **图谱视图(graph view)**:将页面或实体及其链接关系可视化为网络图的界面。↩︎29. **孤立页面(orphans)**:没有被其他页面链接,或缺乏有效关联的页面。↩︎30. **节点(nodes)**:图结构中的对象或实体。↩︎31. **`index.md`**:知识库中的索引文件,用于列出关键页面、主题和导航路径。↩︎32. **资料库(vault)**:Obsidian 中用于存放一组 Markdown 文件及其附件的文件夹。↩︎33. **语料库(corpus)**:用于检索、分析或训练的一组文本集合。↩︎34. **低置信度主张(low-confidence claims)**:证据不足、来源不稳定或可能存在矛盾的知识陈述。↩︎35. **Lint(lint)**:源自软件开发的静态检查流程,用于发现格式、结构、引用或一致性问题;在本文中指对知识库进行健康检查。↩︎36. **前置元数据(frontmatter)**:Markdown 文件开头用特定格式记录的元信息,如标题、标签、日期、作者和状态等。↩︎
夜雨聆风