LLM Wiki
一种使用大语言模型构建个人知识库的模式。
这是一份思路文档,旨在复制粘贴给你的LLM Agent(如OpenAI Codex、Claude Code、OpenCode/Pi等)。它的目标是传达核心思路,你的Agent会和你一起完善具体细节。
核心理念
大多数人使用LLM处理文档的方式是RAG:上传一批文件,LLM在查询时检索相关片段,然后生成答案。这种方式可行,但LLM每次都在从零开始重新发现知识,没有任何积累。如果你提出一个需要综合五份文档的细微问题,LLM每次都要重新寻找并拼凑相关片段,什么也没有沉淀下来。NotebookLM、ChatGPT文件上传以及大多数RAG系统都是这样运作的。
这里的思路截然不同。不是在查询时从原始文档中检索,而是让LLM增量式地构建并维护一个持久化wiki——一套结构化、相互关联的Markdown文件集合,位于你和原始资料之间。当你添加新资料时,LLM不只是为了以后检索而对其建立索引,而是阅读它、提取关键信息,并将其整合进已有的wiki中——更新实体页面、修订主题摘要、标注新数据与旧观点的矛盾之处,不断强化或修正演进中的综合认知。知识只需编译一次,之后持续保持更新,而非每次查询都重新推导。
这就是关键区别:wiki是一个持久化的、不断积累的成果。 交叉引用已经就位,矛盾之处已经标记,综合分析已经涵盖你读过的一切。每添加一份资料、每提一个问题,wiki都会变得更加丰富。
你从来不需要(或极少需要)亲自撰写wiki——LLM负责撰写和维护全部内容。你负责筛选资料、探索方向、提出正确的问题;LLM负责其余所有繁琐工作——摘要、交叉引用、归档整理,以及让知识库真正有用所需的一切日常维护。实际操作中,我会在一侧打开LLM Agent,另一侧打开Obsidian。LLM根据我们的对话进行编辑,我实时浏览结果——点击链接、查看图谱视图、阅读更新后的页面。Obsidian是IDE,LLM是程序员,wiki是代码库。
这个模式适用于许多不同场景,举几个例子:
- 个人成长:追踪自己的目标、健康、心理、自我提升——归档日记、文章、播客笔记,逐步构建一幅关于自己的结构化图景。
- 深度研究:在数周或数月内深入某个课题——阅读论文、文章、报告,持续构建一个附有演进论点的综合性wiki。
- 读书笔记:每读完一章就归档,为人物、主题、情节线索及其关联构建页面。读完之后你将拥有一套丰富的配套wiki。可以参考托尔金门户这样的粉丝wiki——数千个相互关联的页面,涵盖人物、地点、事件、语言,由志愿者社区历经多年构建而成。读书时你完全可以独自构建类似的东西,让LLM完成所有交叉引用和维护工作。
- 企业/团队:由LLM维护的内部wiki,以Slack消息、会议记录、项目文档、客户通话为输入来源,可以有人工审核环节。wiki能保持更新,因为LLM承担了团队中没人愿意做的维护工作。
- 竞品分析、尽职调查、旅行规划、课程笔记、兴趣爱好深耕——任何需要随时间积累知识、希望知识有条有理而非四散零落的场景。
架构
整体分为三层:
原始资料层 — 你精心收集的源文档,包括文章、论文、图片、数据文件。这一层是不可修改的,LLM只读取,从不改动。这是你的事实来源。
Wiki层 — 一个存放LLM生成的Markdown文件的目录,包含摘要、实体页面、概念页面、对比分析、概述和综合性文章。LLM完全拥有这一层:创建页面、在新资料加入时更新页面、维护交叉引用、保持整体一致性。你负责阅读,LLM负责撰写。
Schema层 — 一份文档(如Claude Code的CLAUDE.md或Codex的AGENTS.md),告知LLM wiki的结构规范、约定惯例,以及在摄入资料、回答问题或维护wiki时应遵循的工作流程。这是核心配置文件——正是它让LLM成为一个有条不紊的wiki维护者,而非普通的聊天机器人。随着你摸索出什么方式最有效,你和LLM会共同迭代这份文档。
操作流程
摄入(Ingest)。 你将新资料放入原始集合,告知LLM进行处理。示例流程:LLM阅读资料,与你讨论关键要点,在wiki中撰写摘要页面,更新索引,更新wiki中相关实体和概念页面,并在日志中追加一条记录。一份资料可能涉及10至15个wiki页面的更新。我个人倾向于一次摄入一份资料,并保持全程参与——阅读摘要、检查更新、引导LLM把握重点。当然你也可以减少监督,批量摄入多份资料。具体工作流程因人而异,建议把摸索出来的方法记录在schema中,以便后续会话沿用。
查询(Query)。 你向wiki提问,LLM搜索相关页面、阅读内容,并给出带引用的综合性回答。答案的形式可根据问题灵活选择——Markdown页面、对比表格、Marp幻灯片、matplotlib图表、画布等。重要的洞察:有价值的回答可以作为新页面归档回wiki。 你请求生成的对比分析、见解、发现的关联——这些都有价值,不应该消失在聊天记录里。这样,你的探索过程就能像摄入的资料一样,在知识库中不断积累。
梳理(Lint)。 定期请LLM对wiki进行健康检查,具体包括:检查页面间的矛盾之处、较新资料已经推翻的陈旧内容、没有被其他页面引用的孤立页面、已被提及但缺少独立页面的重要概念、缺失的交叉引用,以及可通过网络搜索填补的数据空白。LLM擅长建议新的研究方向和值得查阅的新资料,有助于随着wiki的增长保持其质量。
索引与日志
两个特殊文件帮助LLM(以及你)在wiki规模扩大后有效导航,各有其用途:
index.md 以内容为导向,是wiki的完整目录——每个页面附有链接、一行摘要,以及可选的元数据(如日期、资料来源数量),按分类组织(实体、概念、资料等)。LLM在每次摄入时更新它。回答查询时,LLM先读取索引找到相关页面,再深入阅读。在中等规模下(约100份资料、数百个页面),这种方式效果出奇地好,无需构建基于嵌入向量的RAG基础设施。
log.md 以时间为导向,是一份追加式记录,记载发生的事情及时间——摄入、查询、梳理操作。一个实用技巧:如果每条记录以固定前缀开头(如## [2026-04-02] ingest | 文章标题),日志就可以用简单的Unix工具解析——grep "^## \[" log.md | tail -5即可显示最近5条记录。日志为你呈现wiki的演进时间线,也帮助LLM了解近期发生了什么。
可选:命令行工具
在某个阶段,你可能需要构建一些小工具,帮助LLM更高效地操作wiki。最显而易见的是wiki页面搜索引擎——在小规模下,索引文件已经足够,但随着wiki增长,你需要真正的搜索功能。qmd是一个不错的选择:它是一款本地Markdown文件搜索引擎,支持BM25/向量混合搜索和LLM重排序,完全在本地运行,提供CLI接口(供LLM调用shell命令)和MCP服务器(供LLM作为原生工具使用)。你也可以自己搭建更简单的方案——LLM可以帮你边用边写一个朴素的搜索脚本。
技巧与建议
- Obsidian Web Clipper 是一款浏览器扩展,可将网络文章转换为Markdown,非常适合快速将资料导入原始集合。
- 本地保存图片。 在Obsidian设置 → 文件与链接中,将”附件文件夹路径”设为固定目录(如
raw/assets/)。然后在设置 → 快捷键中搜索”Download”,找到”下载当前文件的附件”并绑定快捷键(如Ctrl+Shift+D)。剪藏文章后按下快捷键,所有图片即可保存到本地。这是可选步骤,但很实用——它让LLM可以直接查看和引用图片,而不依赖可能失效的URL。注意LLM无法在一次处理中直接读取含内嵌图片的Markdown——变通方法是先让LLM读取文本,再单独查看部分或全部引用图片以获取补充信息。虽然稍显繁琐,但效果足够好。 - Obsidian图谱视图是查看wiki整体结构的最佳方式——哪些页面相互关联,哪些是枢纽节点,哪些是孤立页面,一目了然。
- Marp 是一种基于Markdown的幻灯片格式,Obsidian有对应插件,适合直接从wiki内容生成演示文稿。
- Dataview 是一款Obsidian插件,可对页面前置元数据执行查询。如果LLM在wiki页面中添加YAML前置数据(标签、日期、资料来源数量),Dataview就能生成动态表格和列表。
- wiki本质上就是一个Markdown文件的Git仓库,版本历史、分支管理和协作功能开箱即用。
为什么这种方式有效
维护知识库的繁琐之处不在于阅读或思考,而在于日常的”杂务”:更新交叉引用、保持摘要的时效性、标注新数据与旧观点的矛盾、维护数十个页面的一致性。人们放弃wiki,是因为维护成本的增长速度超过了其带来的价值。LLM不会感到厌倦,不会忘记更新某个交叉引用,而且可以在一次操作中修改15个文件。wiki能持续保持维护,因为维护的成本趋近于零。
人类的工作是筛选资料、指导分析、提出好问题、思考这一切意味着什么。LLM负责其余所有事情。
这个理念在精神上与Vannevar Bush在1945年提出的Memex相呼应——一种个人化的、精心策划的知识存储,文档之间有关联路径可循。Bush的愿景比现有的互联网更接近这里描述的方式:私人的、主动策划的,文档之间的连接与文档本身同等重要。他当年没能解决的问题是:谁来做维护?现在,LLM回答了这个问题。
说明
本文档有意保持抽象,描述的是思路本身,而非具体实现。确切的目录结构、schema约定、页面格式、工具选型——这一切都取决于你的领域、你的偏好和你选用的LLM。上述所有内容均为可选项,模块化设计,取用所需,忽略不需要的部分。例如:你的资料可能只有文字,完全不需要图片处理;你的wiki可能足够小,索引文件就够用,不需要搜索引擎;你可能不在乎幻灯片,只需要Markdown页面;你可能想要一套完全不同的输出格式。正确的使用方式是将本文档分享给你的LLM Agent,共同实例化一个适合自己需求的版本。这份文档唯一的任务是传达这种模式,具体怎么做,你的LLM自会想清楚。