LLM Wiki:让你的文档自己组织成知识库
最近我发现了一个特别有意思的项目,叫 LLM Wiki。说实话,刚开始看到这个名字的时候,我以为又是一个普通的笔记软件。但真正用了一下之后,我发现这东西完全不是我想的那样——它不是让你手动整理笔记,而是让 LLM 自动把你的文档变成一个结构化的、互相链接的知识库。
背景介绍
这个项目来自于 Andrej Karpathy 的一些想法。他之前写过一个关于 LLM Wiki 的设计模式,讲的是怎么用 LLM 来构建个人知识库。但那只是一个理论框架,而 nashsu 这位开发者把这个想法变成了一个完整的跨平台桌面应用。
核心架构:三层设计
LLM Wiki 的核心架构很简单,但很巧妙。它分三层:
-
Raw Sources(原始文件):这是你的 PDF、网页、Markdown 文件,都是不可变的原始材料
-
Wiki(LLM 生成):这是 LLM 根据原始文件自动生成的 wiki 页面
-
Schema(规则配置):这是定义 wiki 如何工作的规则
这三个层之间通过三个核心操作连接:Ingest(摄入)、Query(查询)、Lint(检查)。
最有意思的是,它完全兼容 Obsidian。也就是说,它生成的 wiki 目录可以直接用 Obsidian 打开,作为一个 vault 使用。这就给了你很大的灵活性——你可以用 LLM Wiki 的桌面应用来让 LLM 自动整理,也可以用 Obsidian 来手动编辑。
我最喜欢的几个功能
两步链式思考摄入
这是我觉得最聪明的设计。传统的 RAG 系统每次查询都是从头开始检索,但 LLM Wiki 采用了不同的方式——它先把你的文档”编译”成 wiki,然后保持更新。
具体来说,摄入过程分两步:
第一步(分析):LLM 先读取原始文件,生成结构化的分析,包括关键实体、概念、论点,以及与现有 wiki 内容的连接、矛盾点等。
第二步(生成):基于分析结果,LLM 再生成 wiki 文件,包括源文件摘要、实体页面、概念页面,还有更新 index.md、log.md 等。
这种两步法比单步直接生成质量高太多了。我试了一下,同样一份文档,两步法生成的 wiki 结构更清晰,连接也更合理。
多模态图片摄入
这个功能特别实用。它会从 PDF 中提取图片,然后用视觉 LLM 生成描述性的标题。这些图片会在搜索结果中显示,还支持灯箱预览和跳转到来源。
对于学术研究者来说,这个功能太有用了。论文里的图表、实验结果截图,都能被自动提取和描述,搜索的时候可以直接找到。
四信号知识图谱
LLM Wiki 不只是简单的文本搜索,它还构建了一个知识图谱。最厉害的是,它用了四种信号来计算相关性:
-
直接链接(×3.0):通过 [[wikilink]] 连接的页面
-
来源重叠(×4.0):共享相同原始文件的页面
-
Adamic-Adar(×1.5):共享共同邻居的页面
-
类型亲和(×1.0):相同类型的页面之间有加分
这种多信号设计让知识图谱不只是”谁链接了谁”,而是能发现更深层的关系。比如两个页面虽然没有直接链接,但因为都引用了同一个来源,就会被判定为相关。
Louvain 社区发现
这个功能会自动发现知识聚类。它用的是 Louvain 算法,基于图的拓扑结构自动分组,而不是依赖预定义的页面类型。
这有什么用呢?举个例子,你在研究一个主题,导入了很多不同来源的文档。Louvain 算法会自动发现哪些文档天然形成了一组,即使它们在你的文件夹里是分开存放的。
系统还会计算每个社区的”内聚度”(cohesion),也就是实际连接数和可能连接数的比例。内聚度低的社区会被标记出来,说明这个聚类不够紧密。
图谱洞察
这个功能会自动分析知识图谱,发现”意外连接”和”知识缺口”。
意外连接指的是那些不太可能但确实存在的关系,比如跨社区的边、跨类型的连接。系统会给这些连接一个”惊喜分数”,帮助我发现那些真正有价值的交叉点。
知识缺口则是找出那些孤立的页面(连接数 ≤ 1)或者稀疏的社区(内聚度 < 0.3)。这些可能是我需要补充研究的地方。
最棒的是,点击任何洞察卡片,图谱中对应的节点和边就会高亮显示。如果发现知识缺口,还有一个”深度研究”按钮,可以直接触发研究流程。
深度研究和 Web Clipper
说到深度研究,这个功能也很实用。当 LLM 发现知识缺口时,它可以:
-
自动生成优化过的搜索主题(会读取 overview.md 和 purpose.md 来理解上下文)
-
多查询网络搜索(使用 Tavily API)
-
自动把研究结果摄入到 wiki
整个过程是异步的,不会阻塞其他操作。我可以在研究面板中看到实时进度,最终 LLM 会把发现综合成一个 wiki 研究页面,并自动提取实体和概念。
还有 Chrome Web Clipper,一键捕获网页内容,自动转换为 Markdown 并摄入到 wiki。它用的是 Mozilla Readability.js 来准确提取文章内容,去除广告、导航、侧边栏等干扰信息。
向量语义搜索(可选)
虽然默认的搜索已经很好用了,但如果你需要更精确的语义搜索,可以启用向量搜索。
它支持任何 OpenAI 兼容的 /v1/embeddings 端点,用 LanceDB(Rust 后端)存储嵌入向量,通过余弦相似度找到语义相关的页面。即使没有关键词重叠,也能发现相关内容。
根据项目提供的基准测试,启用向量搜索后,整体召回率从 58.2% 提升到了 71.4%。
但这个功能是完全可选的。默认禁用,需要的时候在设置里启用就行。
持久化摄入队列
这个功能虽然技术性强,但对用户体验影响很大。
摄入过程是串行处理的,防止并发 LLM 调用导致问题。队列会持久化到磁盘,即使应用重启也不会丢失。失败的任务会自动重试最多 3 次。
更重要的是,它使用 SHA256 增量缓存。在摄入前会先计算源文件内容的哈希值,如果文件没变化就跳过。这大大节省了 LLM token 和时间。
Activity Panel 会实时显示进度条,包括待处理、处理中、失败的任务,还有取消和重试按钮。
异步审查系统
这个设计很有意思。LLM 在摄入过程中可以标记需要人类判断的项目,但不会阻塞摄入流程。
审查项目有预定义的动作类型:创建页面、深度研究、跳过。这限制了 LLM 幻觉出任意动作的可能性。
LLM 还会在摄入时生成优化的搜索查询,用户可以在方便的时候处理这些审查项目。
我的真实使用感受
用了一段时间后,我发现 LLM Wiki 最大的价值在于它改变了我和文档的交互方式。
以前我收集文档,就是存文件夹,想找什么的时候全文搜索。但问题是,搜索只能找到关键词,找不到概念和关系。
现在用 LLM Wiki,我导入文档后,LLM 会自动提取实体、概念,建立连接。我在查询的时候,不只是找到包含关键词的文档,而是找到整个知识网络。
举个例子,我在研究”分布式系统”的时候,导入了几十篇论文。LLM Wiki 不只是让我搜索 “consensus” 这样的关键词,它还会自动发现 “Paxos”、”Raft”、”Zab” 这些算法之间的关系,甚至能发现一些我没想到的联系——比如某篇论文里提到的一个优化技巧,其实和另一篇论文里的问题相关。
这种知识图谱的方式,让我的文档库从”死档案”变成了”活知识”。
技术实现细节
对于技术爱好者,这个项目的技术栈也很有意思:
-
跨平台桌面应用:使用 Tauri 构建,比 Electron 更轻量
-
前端:React + TypeScript,使用 Sigma.js + Graphology 实现知识图谱可视化
-
后端:Rust(通过 Tauri),LanceDB 用于向量存储
-
数学支持:KaTeX 渲染 LaTeX 公式,支持 inline ($…$) 和 block ($$…$$)
-
Chrome Extension:Manifest V3,使用 Readability.js 和 Turndown.js
项目是开源的,MIT 许可证。代码质量很高,架构清晰,值得学习。
总结
LLM Wiki 不是另一个笔记软件,而是一个全新的知识管理方式。它的核心思想是:让 LLM 自动构建和更新你的知识库,而不是每次都从零开始检索。
我最喜欢的几个点:
-
两步链式思考摄入,生成的 wiki 质量很高
-
知识图谱不只是可视化,还能主动发现意外连接和知识缺口
-
完全兼容 Obsidian,给了我很高的灵活性
-
深度研究功能可以自动填补知识缺口
-
向量搜索是可选的,不会强制用户依赖昂贵的嵌入 API
当然,它也有一些限制。目前主要支持英文和中文,其他语言的支持可能不够好。另外,需要配置 LLM API(支持 OpenAI 兼容的端点),对于完全不想花钱的用户来说可能有门槛。
但总的来说,如果你有大量文档需要整理,尤其是学术研究者、工程师、或者任何需要处理大量信息的人,LLM Wiki 值得一试。
它改变的不只是你管理文档的方式,更是你思考和使用知识的方式。
项目地址:
https://github.com/nashsu/llm_wiki
开发语言:Rust + TypeScript
开源协议:MIT
夜雨聆风