⚠️ 源单薄性声明 本条目主要视角来自花叔一个人(Obsidian-AI 橙皮书 v1.0.0),辅以 Karpathy autoresearch 和 Boris Cherny 访谈的佐证。没有收录”RAG 其实也有优势”的反面视角。 已讲清楚:花叔的三条核心论点、AIBuilder 当前架构与之的张力 还没听到:RAG 阵营对这个观点的直接回应、规模更大时结论是否还成立 本条目视为”一个值得认真对待的反对声音的占位”,不是”RAG 已被证伪”。
为什么这一条对 AIBuilder 特别重要
先说个元信息。AIBuilder 当前架构用的是 AnythingLLM + 向量 RAG + MiniMax(见项目 CLAUDE.md)。而花叔 Obsidian-AI 橙皮书直接挑战这个方向:
“Markdown 是 AI Agent 的原生接口;LLM 应该是编译器而非检索器;一个 CLAUDE.md + 每目录一个 index.md 就做到 80%,不需要复杂 MCP 或 RAG。”
——11-obsidian-ai/README.md 摘录
这不是小分歧,是架构根基上的分歧。所以这条目存在的意义不是”推销花叔观点”,而是把好朋友和陈彬之后要做的决策摆到台面上。
花叔的三条核心洞察
洞察 1:Markdown 是 AI Agent 的原生接口
花叔原话:
“Manus(被 Meta 20亿美元收购)、OpenClaw(35.5万+ stars)、Claude Code 都选了 Markdown 文件存储 AI 的记忆,不是向量数据库。”
逻辑:
- AI agent 输入输出都是文本
- Markdown 是”文本 + 结构”的最小公倍数
- 存向量数据库 = 多一层”序列化-反序列化 + 语义相似度检索”的代价,且不可调试
- 存 Markdown = 用
grep+glob+ LLM 自己读,每一步都是可读文本,可调试
Boris 的佐证(boris-cherny/pragmatic-interview.md):Anthropic 自己内部试过向量库/递归索引,全被 Claude 用 glob+grep 打败——他们放弃了向量方案。
洞察 2:LLM 应该是”编译器”而非”检索器”
花叔原话(基于 Karpathy):
“Karpathy 的核心论点:与其建 RAG 让 LLM 检索你的笔记,不如让 LLM 直接维护你的知识库。在 40 万字规模下验证有效。”
心智模型对比:
| 模式 | 机制 | 比喻 |
|---|---|---|
| RAG | 问问题 → 向量搜相关片段 → 塞给 LLM 生成答案 | 检索员从书堆里找书给你读 |
| LLM-as-compiler | 问问题 → LLM 自己带着知识库结构跑,读它需要读的文件 → 答 | 编译器把源代码跟上下文一起编成答案 |
为什么”编译器”模式可能更好:
- 状态管理:RAG 的 index 会 stale(写新东西没同步索引),编译模式没这问题(LLM 直接读最新文件)
- 关联推理:RAG 搜到的是”语义相似的片段”,编译模式 LLM 能”读 A 文件看到它引用 B → 去读 B”
- 可审计:RAG 的召回结果是黑盒,编译模式的”LLM 读了什么文件”可以完整打印
Karpathy 的佐证(karpathy/autoresearch/other-md/program.md):autoresearch 项目的 40 万字知识库没有用向量库,全靠 Markdown 文件树 + LLM 自己导航。这是强证据。
洞察 3:CLAUDE.md + 每目录 index.md 做到 80%
花叔原话:
“不需要复杂的 MCP 设置。一个 CLAUDE.md + 每个文件夹一个 index.md,就足以让 Claude Code 高效导航整个知识库。”
做法:
- 根目录
CLAUDE.md= 项目总导览 - 每个子目录
index.md= 这个目录内部的导览 - 目录间通过 Markdown 内链(
[[...]]或相对路径)互联 - Claude 进来后先读 CLAUDE.md → 按任务需要点进某目录 → 读 index.md → 按 index.md 指引读具体文件
结果:几乎不用配 MCP、不用建 RAG,知识库也能被高效查阅。
这对 AIBuilder 意味着什么
直接的张力:
- AIBuilder 的 widget 跑的是 AnythingLLM + 向量 RAG
- 花叔说”不需要”
- 两种路线不是”哪个对”,是”哪个更适合 AIBuilder 的具体场景”
场景对比(陈彬要自己判断):
| 维度 | 个人 Obsidian vault | AIBuilder aiwiki |
|---|---|---|
| 用户 | 作者一个人 | 整个社群 |
| 入口 | Obsidian app(用户已经在里面) | 浏览器 + chat widget |
| 跑 agent 的人 | 用户本地 Claude Code | 服务端 AnythingLLM |
| 能不能”让 LLM 直接读目录” | 能(本地 Claude 有文件访问权限) | 不能(好朋友不登你服务器跑 Claude) |
关键分歧点:花叔方案隐含前提是”用户自己在跑 LLM”(Obsidian + 本地 Claude Code)。AIBuilder 的好朋友是”在浏览器访问 wiki + 用 chat widget 问”——他们不在 Claude Code 里。这时候”LLM 作编译器”做不到——后端的 AnythingLLM 实际上扮演的是检索器。
所以合理的架构选择可能是混合:
- Wiki 的撰写 + 维护(陈彬和 AI 学者干的)用”LLM-as-compiler”——直接 Markdown 文件 + Claude Code 跑,不走 RAG
- Wiki 的好朋友问答(widget 后端)才走 RAG——那是第三方”检索员”场景
这个判断还没被验证——需要 T13 AI 学者立项时正式对话这份素材。
什么时候花叔这套不适用
诚实说(花叔自己没直说,但从逻辑推):
- 多租户 SaaS:用户各自的数据,不能让 LLM 直接扫,必须有访问控制 → RAG 的隔离更自然
- 超大规模知识库(百万字以上):LLM 读目录的成本超过向量搜——Karpathy 说 40 万字验证,百万字还没验
- 非 Markdown 数据(PDF/图片/音频):RAG 的多模态 embedding 成熟得多
- 低延迟要求(<500ms 响应):LLM 读文件比向量搜慢
多观点并存(这是架构级分歧,本 wiki 不推单一答案)
本条目的价值不是”给出结论”,是把问题的摆法摆清楚——
“LLM 作编译器 vs 检索器”是知识库架构的根本分歧,两派都有强论据:
花叔 / Karpathy / Boris 这派(本条目主角):
- 场景:个人/小团队知识库、代码库、用户自己在跑 LLM
- 主张:Markdown-first + glob/grep + LLM 直接读目录,不上 RAG
- 证据:Karpathy 40 万字实测、Anthropic 内部放弃向量库、Manus/OpenClaw/Claude Code 全用 md
RAG 派(见 RAG 入门):
- 场景:多用户问答、第三方用户入口(不登你服务器)、大规模长尾知识
- 主张:向量检索 + LLM 生成,成熟稳定
- 证据:AnythingLLM / LlamaIndex / Pinecone 等生产级案例
AIBuilder 本项目的选择(不是推荐):
- 读侧(好朋友 widget 问答):用 RAG——好朋友在浏览器里,不可能登服务器跑 Claude Code,后端必须有检索层
- 写侧(陈彬 + AI 学者维护 wiki):用 LLM-as-compiler——陈彬自己在 Claude Code 里跑,Markdown 直接读目录更准
这不是”哪个对”,是”哪条路径匹配你的入口形态”——读者按自己场景判断。T13(AI 学者立项)时 AIBuilder 会正式对话这份素材做实测。
给好朋友的判断提示(不是建议,是问题)
想知道你的场景该用哪派?问自己两个问题:
-
用户在不在你的 LLM 环境里?
- 在(比如你自己用 Obsidian + 本地 Claude Code)→ 花叔这派够
- 不在(比如好朋友通过 chat widget 访问)→ 需要 RAG 这种”代理检索”层
-
知识库规模多大?
- < 40 万字且结构清晰 → 花叔这派已验证
- > 40 万字或含非结构化数据 → 未被验证,两派都有赌注
花叔橙皮书本身值得认真读——它没有”卖 RAG”的利益冲突,论点硬。但不等于你必须照抄——看你的入口形态。
关联
- 紧邻:花叔橙皮书是什么(本条目是橙皮书 11 的观点提取)
- 紧邻:RAG 入门(本条目直接质疑 RAG 的适用边界)
- 紧邻:Karpathy 的 program.md 方法论(花叔引用的底层论据)
- 紧邻:案例_Boris 怎么用 Claude Code(tip 9:glob+grep 胜过 RAG 的 Anthropic 佐证)
needs_sources(明确待补)
- RAG 阵营的直接回应
- 超大规模(>40 万字)的实测
- AIBuilder 自身的 T13 实验结论