LLM Wiki 知识库

基于 Karpathy LLM Wiki 思想,将非结构化聊天记录编译为结构化、可被 LLM 消费的知识碎片系统。

概述

LLM Wiki 是 OpenClaw 项目的内部知识库系统,将 Mattermost/Clawline 等渠道的原始聊天记录(约 8MB)经过 LLM 编译,转化为结构化的 wiki 文章。系统遵循 Karpathy 提出的 LLM Wiki 核心思想——LLM 需要的不是文档,而是结构化的知识碎片 + 链接

系统架构

Wiki 数据直接存储在本地文件系统 ~/.openclaw/wiki/,Agent Portal 通过 server.cjs/api/wiki/pages API 实时读取 markdown 文件,不经过数据库。

~/.openclaw/wiki/
├── raw/mattermost/     ← 原始聊天记录(27个bot,~8MB)
├── raw/topics-v1/      ← v1 编译产物归档(43篇)
├── topics/             ← v1 主题编译(12大主题 + 31细分)
├── pages/              ← v2 Karpathy 风格文章(235篇)
├── bots/               ← bot 档案(15个)
├── projects/           ← 项目概览(8个)
├── concepts/           ← 概念文档
└── archive/            ← 旧版 GPT-4o 产出

Wiki Portal 展示修复(2026-04-07)

问题

Agent Portal 前端的 WikiTab 组件硬编码了 4 种 type 分组:

const GROUPS = [
  { key: "project", label: "项目", icon: FolderKanban, emoji: "📁" },
  { key: "bot", label: "Bot", icon: Bot, emoji: "🤖" },
  { key: "concept", label: "概念", icon: Lightbulb, emoji: "💡" },
  { key: "synthesis", label: "综合分析", icon: FileText, emoji: "📊" },
]

新编译的 43 篇 topic 文件 frontmatter 都是 type: topic,加上 23 篇无 type 的页面,总共 66 篇从未在侧边栏显示过。

修复方案

改为动态分组——API 返回什么 type 就显示什么分组,不再按预定义列表过滤。已知 type 有预设图标和中文名,未知 type 自动用文件名 humanize 做标签。

修复后 Portal 侧边栏显示全部 97 篇页面,分为 6 组:项目(8)、Bot(15)、概念(1)、综合分析(7)、主题(43)、其他(23)。

Karpathy Wiki 组织方式(2026-04-07)

讨论了如何按照 Karpathy 的 LLM Wiki 核心思想重新组织已有的 43 篇巨型 topic 文件。

采纳的核心原则

Karpathy 原则实现方式
颗粒化:一个概念一篇文章从 43 篇巨型 topic 拆成 235 条独立条目
分类法:concept / decision / pattern 等5 种类型:concept(76), decision(32), pattern(39), incident(18), guide(70)
互链wikilinks 构建知识图谱每篇文章底部有 相关条目slug 链接
面向 LLM 消费:token 友好,结构化每篇 6-8KB,有 YAML frontmatter + 结构化段落
不可变源:原始数据保留raw/topics-v1/ 保存 43 篇原始 topic,永不修改

务实调整

Karpathy 理想实际取舍原因
人工策展每条LLM 批量提取 + 全局去重766 条手动不现实,用两轮去重压到 235
极致颗粒(每个 API 参数一篇)适度合并(同主题收束)太碎反而不好检索,decision 从 193 合到 32
双向链接自动维护单向引用,生成时写入暂无 wiki 引擎,后续可加

主题批量生成流程(2026-04-07)

第一阶段:v1 主题编译

使用 GPT-5.4 对原始聊天记录进行主题编译:

  • 12 个大主题全部完成(infrastructure 275KB, clawcraft 208KB 等)
  • 31 个细分主题生成,其中 5 个失败(<500 bytes,只有 frontmatter 无内容)
  • 失败主题重跑后全部成功:
    • channel-agent-isolation-and-resilience: 239B → 52KB ✅
    • clawline-web-client-ui-optimization: 219B → 46KB ✅
    • codex-assisted-development: 262B → 142KB ✅
    • openclaw-skill-installation-and-loading: 251B → 33KB ✅
    • prism-hackathon-openclaw-setup: 217B → 17KB ✅
  • 最终产出:43 篇,总计 2.3MB,零空壳

