LLM Wiki 深度解读与接入指南

LLM Wiki 深度解读与接入指南

围绕一个常见误解展开:llmwiki 不是"提前把文档解析成 wiki"的 RAG,而是把 LLM 当成 wiki 编辑员的脚手架。本文先讲清楚架构,再说怎么把它当知识库接到 Claude Code 这类 agent 上替代 RAG。


1. 先纠正一个普遍误解

很多人初看 llmwiki 会以为它的工作模式是:

"把文档解析成 wiki → 下次再来搜索"

这句里有两个动作被无意识合并了。项目实际上把它们拆成了两套独立的子系统:

你以为的一个动作 项目里实际上的两个动作
"把文档解析成 wiki" ① 把文档解析成搜索索引 (自动、机械) ② 由 LLM 撰写出 wiki 页面(人工、编辑)

llmwiki 确实有"提前解析" ,但解析的产物不是 wiki ,而是给 search 工具用的全文索引。真正的 wiki 是 Claude 后续一篇篇手写的 markdown。


2. 两层架构

第一层:自动解析(不经过 LLM)

完全在后台运行,FastAPI + 文件监听器干的活:

复制代码
你扔进 workspace/ 的 paper.pdf
        ↓ pdf-oxide / Mistral / openpyxl 等解析器
documents 表里存原文 + document_pages(按页)
        ↓ services/chunker.py 切片
document_chunks 表(带 header_breadcrumb / page 号)
        ↓ FTS5 自动 trigger
chunks_fts 全文索引(porter stemming)

参考代码:shared/sqlite_schema.sql

设计上这层被刻意降级成"派生状态"------README 反复强调 "filesystem is the source of truth, SQLite is derived index" ,删了能重建(./llmwiki reindex)。

这一层是你脑子里"提前解析"那部分,只是输出形态是 SQLite,不是 markdown。

第二层:Claude 用 5 个工具"编辑" wiki

Karpathy 设计的精髓不是"AI 自动总结一切",而是 「LLM as a wiki editor」------把 LLM 当成一个有手有眼能改文件的维基编辑员。

5 个 MCP 工具的本质就是给 Claude 配齐"编辑员的工具箱":

工具 类比
guide 入职须知(告诉它 wiki 的结构、写作规范、引用格式)
search 翻阅资料柜(FTS5 关键词 + 引用图查询)
read 读具体那本书的第 3--7 页
write /wiki/concepts/xxx.md 落笔,含 frontmatter / mermaid / 脚注引用
delete 清理过时页面

最关键的是 guide 工具返回的指令体(mcp/tools/guide.py),它强制要求 Claude:

  • 必须更新 overview.md(hub 页)和 log.md(行为日志)
  • 写到 /wiki/concepts/(抽象概念)和 /wiki/entities/(具体实体)两个目录
  • 每页必须有 YAML frontmatter、mermaid/表格、[^1]: paper.pdf, p.12 这种脚注引用
  • 每次 write 之后自动解析出引用图(document_references 表),下次 read 能看到 "Referenced by"

完整数据流

复制代码
你的 PDF/MD/Excel
        │
        ▼  [自动后台]
