LLM 自动维护的持久化研究知识库 skill —— 你只负责提供资料和提问,LLM 负责构建整个知识库。
方式一:通过 Skills CLI 安装(推荐)
npx skills add 2811jh/kb-wiki方式二:手动安装(如果 Skills CLI 不可用)
git clone https://github.com/2811jh/kb-wiki.git ~/.agents/skills/kb-wiki安装完成后,在对话中输入以下命令初始化知识库:
/setup
kb-wiki 基于 llm-wiki 理念构建,将知识库分为三层:
your-wiki/
├── Schema.md ← Schema 层:告诉 LLM 如何工作(可自定义演进)
├── raw/ ← 原始资料层:只读,LLM 从这里读取来源
│ ├── articles/ ← 文章、访谈记录
│ ├── papers/ ← 学术论文
│ ├── assets/ ← 图片等媒体文件
│ └── data/ ← 数据文件
└── wiki/ ← Wiki 层(LLM 完全掌控)
├── entities/
├── concepts/
├── sources/
├── synthesis/
├── .cache/ ← 文件转换缓存(自动管理)
├── index.md
└── log.md
类比:Obsidian = IDE,LLM = 程序员,Wiki = 代码库。你打开 Obsidian 实时浏览,LLM 在后台编辑维护。
| 命令 | 功能 | 说明 |
|---|---|---|
/setup |
初始化知识库 | 创建目录结构、配置 qmd、生成 Schema.md |
/ingest <文件或内容> |
导入新资料 | 自动更新 10-15 个 wiki 页面 |
/query <问题> |
查询知识库 | 混合搜索 + 综合答案 + 可选归档 |
/lint |
健康检查 | 检测矛盾、孤立页面、缺失引用等 7 项 |
/status |
查看状态 | 显示知识库统计和 qmd 索引状态 |
┌─────────────────────────────────────────────────────────────────────┐
│ kb-wiki 工作流全景 │
└─────────────────────────────────────────────────────────────────────┘
首次使用 日常使用(循环)
─────── ──────────────
┌──────────┐ ┌──────────────────────────────────────────┐
│ /setup │ │ │
│ 初始化 │ │ ① 用户放入资料 ② 用户提问 │
│ 知识库 │ │ ↓ ↓ │
└────┬─────┘ │ ┌────────┐ ┌─────────┐ │
│ │ │/ingest │ │ /query │ │
▼ │ │导入资料│ │查询知识 │ │
创建目录结构 │ └───┬────┘ └────┬────┘ │
编译 qmd │ │ │ │
生成 Schema.md │ ▼ ▼ │
下载 AI 模型 │ ┌─────────────┐ ┌──────────────┐ │
│ │ │ LLM 自动执行 │ │ qmd 混合搜索 │ │
▼ │ │ │ │ BM25 + 向量 │ │
✅ 知识库就绪 │ │ · 创建摘要页 │ │ + LLM 重排序 │ │
│ │ · 更新实体页 │ └──────┬───────┘ │
│ │ · 更新概念页 │ │ │
│ │ · 标注矛盾 │ ▼ │
│ │ · 强化交叉引用│ ┌──────────────┐ │
│ │ · 修订综合结论│ │ LLM 综合答案 │ │
│ │ · 更新索引 │ │(带引用+置信度)│ │
│ └───┬─────────┘ └──────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ wiki/ 持续增长 可选归档到 │
│ 知识复利 📈 synthesis/ │
│ │
└──────────────────────────────────────────┘
│
每 5 次 ingest
│
▼
┌────────────┐
│ /lint │
│ 健康检查 │
│ │
│ · 矛盾检测 │
│ · 孤立页面 │
│ · 缺失引用 │
│ · 数据空白 │
└────────────┘
用户做的事(很少) LLM 做的事(很多)
───────────── ────────────────
📁 把资料放进 raw/ 📝 读取 → 理解 → 写 10-15 个 wiki 页面
❓ 问问题 🔍 搜索 → 综合 → 生成带引用的答案
👀 在 Obsidian 中浏览 🔧 维护交叉引用、标注矛盾、修订结论
📊 定期健康检查 → 发现知识空白
运行 /setup 后,LLM 将引导你完成:
- ✅ 检测 Node.js(需 ≥ 22)+ Python(需 ≥ 3.10,可选)
- 🔧 编译 qmd 搜索引擎(从内嵌源码自动编译,无需手动安装)
- 🌐 配置 HuggingFace 镜像(中国大陆用户自动设置)
- 📝 输入知识库名称(如:
ux-research) - 📂 选择知识库位置(默认桌面,或自定义路径)
- 🏗️ 自动创建完整目录结构 + 生成 Schema.md
- 🔗 配置 qmd 搜索集合
- 📥 预下载 AI 搜索模型(向量语义搜索 + LLM 重排序,约 1.3GB,可选)
- 📦 安装文件转换依赖(支持 Excel/Word/PPT/PDF,可选)
- 🎉 输出欢迎信息和使用指南
# 将文章放入 raw/articles/,然后告诉 LLM:
/ingest raw/articles/user-interview-2024-03.md
# LLM 会自动:
# ✓ 读取并理解资料
# ✓ 在 wiki/sources/ 创建摘要页面
# ✓ 更新 wiki/entities/ 中相关用户页面
# ✓ 更新 wiki/concepts/ 中相关概念页面
# ✓ 检查并标注与现有内容的矛盾
# ✓ 强化或修订 wiki/synthesis/ 中的综合结论
# ✓ 更新 wiki/index.md
# ✓ 在 wiki/log.md 追加记录
# ✓ 运行 qmd update 重建索引
/query 我们的用户在支付流程中最大的痛点是什么?
# LLM 会:
# ✓ 用 qmd 搜索相关页面
# ✓ 综合多个来源给出答案(带引用)
# ✓ 询问是否将洞察归档到 synthesis/
/lint
# LLM 输出报告,包含:
# ✓ 矛盾论断(如:A 说用户不在意价格,B 说价格是首要因素)
# ✓ 孤立页面(没有入站链接的页面)
# ✓ 缺失交叉引用
# ✓ 过时论断
# ✓ 数据空白建议
# ✓ 推荐探索方向
💡 每导入 5 份资料后,LLM 会自动提醒你运行
/lint。
| 格式 | 扩展名 | 处理方式 | 依赖 |
|---|---|---|---|
| Markdown | .md, .txt |
直接读取 | 无 |
| CSV | .csv |
直接读取 | 无 |
| Excel | .xlsx, .xls |
自动转换为 Markdown | Python + openpyxl |
| Word | .docx |
自动转换为 Markdown | Python + python-docx |
| PowerPoint | .pptx |
自动转换为 Markdown | Python + python-pptx |
.pdf |
自动转换为 Markdown | Python + PyMuPDF | |
| 图片 | .png, .jpg, .gif, .webp |
LLM 视觉能力直接查看 | 无 |
📦 转换工具的 Python 依赖在
/setup阶段自动安装。不需要转换的用户可以跳过。 转换脚本位于scripts/convert/,每种格式独立一个脚本,方便维护。
| 工具 | 用途 | 安装 |
|---|---|---|
| Obsidian | 实时浏览 wiki,图谱视图可视化页面关联结构 | obsidian.md |
| Obsidian Web Clipper | 浏览器文章一键转 Markdown | Chrome / Firefox |
| qmd | 本地 Markdown 搜索引擎(BM25 + 向量),完整源码内嵌在 scripts/qmd/ |
/setup 时自动编译 |
| Marp | 将 wiki 页面转为幻灯片 | Obsidian 插件:Marp Slides |
| Dataview | Obsidian 中查询 wiki 数据 | Obsidian 插件:Dataview |
| git | 知识库版本控制 | git-scm.com,然后 git init 在知识库根目录 |
在 Obsidian 中打开 设置 → 文件与链接,将"附件文件夹路径"设为 raw/assets。这样所有通过 Web Clipper 剪藏或粘贴保存的图片会自动存入 raw/assets/ 目录。
在 设置 → 快捷键 中,搜索 "Download",找到 "Download attachments for current file",绑定快捷键(推荐 Ctrl+Shift+D)。剪藏文章后按快捷键,所有远程图片会下载到本地 raw/assets/ 目录,避免 URL 失效。
LLM 无法在一次操作中读取含有内联图片的 Markdown 文件。解决方法:让 LLM 先读取文本内容,然后单独查看部分或全部引用的图片以获取额外上下文。虽然略显笨拙,但效果足够好。
打开 Obsidian 的 图谱视图(Graph View),可以可视化浏览 wiki 中所有页面之间的链接关系——哪些页面是枢纽节点、哪些页面相互关联、哪些页面是孤立的。这是观察知识库形状最直观的方式。
| 传统 RAG | kb-wiki | |
|---|---|---|
| 知识形式 | 原始文档向量索引 | LLM 提炼的结构化 Wiki |
| 矛盾处理 | 原样返回冲突内容 | 标注并综合矛盾 |
| 知识增长 | 线性堆积 | 复利式增长(交叉引用强化) |
| 可读性 | 机器友好 | 人类可直接阅读 |
| 维护者 | 人类 | LLM |
| 查询质量 | 依赖相似度 | 依赖语义理解 + 知识综合 |
| 输入格式 | 纯文本/PDF | Markdown, Excel, Word, PPT, PDF, 图片 |
维护知识库最繁琐的部分不是阅读和思考——而是簿记工作:更新交叉引用、保持摘要最新、标注新数据与旧结论的矛盾、在数十个页面间维护一致性。
人类会放弃 wiki,因为维护负担的增长速度快于知识价值的增长速度。
LLM 改变了这个等式:
- 🤖 不会厌倦:更新第 100 个交叉引用和第 1 个一样准确
- 🤖 不会遗忘:不会忘记更新某个角落里的引用
- 🤖 一次触及 15 个文件:单次 ingest 自动更新 10-15 个 wiki 页面
Wiki 之所以能持续保持维护状态,是因为维护成本趋近于零。
分工:
- 🧑 人类的工作:策划来源、引导分析方向、提出正确的问题、思考信息的意义
- 🤖 LLM 的工作:其他一切
cd ~/Desktop/ux-research # 你的知识库根目录
git init
echo "raw/assets/*.mp4" >> .gitignore # 忽略大文件
git add .
git commit -m "feat: 初始化知识库"在 Claude Desktop 配置文件中添加:
{
"mcpServers": {
"kb-wiki": {
"command": "qmd",
"args": ["mcp"],
"env": {}
}
}
}# 共享知识库(推荐方案)
# 1. 将知识库推送到私有 git 仓库
# 2. 团队成员 clone 后各自配置 qmd 集合
# 3. 通过 PR/merge 合并各自的 ingest 内容MIT © 2811jh