第二阶段:Karpathy 风格重编译

  • Phase 1(提取):从 43 篇 v1 topic 文件提取 766 个知识条目
  • 去重:766 → 591(slug+title 去重)→ 235(LLM 全局语义去重)

去重压缩效果:

类型原始去重后压缩率
Decision22832-86%
Incident17118-89%
Pattern15539-75%
Concept11076-31%
Guide10270-31%
总计766235-69%
  • Phase 2(生成文章):235 篇文章,每篇 6-8KB,~40s/篇
  • Token 消耗估算:约 3.3M tokens(Phase 2),使用 GPT-5.4

去重保留/删除原则

保留标准:

  1. 独立可操作——读完就能解决具体问题
  2. 上位原则——覆盖多个具体场景的通用模式
  3. 不可归入其他条目——确实独立
  4. 高复用——不是一次性特殊案例

删除标准:

  1. 一次性调试记录——改个端口/变量名级别
  2. 被上位条目覆盖——具体实例已被通用模式包含
  3. 颗粒度过细——一句话能说清的不独立成条
  4. 因果链合并——“X 导致 Y” + “Y 的解决” 合为一条完整故事

技术细节

  • 数据来源:Mattermost 聊天记录(27 个 bot),约 8MB 原始文本
  • 编译引擎:GPT-5.4(Azure sweden-ext / us2 endpoint)
  • Portal 集成server.cjs 通过 /api/wiki/pages API 直接读取本地文件系统,跳过 raw/ 目录
  • 文章格式:YAML frontmatter + 摘要 + 背景 + 核心内容(含代码示例)+ 要点 + wikilinks 交叉链接

大规模 Wiki 内容生成与质量反思(2026-04-08)

增量更新脚本 wiki-incremental.js

完成了第三项 Wiki Pipeline 任务:增量更新脚本。该脚本将 daily digest 接入 Karpathy pipeline,实现提取→去重→更新/创建 pages→更新 index/log 的完整流程。

  • 处理 11 个 daily digest,提取 34 条知识条目
  • 去重后新增 31 条,Wiki 总页面达到 268 篇
  • 质量问题暴露:增量页面平均仅 500 bytes(如 local-repo-status.md 只有一段话),与 Karpathy 编译的 8KB 深度文章差距巨大。原因是增量脚本直接从 digest 摘要生成,缺少 phase2 的”回溯 raw 源、LLM 深度展开”步骤

Pipeline 碎片化问题

审计发现 wiki 脚本已膨胀至 13 个(compile、compile-v2、v2.1、retry、karpathy-compile、dedup、dedup-global、phase2、index、auto-link、fix-links、ingest、incremental),多数是一次性迭代工具。

Karpathy 核心思想重新审视

重新回顾 Karpathy LLM Wiki 原文后,识别出四个关键偏差:

  1. 过度工程化:Karpathy 说的是”LLM 读资料,更新页面”,我们搞了 13 个脚本像在写编译器
  2. 批量编译 vs 增量维护:应是每次一点增量融入,而非批量产出后断裂式增量
  3. 只有 Ingest,没有 Query 和 Lint:切断了”ingest 让 wiki 更丰富→query 答案更好→好答案存回 wiki”的复利循环
  4. 增量不是”新建页面”,是”更新已有页面”:一次 ingest 应触动 10-15 个已有页面,而非新建碎片页

重编译测试:Agent Portal 案例

以 Agent Portal 为实验对象,测试了知识页面的合并精简方案:

原版 (pages/)新版 (pages-v2/)
文件数9 个1 个
总大小72.7 KB4.6 KB
信息密度每篇 8KB 八股文长度由内容决定

核心结论:

  • 235 篇 Karpathy 页面是”看起来像知识库的文章集”,不是”活的笔记本”
  • 正确目标:50-80 个精品页面 > 235 个灌水页面
  • 页面长度应由内容决定,不按固定模板灌水
  • 采用主页+详细页两层结构:主页作精简索引,详细页按时间线叙事展开,通过 wikilink 互相引用

主题组织方式定型

经过多轮反思,确定了知识页面的组织原则:

  1. 按时间线叙事而非按抽象主题拆分——“03-10 那天做了什么”比”SSE 决策”更有价值
  2. 主页包含所有内容概览,详细页可点击深入
  3. 保留详细页作为引用,不是删掉它们
  4. 长度由内容决定——事故排查清单 2KB,项目主页 4.5KB,简单决策 1.2KB

相关页面