┌─────────────────────┐
│ pdf-oxide / chunker │  ← 这是 "提前解析",但只是建搜索索引
│ → SQLite FTS5       │
└──────────┬──────────┘
           │
           │  ┌────────────────────────────────────────┐
           │  │ 你跟 Claude 说:"读 papers/ 写综述"     │
           │  └─────────────────┬──────────────────────┘
           │                    │
           ▼                    ▼
   ┌──────────────────────────────────────┐
   │  Claude(通过 MCP 调 5 个工具)        │
   │  ┌────────┐ ┌──────┐ ┌──────┐         │
   │  │ guide  │→│search│→│ read │ ← FTS5  │
   │  └────────┘ └──────┘ └──────┘         │
   │                          ↓ 思考       │
   │                       ┌──────┐        │
   │                       │write │ → /wiki/concepts/attention.md
   │                       └──────┘        │
   └──────────────────────────────────────┘
                              │
                              ▼
                  ┌────────────────────┐
                  │  /wiki/*.md         │ ← **这才是 wiki**
                  │  (Claude 撰写的)   │
                  └────────────────────┘

3. 为什么 Karpathy 要这么设计

直觉模型:"文档进来 → AI 自动总结成 wiki → 之后查 wiki"------这是 RAG / 自动摘要范式。

Karpathy 的反范式------不要预先全量总结,理由三点:

  1. 预生成会变质:你今天没问的问题,AI 总结的角度大概率不是你明天关心的方向。预总结 = 浪费 token + 大概率重写。
  2. wiki 的价值在交叉引用 :单篇 PDF 自动摘要不难,难的是 "这篇里讲的 attention 和上周那篇里讲的 attention 对应同一个 entity 页吗?要不要修 5 个交叉链接?" ------ 这才是 wiki 的真正成本,按需增量维护才合算。
  3. LLM 是个编辑员,不是个 batch job :你和 Claude 对话提了一个问题 → 它调 search/read → 思考 → 觉得这个洞察值得沉淀 → write 成一篇 wiki 页 → 顺手更新 overview + log。wiki 是对话的副产品,不是预处理产物。

所以 5 个工具就够了:

  • 解析/索引是后台基础设施(不需要给 LLM)
  • 智能(理解、组织、写作)来自 LLM 自己
  • wiki 的存储是 markdown 文件(不需要数据库 API)

中文 README 那句 "LLM Wiki 本身不调用任何 LLM" 就是这个意思------这个项目本身是给 LLM 用的脚手架,不是个会自己总结的 AI 产品。


4. 把 llmwiki 当知识库接到 Agent(替代 RAG)

llmwiki 暴露给外部的接入口有 3 个层级:

层级 协议 文件 典型客户端
① stdio MCP MCP over stdin/stdout mcp/local_server.py Claude Desktop / Code / Cursor / Cline
② Streamable HTTP MCP MCP over HTTP(Supabase token 鉴权) mcp/hosted.py 任何 MCP HTTP client / 远程 agent
③ FastAPI REST 普通 HTTP(Web 前端用的,没有官方对外承诺) api/routes/*.py hack 兜底

90% 场景应该走 ① 或 ②。

4.1 整体流程(Claude Code 本机场景)

复制代码
┌──────────────────────────────────────────────────────────────┐
│ 一次性:把 llmwiki 注册为 Claude Code 的 MCP 服务            │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────┐
│ 每次开会话:第一句话定调(让它读 guide)                       │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
        ┌─────────────────────┴─────────────────────┐
        ▼                                            ▼
  「冷启动期」                                  「稳态期」
  你说:"读这批 PDF,写 wiki"               你说:"X 是什么 / Y 怎么做"
  Claude: search → read → write              Claude: search → read
  产出: wiki/concepts/*.md                      命中: 已写好的 wiki 页
                                              (这一步才真正替代 RAG)

4.2 Step 1 --- 注册 MCP(一次性)

bash 复制代码
cd /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki

./llmwiki init ./demo-workspace

claude mcp add llmwiki-demo \
  /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki/llmwiki \
  mcp /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki/demo-workspace

claude mcp list      # 验证能看到 llmwiki-demo

demo-workspace/ 扔 PDF/MD/Excel,文件监听器会自动建索引(这一步在后台,不经 Claude)。

Cursor 配 ~/.cursor/mcp.json;Claude Desktop 跑 ./llmwiki mcp-config ./demo-workspace 拿 JSON 片段。

4.3 Step 2 --- 会话第一句话(定调)

这一步最关键,决定 agent 走"RAG-like 查询模式"还是"维基编辑模式":

想要的行为 第一句话模板
用知识库回答问题(替代 RAG) "Use the llmwiki-demo MCP. Call guide first, then answer my questions by searching the wiki first, falling back to source documents only if the wiki is incomplete."
边查边沉淀(冷启动建库) "Use llmwiki-demo. Call guide, then ingest the PDFs in papers/: read them, write concept and entity pages under /wiki/, update overview and log."
维护已有 wiki(lint) "Use llmwiki-demo. Call guide, then run a lint pass: find uncited sources, stale pages, missing cross-references."

为什么强调 "Call guide first"guide 工具会把 188 行的工作流指令灌进 Claude 的上下文(包括 frontmatter 格式、引用规范、必须更新 overview/log 等)。不调 guide,行为会退化成普通 grep + 写 markdown。

4.4 实际跑起来长什么样

你说:"总结一下这几篇论文的核心贡献,建个 attention 概念页。"

Claude 内部自动走链:

复制代码
1. guide()                                          → 拿到工作流规范
2. search(mode="list", path="/papers/**")           → 看有哪些文件
3. read(path="papers/attention.pdf", pages="1-5")  → 读摘要
4. read(path="papers/attention.pdf", pages="6-15") → 读细节
5. read(path="papers/scaling.pdf", pages="1-3")
6. ... 迭代 ...
7. write(path="/wiki/concepts/", title="attention.md",
        content="---\ntitle: Attention\n...\n---\n\n## 概念...\n[^1]: attention.pdf, p.3")
8. write(path="/wiki/log.md", append=True,
        content="## [2026-05-23] ingest | Transformer papers ...")
9. write(path="/wiki/overview.md", str_replace=...) → 更新源数量

下次问 "什么是 multi-head attention" ------它会先 search(mode="search", path="/wiki/**", query="multi-head") 命中你上一轮 Claude 自己写的 attention.md,直接给你引用了脚注的精炼答案。这就是 llmwiki 替代 RAG 的关键时刻。

4.5 "边查边写"的两个循环与写入语义

命名说明:前文为简洁把写操作统称 write。实际 MCP 把"写"拆成三个独立原语------create(新建页)、edit(页内精确查找替换)、append(页尾追加),再加 delete。下面用真实工具名。

llmwiki 的日常使用,就是两个循环在交替转:

循环 A --- Ingest(你加新源 → Claude 写)

复制代码
read(新源)
   ↓ 和你确认要点
create/edit  /wiki/concepts/*.md    (抽象概念页)
create/edit  /wiki/entities/*.md    (具体实体页)
edit         /wiki/overview.md       (更新源数量 + 关键发现)
append       /wiki/log.md            (记一条 ingest)

一个源通常牵动 5--15 个页面 :新建几页 + 回改受它影响的旧页。这正是 §3 说的"wiki 的真正成本在交叉引用维护"。

循环 B --- Q&A(你提问 → Claude 边查边补)

复制代码
search(mode="search", path="/wiki/**", query=...)   ← 先查已沉淀的 wiki
   ├─ 命中且够用 → 直接答(带脚注)
   └─ 没命中 / 不全 → read 原始源补齐
                       ↓ 若是值得留存的新结论
                    create  /wiki/concepts/新页.md   ← 答完顺手落盘
                    append  /wiki/log.md(记一条 query)

关键在最后一步:答完把新洞察沉淀回 wiki,下次同类问题直接命中 wiki、不再翻原文------这就是 §5 "retrieve-generate-curate-recall" 复利的落地动作。

写入语义(避免误解:写 ≠ 重新生成整个 wiki)

性质 说明
落盘对象 只写 /wiki/*.md(真实文件,先写盘再更新索引);根目录 / 下的源只读、永不被改
粒度 按页增量 。一次 Q&A 可能只 edit 一页 + append 一条 log,其余页原样不动
不覆盖 create 命中已存在的页会被拒绝 ,需显式 overwrite=true 才整页推翻;edit / append 都是局部改
一致性 每次写完,返回里会列出"哪些页引用了刚改的页",据此回改 → 配合 search(mode="references") 查引用图

实战提示 :本地是 FTS5 关键词搜索,中文长 query 命中差。例如查 积分 不足 充值 可能 0 命中 ,拆成 积分 反而命中 7 条 (同时命中已写好的 concepts/credits-and-billing.md 整合页 + 原始 FAQ 汇总.md)。查 wiki 优先于查源,是这套模式省 token 的关键。


5. 和传统 RAG 的本质差异

阶段 传统 RAG llmwiki 模式
检索决策权 检索器(用户 query 直接 embedding) agent (Claude 决定查 /wiki/** 还是 /、关键词怎么拆、迭代几次)
检索粒度 top-k chunk(500 tokens 一坨原文) 先看 wiki 概要页 → 不够再 read 原 PDF 指定 page 范围
检索算法 向量相似度 SQLite FTS5(porter stemming 关键词)
命中的是什么 原始 chunk(上下文可能支离破碎) Claude 之前写过的整合页 + 脚注回原 PDF 页码
复用成本 每次问都重跑 retrieval 答过的问题沉淀成 wiki,下次直接命中
写入回路 没有(只读) 有,agent 答完顺手把新洞察落盘

范式差异 :传统 RAG 是 「retrieve-then-generate」一次性的 ;llmwiki 是 「retrieve-generate-curate-recall」长期复利的

tools/search.py 里 mode 选项是 list / search / references------没有自动语义检索 。这是有意为之:检索策略让 LLM 自己决定,而不是预先 embedding 兜底。


6. 必须注意的 4 个坑

  1. FTS5 是关键词搜索,不是向量搜索。 中文用 porter 分词(按空格/标点切),中文长 query 命中率比英文差。需要语义搜索则走 hosted 模式(PGroonga)或自己接 voyage/turbopuffer,本地默认没有。

  2. 冷启动很慢,要先建一轮 wiki。 第一次接入空 workspace 时 agent 没东西可查;让它先做一次 "ingest" 把核心资料写成 wiki 再切到查询模式,复利才会启动。

  3. 每个 workspace 一个 MCP 条目。 不要把所有项目堆在同一个文件夹下让 Claude 自己挑------会污染上下文。一个研究主题 = 一个 llmwiki init + 一个 claude mcp add

  4. agent 的 tool-call 是花 token 的。 平均一次回答会调 3--8 次工具,相比 RAG 的"一次性塞 chunk"成本更高,但换来 wiki 沉淀。所以 适合长期项目 (反复回到同一批资料),不适合一次性问答(那种场景纯 RAG 更便宜)。


7. 可直接复制的开工模板

bash 复制代码
# 0. 进入仓库根
cd /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki

# 1. 建库
./llmwiki init ./demo-workspace

# 2. 把资料拖进 demo-workspace/(任意子目录)

# 3. 注册到 Claude Code
claude mcp add llmwiki-demo \
  /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki/llmwiki \
  mcp /Users/caicongyang/IdeaProjects/github/hackthon/llmwiki/demo-workspace

# 4. 启 Web 看效果(可选)
./llmwiki serve ./demo-workspace &

进入 Claude Code 会话,第一句:

Use the llmwiki-demo MCP server. Call guide first.

Phase 1 (ingest) : read all PDFs/MDs under papers/, create concept pages under /wiki/concepts/ and entity pages under /wiki/entities/, update /wiki/overview.md and append to /wiki/log.md per the guide.

Phase 2 (Q&A) : when I ask questions, search /wiki/** first, only fall back to raw sources if the wiki is incomplete; if you find a new insight worth keeping, write it as a new wiki page before answering.

这套提示词进去之后,Claude Code 这个 agent 就把 llmwiki 当成自己的长期记忆 + 检索器了,行为上就是"知识库替代 RAG"。


8. 一句话总结

  • 架构本质 :两段独立的事------① 解析→FTS5 索引(机械、预先、给 search 用) ② Claude 边对话边写 → wiki/*.md(增量、按需、LLM 当编辑员)。
  • Karpathy 的精髓LLM 是 wiki 的作者,不是 wiki 的运行时 。所以暴露的是 guide/search/read/write/delete 这 5 个文件编辑级原语,而不是 generate_wiki_from_folder() 黑盒。
  • 替代 RAG 的方式 :把 llmwiki 注册成 MCP server,agent 自己用 search/read 拉知识,自己用 write 把答案沉淀回 wiki,用复利换 token 成本
相关推荐
Mr.Daozhi20 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
Mr. zhihao1 天前
BM25 混合检索详解:为什么向量检索不够,还要加一个关键词检索
python·rag·bm25
虾..1 天前
大模型认识
人工智能·llm·rag
亦暖筑序2 天前
GraphRAG vs 传统向量RAG:Spring AI实战对比
知识图谱·neo4j·向量数据库·rag·spring ai·graphrag
染指11102 天前
12.LangChain框架4-输出解释器
人工智能·langchain·rag
SLD_Allen2 天前
RAG三大主流架构:Classic RAG、Graph RAG、Agentic RAG的区别
架构·rag·agentic rag·classic rag·graph rag
2601_957882242 天前
多模态RAG与视觉红利:GEO(生成式引擎优化)中的图片与视频资产重构策略
重构·音视频·geo·rag·多模态模型
小当家.1053 天前
PostgreSQL 做向量数据库:pgvector 在 RAG 中的实战与多场景适配
数据库·人工智能·postgresql·rag
jiayong233 天前
RAG系列(三):实践案例与高级优化
ai·架构·rag·智能体