Megan
AI 书童辅助阅读、学习、考试与知识整理,集成 Obsidian 笔记系统。
基于大模型构建可自更新的Obsidian知识库,支持内容编排、查询与人工反馈闭环。
openclaw skills install @juliahzhu/llm-wiki-q命令、参数、文件名以原文为准
实验性技能 — 正在迭代中。
作者:Lewis Liu(lylewis@outlook.com)· 灵感来自 [Karpathy 的 llm-wiki Gist](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)
与传统的 RAG(每次查询时重新检索原始文档)不同,LLM 不是重复检索,而是将原始资料编译为一个持久、相互链接的知识库。每一次的导入、查询、校验和审计操作都会让知识库变得更丰富。知识持续积累——而人类通过结构化的反馈渠道参与其中,而非依赖临时、易丢失的纠错。
该知识库是一个动态演进的产物,包含五种操作:compile、ingest、query、lint、audit。每次会话开始前,需先阅读 CLAUDE.md 和 wiki/index.md。
<wiki-root>/
├── CLAUDE.md ← 模式文件:定义范围、命名规范、当前文章列表、研究空白
├── log/ ← 每日操作日志(每天一个文件)
│ ├── 20260409.md
│ └── 20260410.md
├── audit/ ← 人工反馈收件箱(每条反馈一个文件)
│ ├── 20260409-143022-claude-code-size.md
│ └── resolved/ ← 已处理的反馈,归档并附上解决说明
├── raw/ ← 不可变的原始文档(LLM 只读,不写入)
│ ├── articles/
│ ├── papers/
│ ├── notes/
│ └── refs/ ← 大型二进制文件的指针文件,存放于 raw/ 外部
├── wiki/ ← LLM 生成的知识内容(LLM 写,你读)
│ ├── index.md ← 主目录 —— 所有页面按类别组织
│ ├── concepts/ ← 概念/主题页面(超过 1200 字时拆分为子文件夹)
│ ├── entities/ ← 人物、工具、论文、组织等实体
│ └── summaries/ ← 每个原始来源的摘要页
└── outputs/
└── queries/ ← 查询回答(可持久化的内容可提升至 wiki/)CLAUDE.md 是模式文件——最重要的配置项。它告诉 LLM 知识库的范围、命名约定、当前文章列表、待解决问题和研究空白。每次会话开始前都应阅读此文件。详见 references/schema-guide.md 中关于其内容的说明。
以下四条规则贯穿所有操作。若未来指令与此冲突,应在执行前向用户发出警告。
单个概念页面不应试图完整覆盖复杂主题。目标:每页 400–1200 字。当某个主题超出此范围时:
wiki/concepts/<topic>/wiki/concepts/<topic>/index.md 中放置简短索引页 —— 包含定义、子页面列表、每页一句话摘要wiki/concepts/<topic>/<aspect>.mdwiki/index.md 中通过缩进的项目符号展示层级关系示例布局(来自真实知识库):
wiki/tech/claude-code/
├── index.md (概述 + 子页面链接)
├── Claude_Code_Architecture.md
├── Claude_Code_Agent_Framework.md
├── Claude_Code_Bridge_System.md
├── Claude_Code_Query_Engine.md
├── Claude_Code_Skills_Plugins.md
├── Claude_Code_State_Management.md
└── Claude_Code_Tool_System.md用一个大文件涵盖全部七个方面将难以阅读且无法建立链接。七个聚焦的小文件 + 一个索引页,可实现导航、选择性阅读、清晰的反向链接和小规模审计目标。
flowchart LR
A[raw/article.md] --> B[summary]
B --> C[concept page]
C --> D[index.md]
$f(x) = \sum_i w_i x_i$ 或块级格式 $$...$$。两者均能在网页查看器(服务端 KaTeX,客户端 Mermaid)和 Obsidian(默认设置)中正常渲染。
raw/<子文件夹>/。 - 在 raw/refs/<slug>.md 创建指针文件,内容如下:
---
kind: ref
external_path: /Volumes/external/models/llama-3-70b/
size: ~140 GB
---- 后接一段简短描述,说明其内容及对本知识库的重要性。
- 知识库页面引用方式为 [[raw/refs/<slug>]],与其他来源一致。
此做法确保知识库仓库保持 Git 友好性和可移植性。
知识库由 AI 生成,难免出错;原始资料由人类撰写,也可能互相矛盾。audit/ 目录是人类纠正这两类错误的正式渠道,避免纠错信息在聊天记录中丢失。
audit/ 下的一个文件,包含 YAML 前置元数据(锚点、目标、严重性)和 Markdown 正文。audit 操作 —— 绝不能静默忽略 audit/*.md 文件。audit/resolved/,并附加 # Resolution 部分,同时在 log/YYYYMMDD.md 中记录日志。详见 references/audit-guide.md 中的完整文件格式与处理流程。
对知识库的所有操作均属于以下五种之一。每次操作都会在当天的日志文件(log/YYYYMMDD.md)中追加一条记录。
compile根据现有 raw/ 材料重构知识库内容 —— 包括拆分过大的页面、合并近似重复内容、重建 index.md。
何时运行:在大批量导入后、某页面超过 1200 字、index.md 与实际不符,或用户要求“清理知识库”时。
步骤:
CLAUDE.md、wiki/index.md 以及目标子树中的每个文件。concepts/<topic>/ 目录下的索引页与子页面。在写入前需向用户确认计划。wiki/index.md,确保每页仅列出一次。## [HH:MM] compile | <操作内容 — 涉及文件、拆分、合并情况>ingest添加新来源。通常一个来源会影响 5–15 个 wiki 页面。
步骤:
- 网络文章 → raw/articles/<slug>.md
- 论文 → raw/papers/<slug>.md(大 PDF 文件提取文本)
- 笔记 → raw/notes/<slug>.md
- 大型二进制文件 → raw/refs/<slug>.md 指针文件(参见 raw 文件策略)
wiki/summaries/<slug>.md(200–400 字 —— 关键收获,非全文重写;参见 references/article-guide.md)。wiki/concepts/ 中的相关概念页面。遵循分而治之原则:若概念页面将超过 1200 字,则应拆分而非强行塞入。wiki/entities/ 中的实体页面。wiki/index.md,使新页面出现在正确分类下。## [HH:MM] ingest | <slug> — <一句话描述> (影响 N 个页面)query基于 wiki 内容回答问题,不依赖通用知识。
步骤:
wiki/index.md。按类别扫描相关页面。[[页面名称]] 格式在文中引用来源。outputs/queries/<YYYY-MM-DD>-<question-slug>.md。wiki/concepts/,并加入 index.md。## [HH:MM] query | <question-slug>(若已提升,另加一行 ## [HH:MM] promote | ...)lint健康检查。运行:
python3 scripts/lint_wiki.py <wiki-root>脚本报告以下问题:
[[目标]] 所指向的 目标.md 文件不存在wiki/index.md 中[[X]] 被引用 3 次以上但无对应页面log/ 中存在异常文件或命名错误audit/*.md 中 YAML frontmatter 格式错误target 文件必须存在针对每一项问题,提出修复方案,经用户确认后再执行。记录日志:## [HH:MM] lint | <N> 个问题发现,<M> 个已修复
audit处理来自 audit/ 的人工反馈。
步骤:
python3 scripts/audit_review.py <wiki-root> --open 获取按目标文件分组的待处理列表。anchor_before / anchor_text / anchor_after 窗口定位目标文件中的具体位置(行号可能已偏移)。- 接受:直接应用修正到目标文件。
- 部分接受:采纳合理部分,其余在回复中注明。
- 拒绝:在回复中说明理由 —— 反馈可能基于对范围的误解或与已有来源矛盾。
- 延期:将问题加入 CLAUDE.md “待研究问题”部分,保留在 audit/ 并添加注释。
# Resolution 部分: # Resolution
2026-04-10 · accepted.
修正了文件数量(原为“~1,900”,根据提交 abc123 更正为“~1,800”)。
已更新:tech/Claude_Code.md 第 47–48 行。audit/ 移动至 audit/resolved/。文件名保持不变。 ## [HH:MM] audit | resolved 20260409-143022-a1b2 — <一句话说明>resolved/,并在其回复部分保留拒绝理由 —— 这是宝贵的历史记录。详见 references/audit-guide.md 了解完整的审计文件格式。
| 工具 | 用途 |
|---|---|
| [Obsidian](https://obsidian.md) | 浏览 wiki 的 IDE;图谱视图可显示页面间连接 |
**plugins/obsidian-audit/** | Obsidian 插件 —— 选中文本 → 添加反馈 → 写入 audit/ |
**web/** | 本地 Node.js 服务 —— 预览带 mermaid/math 渲染的 wiki;选中文本 → 反馈 → 写入 audit/ |
scripts/scaffold.py | 初始化新 wiki 目录结构 |
scripts/lint_wiki.py | 七轮健康检查 |
scripts/audit_review.py | 按目标文件分组开放/已解决的审计 |
| [qmd](https://github.com/tobi/qmd) | 可选的本地语义搜索工具(适用于页面数 >100 时) |
Obsidian 插件与网页预览器均以相同格式和相同的锚点算法生成审计文件,因此从任一端提交的反馈均可由任一端处理。
python3 scripts/scaffold.py <wiki-root> "<主题标题>"创建完整目录结构(含 log/<今天>.md、audit/、audit/resolved/),基于新模板生成空白的 CLAUDE.md 和空白的 wiki/index.md,并包含推荐的分类布局。
初始化后:
CLAUDE.md —— 明确范围、命名规范、初始研究问题。outputs/queries/;将持久性答案提升至 wiki/concepts/。lint。audit。wiki/index.md 格式LLM 在每次编译时会重建 index.md,且每次摄入都会触及其更新。格式:
本维基的简要范围说明。
- [[concepts/Bar/aspect-1]] — ...
- [[concepts/Bar/aspect-2]] — ...
规则:
index.md 中恰好出现一次。lint 工具会强制执行此规则。index.md 与 CLAUDE.md 共同构成 AI 在会话开始时读取的内容。log/ 目录格式详见 references/log-guide.md 获取完整说明。最低要求如下:
log/YYYYMMDD.md## [HH:MM] <操作> | <一句话描述>compile、ingest、query、lint、audit、promote、split、scaffold快速跨历史记录搜索:grep -rh "^## \[" log/ | tail -20
references/schema-guide.md — CLAUDE.md 中应包含的内容references/article-guide.md — 如何撰写高质量维基文章(篇幅、维基链接、mermaid 图表、数学表达式、分而治之策略)references/log-guide.md — log/ 目录的命名规范references/audit-guide.md — 审计文件格式、锚点策略、处理流程references/tooling-tips.md — Obsidian 配置、网页剪藏工具、qmd、插件及网页安装方法已收录 1 个 Skill