IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

我把775篇收藏塞进4MB向量库:一个比Karpathy Wiki更能"翻箱底"的RAG skill

鸟窝 2026-06-30 00:40:48 累计浏览 5 次
本机暂存
<p>我把 775 篇收藏的文章塞进一个 4MB 的向量库,然后问它:&quot;我都收藏过哪些关于 loop engineering 的资料?&quot;三秒钟,它把散在六七篇文章里的观点拼成一段答案,每条都带出处。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629054807094.png" class=""><p>这不是什么 SaaS 产品,是我自己写的一个 skill,叫 <code>chao-rag-wiki</code>。今天聊聊它,顺便聊聊它背后那个问题:知识库越攒越大,你到底怎么&quot;读&quot;它?</p><p>得先从 Karpathy 的一个想法说起。</p><hr><span id="more"></span><h2 id="一、Karpathy-的-LLM-Wiki-:让-AI-替你维护知识库"><a href="#一、Karpathy-的-LLM-Wiki-:让-AI-替你维护知识库" class="headerlink" title="一、Karpathy 的&quot;LLM Wiki&quot;:让 AI 替你维护知识库"></a>一、Karpathy 的&quot;LLM Wiki&quot;:让 AI 替你维护知识库</h2><p>起点是 Andrej Karpathy 抛出的一句话:</p><blockquote><p>&quot;The LLM writes and maintains the wiki; the human reads and asks questions.&quot;<br>(LLM 负责写和维护 wiki,人类负责读和提问。)</p></blockquote><p>有人把这句话做成了一个 skill —— <code>karpathy-llm-wiki</code>。玩法是这样:</p><p>你有两个目录。<code>raw/</code> 放原始素材,只读、永不修改——收藏的推文、文章、论文都丢这里。<code>wiki/</code> 放编译后的知识文章,AI 全权打理。</p><p>每往 <code>raw/</code> 加一篇新素材,AI 就把它&quot;编译&quot;进 wiki:判断这篇属于哪个已有主题,跟某篇是同一个核心论点就合并进去、更新段落,全新概念就新建一篇,顺便检查跟已有内容有没有冲突、有就标出来。最后维护一个 <code>wiki/index.md</code> 全局索引,每篇一行——链接、摘要、更新日期。</p><p>你查询的时候(&quot;我知道哪些关于 X 的东西?&quot;),AI 先读 index.md 定位到相关文章,打开那几篇,再综合作答。</p><p>这个设计很优雅,本质是用 AI 把碎片素材沉淀成结构化的知识资产,而且会随时间复利增长。读起来像一本你自己的、不断长大的百科全书。</p><p>但它有个隐含前提:素材得先被&quot;编译&quot;进 wiki,才搜得到。下面这个 skill,想绕开的就是这件事。</p><hr><h2 id="二、chao-rag-wiki:不编译,直接检索"><a href="#二、chao-rag-wiki:不编译,直接检索" class="headerlink" title="二、chao-rag-wiki:不编译,直接检索"></a>二、chao-rag-wiki:不编译,直接检索</h2><p>我借了 <code>karpathy-llm-wiki</code> 的&quot;raw&#x2F; 只读&quot;哲学,但把后半段换成了 RAG(检索增强生成)。</p><p>一句话说清区别:<strong>karpathy-llm-wiki 是先把书写好再去翻书;chao-rag-wiki 是书原样不动,但给每一页都建了语义索引,随问随搜。</strong></p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629054948985.png" class=""><p>技术栈是这么几块拼的:</p><p><strong>1. 向量检索用 <a href="https://github.com/RyanCodrai/turbovec">turbovec</a>。</strong> Google Research 的 TurboQuant 算法的 Rust 实现,能把向量压 16 倍还几乎不掉精度——上一篇我专门拆过。我的 775 篇切成 9089 个 chunk(去重后),整个索引才 4.8MB,常驻内存毫无压力。</p><p><strong>2. 嵌入默认使用千帆的 bge-large-zh(1024 维),但接口跟 provider 无关。</strong> 想换 OpenAI、Voyage 或本地模型都行,只改环境变量,不动代码。key 全走环境变量,绝不硬编码。</p><p><strong>3. 混合检索(Hybrid RAG),这是关键。</strong> 同时跑两路:稠密向量检索管语义,知道&quot;自我迭代&quot;和&quot;循环&quot;是一回事;BM25 关键词检索管字面,能精确命中 <code>rotate_writer.go</code> 这种代码标识符、人名、专有词。两路结果用 RRF(Reciprocal Rank Fusion,倒数排名融合)合并。语义检索擅长&quot;意思对但用词不同&quot;,关键词检索擅长&quot;就要这个词&quot;,融合之后两头都不漏。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629055149668.png" class=""><p><strong>4. 可选的 LLM 重排(rerank)。</strong> 检索快但粗,再拉一个 LLM 当&quot;相关性裁判&quot;给候选打分重排,精度优先时加 <code>--rerank</code> 就行。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629055320393.png" class=""><p><strong>5. 建索引时按 chunk 文本哈希去重。</strong> <code>raw/</code> 里同一段内容存了多份副本的话,只留一份进库,免得副本在结果里挤名额——我这 775 篇就压掉了 706 个重复 chunk。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629055449657.png" class=""><h3 id="优缺点摆出来"><a href="#优缺点摆出来" class="headerlink" title="优缺点摆出来"></a>优缺点摆出来</h3><p>先说好的:</p><ul><li><p>零编译延迟。新素材丢进 <code>raw/</code>,跑一句增量索引就搜得到,不用 AI 逐篇消化。而且增量索引按内容哈希只处理新增和改动的文件,没变化就几秒退出。</p></li><li><p>召回更全。它检索的是原始全文的每个片段。哪怕某个话题你压根没想过给它单独建篇文章,只要素材里提过,就搜得到。</p></li><li><p>混合检索加重排加去重,对中英混排、专有名词、长尾问题都更稳。同一段内容在 <code>raw/</code> 里有多份副本,建索引时按 chunk 文本哈希自动合并,结果不会被副本占名额——但保留&quot;另见 N 份副本&quot;的来源信息,去重不丢信息。</p></li></ul><p>再说差的,这些恰好是 <code>karpathy-llm-wiki</code> 的强项:</p><ul><li><p>它没有知识沉淀,给你的是原文片段拼盘,不是一篇消化过、把内部矛盾理顺了的文章。<code>karpathy-llm-wiki</code> 那边的 wiki 文章是真正的二次创作,读起来成体系。</p></li><li><p>它只能精确去重。逐字相同的副本能干净合并,但&quot;同一篇、有细微编辑差异&quot;的近似重复就认不出来了——那得上 MinHash 或 SimHash,复杂得多。</p></li><li><p>它依赖在线 embedding,查询要联网(或者本地部署的大模型)、有 API 成本(BM25 那一路不用)。</p></li></ul><p>说白了,<code>karpathy-llm-wiki</code> 重&quot;沉淀&quot;,<code>chao-rag-wiki</code> 重&quot;召回&quot;。前者像精心整理的笔记本,后者像一个全文搜索引擎。</p><hr><h2 id="三、实战对比:两个查询"><a href="#三、实战对比:两个查询" class="headerlink" title="三、实战对比:两个查询"></a>三、实战对比:两个查询</h2><p>光说不练假把式。同样两个问题,两个 skill 各跑一遍。</p><p>自从 Karpathy的llm-wiki理念提出来之后,我收集资料的时候特意使用Obsidian web clipper进行收集,最近几个月也收集了700多篇资料,也在Hermes中建立了llm-wiki,这次我使用<code>chao-rag-wiki</code> 建立了RAG索引,让我们比较一下这两个skill搜索资料的效果。</p><h3 id="查询一:-loop-engineering"><a href="#查询一:-loop-engineering" class="headerlink" title="查询一:&quot;loop engineering&quot;"></a>查询一:&quot;loop engineering&quot;</h3><p><code>chao-rag-wiki</code>(hybrid + rerank)召回了散在多篇原文里的片段:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[1] rerank=8.0 PART 2: WHAT LOOP ENGINEERING ACTUALLY IS</span><br><span class="line"> articles/...Loops What Every AI Engineer Needs to Know in 2026.md</span><br><span class="line">[2] rerank=7.0 工程化的三个层次</span><br><span class="line"> articles/...深度拆解:AI 智能体 Harness 的构造.md</span><br><span class="line">[3] rerank=7.0 Most Developers Do Not Need Agent Loops Yet</span><br><span class="line">[4] rerank=7.0 Agent Harness 拆解:AI Agent 真正的工程底座</span><br><span class="line">[5] rerank=6.0 &gt; I don&#x27;t talk to an agent anymore, I talk to a loop</span><br></pre></td></tr></table></figure><p>它直接定位到讲 loop engineering 五阶段(DISCOVER→PLAN→EXECUTE→VERIFY→ITERATE)的原文段落,连&quot;大多数开发者其实还不需要 loop&quot;这种唱反调的视角也捞了出来——因为那篇文章确实在我素材里。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629060619850.png" class=""><p><code>karpathy-llm-wiki</code> 呢?它在 <code>wiki/index.md</code> 里一搜就命中一篇编译好的文章:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">| Loop Engineering: 从提示 Agent 到设计循环 | 2026 年 6 月爆发的 AI 编程</span><br><span class="line"> 新范式:五个原语(Automations/Worktrees/Skills/Connectors/Sub-agents)</span><br><span class="line"> +状态记忆,四条件测试,最小可行 Loop,刹车配置与四种死法 | 2026-06-24 |</span><br></pre></td></tr></table></figure><p>打开是一份消化整合过的结构化笔记:核心定义、Boris Cherny 的三阶段演化、五个必需品表格、引用了 8 个来源,读起来一气呵成。</p><p>这一局 <code>karpathy-llm-wiki</code> 赢在成品质量。loop engineering 是热门话题,我早让它编译过一篇。<code>chao-rag-wiki</code> 给的是原料,它给的是成菜。</p><h3 id="查询二:-grill-skill"><a href="#查询二:-grill-skill" class="headerlink" title="查询二:&quot;grill skill&quot;"></a>查询二:&quot;grill skill&quot;</h3><p>这局反过来了。</p><p><code>chao-rag-wiki</code>(hybrid + rerank):</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[1] rerank/score Mattpocock Skills 系统:AI Agent 的能力单元 › SKILL.md 的文件结构</span><br><span class="line"> sources/AI时代的程序员/02 Mattpocock Skills系统.md</span><br><span class="line">[2] Productivity Skills</span><br><span class="line"> sources/AI时代的程序员/《AI时代的软件工程》-图书大纲.md</span><br><span class="line">[3] skill_manage 操作分发 (+1 dup copies)</span><br><span class="line"> articles/2026-04-12 -Hermes Agent 源码解析.md</span><br><span class="line">[5] Productivity —— grill-me / caveman / handoff...</span><br><span class="line"> articles/...mattpocock skills Skills for Real Engineers.md › #1: The Agent Didn&#x27;t Do What I Want</span><br></pre></td></tr></table></figure><p>干净命中 mattpocock 技能库里 <code>grill-me</code>、<code>grill-with-docs</code> 的介绍——&quot;写代码前先让 AI 反过来拷问你&quot;。注意第 3 条后面那个 <code>(+1 dup copies)</code>:去重把那篇的副本合并成一条、留了来源标记,没让重复内容占掉好几个名额。</p><p><code>karpathy-llm-wiki</code> 呢?我去 <code>wiki/index.md</code> 里搜 &quot;grill&quot;、&quot;mattpocock&quot;、&quot;拷问&quot;……</p><p>一条都没有。</p><p>不是说我素材里没有 grill 相关内容——有,好几篇正文都提了 <code>/grill-me</code>。问题是这个话题从没被单独编译成一篇 wiki 文章,index.md 里就没它的入口。按 karpathy-wiki &quot;先读 index 再定位文章&quot;的路子,它要么直接漏掉这个查询,要么只能模糊地甩你一篇泛泛的&quot;agent skills 框架&quot;。</p><p>这一局 <code>chao-rag-wiki</code> 完胜。它检索全文,根本不在乎你立没立过条目。</p><hr><h2 id="四、所以到底用哪个?"><a href="#四、所以到底用哪个?" class="headerlink" title="四、所以到底用哪个?"></a>四、所以到底用哪个?</h2><p>两个查询跑下来,结论挺清楚:它俩不是替代关系,是互补关系。</p><table><thead><tr><th></th><th>karpathy-llm-wiki</th><th>chao-rag-wiki</th></tr></thead><tbody><tr><td>核心机制</td><td>AI 编译素材成文章</td><td>RAG 全文语义检索</td></tr><tr><td>查询方式</td><td>读 index → 定位文章</td><td>向量+BM25 混合检索+重排</td></tr><tr><td>强项</td><td>热门话题、成体系的沉淀</td><td>全量召回、长尾话题、专有名词</td></tr><tr><td>弱项</td><td>没编译过的话题会漏</td><td>给原料而非成品、只能精确去重</td></tr><tr><td>延迟</td><td>编译慢、查询快</td><td>索引快、查询需联网</td></tr><tr><td>想读一篇消化好的总结,问 <code>karpathy-llm-wiki</code>;想确认&quot;我到底收藏过啥&quot;、找长尾、找冷门词,用 <code>chao-rag-wiki</code>。</td><td></td><td></td></tr></tbody></table><p>我现在就是这么用的:<code>chao-rag-wiki</code> 当全文搜索引擎兜底召回,<code>karpathy-llm-wiki</code> 当精编笔记本沉淀热点。一个保证不漏,一个保证好读。</p><hr><h2 id="五、把它接进-Obsidian:从-看到-到-可搜"><a href="#五、把它接进-Obsidian:从-看到-到-可搜" class="headerlink" title="五、把它接进 Obsidian:从&quot;看到&quot;到&quot;可搜&quot;"></a>五、把它接进 Obsidian:从&quot;看到&quot;到&quot;可搜&quot;</h2><p>前面讲的都是 skill 本身。可知识库要真转起来,得先解决一个更前面的问题:素材怎么进来?总不能每篇手动复制粘贴。</p><p>我这套链路全自动,分三段。</p><h3 id="第一段:Web-Clipper-抓取,落到-raw"><a href="#第一段:Web-Clipper-抓取,落到-raw" class="headerlink" title="第一段:Web Clipper 抓取,落到 raw/"></a>第一段:Web Clipper 抓取,落到 <code>raw/</code></h3><p><a href="https://obsidian.md/clipper">Obsidian Web Clipper</a> 是官方的浏览器插件,Chrome、Edge、Firefox 都有。看到一篇好文章、一条推文,点一下插件图标,它就把正文提取成干净的 Markdown,存进你的 Obsidian vault。</p><p>它能配模板和保存路径,这是关键。我把模板的目标文件夹设成 vault 里的 <code>raw/articles/</code>,文件名用 <code>&#123;&#123;date&#125;&#125; -&#123;&#123;author&#125;&#125;-&#123;&#123;title&#125;&#125;</code>,再让它自动带上来源 URL、抓取日期这些 frontmatter。于是浏览中随手一点,文章就躺进了 <code>raw/</code>——正好是两个 skill 都约定&quot;只读、不改&quot;的那个源目录。我那 775 篇,基本就是这么攒的。</p><h3 id="第二段:定时任务自动索引"><a href="#第二段:定时任务自动索引" class="headerlink" title="第二段:定时任务自动索引"></a>第二段:定时任务自动索引</h3><p>素材进来了,但还没&quot;可搜&quot;。这步交给定时任务——<code>raw/</code> 每天在长,那就让索引每天自己追上:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># crontab:每天凌晨 3:07 增量索引(错峰,别卡整点)</span></span><br><span class="line">7 3 * * * <span class="built_in">cd</span> ~/Obsidian-Vault &amp;&amp; \</span><br><span class="line"> ~/.claude/skills/chao-rag-wiki/.venv/bin/python \</span><br><span class="line"> ~/.claude/skills/chao-rag-wiki/scripts/build_rag.py --raw raw --out .rag --update</span><br></pre></td></tr></table></figure><p>前面说了,<code>--update</code> 按内容哈希只处理新增和改动的文件,没变化就几秒退出、零 API 调用,所以天天跑也不浪费。Web Clipper 当天剪的新文章,第二天一早就进了向量库。</p><p>karpathy-llm-wiki 那一路同理,挂个任务把当天 <code>raw/</code> 的新文件编译进 wiki 沉淀下来就行。两条管道并行:chao-rag 让每篇立刻可搜,karpathy-wiki 把值得沉淀的编成文章。</p><p>实际上是在我的Mac mini m2上的Hermes中配置了定时任务,每天凌晨调用这个skill进行索引处理。</p><img src="/2026/06/29/chao-rag-wiki-personal-knowledge-base/image-20260629055738407.png" class=""><h3 id="第三段:随时调用-skill-搜索"><a href="#第三段:随时调用-skill-搜索" class="headerlink" title="第三段:随时调用 skill 搜索"></a>第三段:随时调用 skill 搜索</h3><p>闭环这就成了。想找东西,直接在 Claude Code 里调:</p><ul><li><code>/chao-rag-wiki 找出关于 X 的资料</code>——全文混合检索,长尾、冷门词都捞得到;</li><li><code>/karpathy-llm-wiki 我都知道哪些关于 X 的东西</code>——读编译好的精编文章。</li></ul><p>整条链路连起来就是:浏览时点一下 Web Clipper,文章落进 <code>raw/</code>,定时任务自动索引,想搜时一句话调 skill。你只管&quot;看到好东西点一下&quot;和&quot;有问题问一句&quot;,中间的剪藏、入库、索引全自动。Karpathy 那句&quot;人类负责读和提问&quot;,落地大概就是这个样子。</p><hr><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p><code>chao-rag-wiki</code> 已经开源,一行命令装上:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx skills add smallnest/chao-rag-wiki</span><br></pre></td></tr></table></figure><p>配好一个 embedding 的 key(默认千帆,也支持 OpenAI、Voyage 或任意 OpenAI 兼容网关),素材丢进 <code>raw/</code>,跑一句 build 就能开问。再按第五节配好 Web Clipper 模板和定时任务,整个知识库就自己转起来了。</p><blockquote><p>最后留个彩蛋:写这篇时,&quot;两个 skill 各跑两个查询、对比结果&quot;那一步,就是 chao-rag-wiki 自己检索出来的。它检索自己被讨论的素材,多少有点自产自销。RAG 的尽头,没准就是让知识库学会自我介绍。</p></blockquote>

同分类推荐文章

  1. Understand-Anything:代码知识图谱 (2026-06-28 16:30:00)
  2. Anthropic 官方插件:AI Agent 的领域知识插件 (2026-06-28 16:00:00)
  3. agent-skills:用生产级工程纪律武装 AI Agent (2026-06-28 15:30:00)

查看更多 AI 文章 →

建议继续学习

  1. 搜索引擎知多少 (累计阅读 3,880)
  2. Xapian 术语表 (累计阅读 3,257)
  3. 2026 年,我把自己做成了一个 AI (累计阅读 44)