# Wiki

> 个人知识 Wiki 管理（Quartz v2）。录入资料、查询知识、健康检查。当用户说"录入wiki"、"wiki ingest"、"加到wiki"、"wiki查一下"、"wiki lint"、"/wiki"等关键词时触发。

- Skill: `yangwhale/wiki` (Agent Skill, multi-file: 33 files)
- Install (CLI): `npx skillmds@latest add yangwhale/wiki`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yangwhale/wiki/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: yangwhale (https://skillmd.com/u/yangwhale)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yangwhale/wiki

---


# CC Wiki v2 — 个人知识 Wiki 管理

基于 Quartz (Static Site Generator) + Markdown + BM25 搜索引擎 + MCP Server 的 LLM 维护知识 Wiki。灵感来自 Karpathy 的 LLM Wiki 模式。

**站点**: `$WIKI_URL`（环境变量配置）
**完整技术文档**: `~/CloseCrab/docs/wiki-v2.md`

## 触发条件

- `/wiki ingest <url|文件|文本>` — 录入新资料
- `/wiki query <问题>` — 基于 Wiki 回答问题
- `/wiki lint` — 健康检查
- `/wiki status` — 显示 Wiki 统计 + 知识覆盖度
- 自然语言："帮我录入到 wiki"、"加到知识库"、"wiki 里有没有..."

## 第一性原理（来自 Karpathy LLM Wiki）

### 角色分工

**人类的职责**：策展来源、引导分析方向、提出好问题、思考这一切意味着什么。
**LLM 的职责**：其他所有事——总结、交叉引用、归档、簿记。

### 知识编译，而非检索

不要每次从原始文档重新检索（RAG 模式）。而是将知识**编译一次，持续更新**。Wiki 是编译后的产物——交叉引用已经建好，矛盾已经标记，综合分析已经反映了所有已读内容。

### Schema 共同进化

SKILL.md 是**活文档**，随使用不断迭代。Bot 在操作中发现规则不够用时，应主动建议修改。

### 参与度由用户决定

- **深度参与**（默认）：逐个录入，边录边讨论要点
- **批量模式**：一次性投放多个来源，LLM 自主处理

## 路径约定

**所有命令都用 `$WIKI_REPO`，不要写死 `~/my-wiki-v2`** —— 不同机器上 wiki
仓库的目录名不一样（`my-wiki-v2` / `my-wiki` / `my-wiki-study`）。
`WIKI_REPO` 由 `config/env.sh` 的 `compute_dynamic_vars()` 探测后注入。

```
$WIKI_REPO                        # Quartz repo（本机实际路径见下方自检）
$WIKI_REPO/content                # Markdown 源文件
$WIKI_REPO/raw                    # 原始资料（不可变）
WIKI_URL=$CC_PAGES_URL_PREFIX/wiki-v2
```

跑任何 wiki 命令前先自检一次，**没设就当场报错，不要猜路径**：

```bash
echo "${WIKI_REPO:?WIKI_REPO 未设置 —— 检查 config/env.sh 的 compute_dynamic_vars}"
```

## 目录结构

```
$WIKI_REPO/
├── content/                    # Markdown 源文件（Bot 维护）
│   ├── index.md                # 首页
│   ├── sources/                # 来源摘要
│   ├── entities/               # 实体页面（人/产品/项目/硬件）
│   ├── concepts/               # 概念页面（技术/方法/理论）
│   └── analyses/               # 分析对比
├── raw/                        # 原始资料（不可变）
│   ├── articles/               # 网页文章
│   ├── papers/                 # 论文 PDF
│   └── notes/                  # 碎片笔记
├── scripts/                    # 工具脚本
│   ├── wiki_utils.py           # 常量、frontmatter 解析、wikilink 提取
│   ├── query.py                # BM25 搜索引擎（倒排索引 + LRU 缓存）
│   ├── wiki-mcp-server.py      # MCP Server（9 个 tools）
│   ├── ingest.py               # 录入管道（保存 raw + 创建骨架）
│   ├── lint.py                 # 健康检查（断链/孤儿/frontmatter）
│   ├── status.py               # 统计信息 + 知识覆盖度评分
│   ├── benchmark.py            # 搜索质量基准测试（P@1, P@3, MRR）
│   ├── build-and-sync.sh       # Quartz 构建 + GCS 同步
│   ├── synonyms.json           # 同义词表（30+ AI/ML 术语）
│   └── test_queries.json       # 30 个标准测试查询
├── quartz.config.ts            # Quartz 配置
└── quartz.layout.ts            # Quartz 布局
```

> 上面这份脚本清单是**某一个** wiki 仓库的样子，不是契约。不同 wiki 仓库的
> 脚本集会有出入（实例：Study Wiki 没有 `gen-moc.py` / `benchmark.py`，
> 却多一个 `graph.py`）。**动手前以 `ls $WIKI_REPO/scripts` 为准**，
> 别照着这里的清单去调一个本地没有的脚本。

## Markdown 页面模板

```markdown
---
title: "标题"
description: "一句话摘要（用于搜索结果展示）"
type: source
date: 2026-04-12
tags:
  - tag1
  - tag2
aliases:
  - 别名1
---

## 原文

[原文链接](https://example.com) · 2026-04-12

## 核心要点

1. **要点一**：说明
2. **要点二**：说明

## 详细内容

使用 [[wikilinks]] 链接到其他页面。
表格、列表、代码块都用标准 Markdown。
```

**Frontmatter 必填字段**: title, type, date, tags
**可选字段**: description, aliases, deprecated, lastmod
**页面类型**: source（来源摘要）, entity（实体）, concept（概念）, analysis（分析）
**内部链接**: 用 `[[slug]]` 或 `[[slug|显示文本]]` wikilink 语法

## Quartz 内建功能（不需要脚本）

Quartz 已内建以下功能，**不需要手动维护**：
- **Graph 知识图谱**: 自动从 `[[wikilinks]]` 生成
- **Backlinks 反向链接**: 每页底部自动显示
- **FlexSearch 全文搜索**: 构建时自动生成索引
- **目录索引 (FolderPage)**: 自动生成目录页
- **Tag 页面**: 自动聚合同标签页面
- **ToC 目录**: 每页自动生成
- **KaTeX 数学**: 支持 `$inline$` 和 `$$block$$`

## 搜索引擎能力（query.py）

query.py 是一个高性能搜索引擎，核心特性：

| 特性 | 说明 |
|------|------|
| **倒排索引** | `{term → [(slug, field, count)]}` 预构建，O(1) 查找 |
| **LRU 缓存** | 热查询 <0.01ms（128 条缓存） |
| **BM25 评分** | k1=1.5, b=0.75, IDF 加权，field 权重（title×10, tags×5, desc×3, body×1） |
| **中文分词** | jieba 精确模式，CJK/ASCII 自动切换 |
| **同义词扩展** | `synonyms.json` 双向映射（tpu↔ironwood/trillium 等） |
| **模糊匹配** | Levenshtein distance ≤ 2 自动纠错 |
| **Tag 共现扩展** | 搜 `tpu` 自动带 `tpu-v7`（基于共现矩阵） |
| **意图分类** | slug/title 精确查找直接返回（0.05ms） |
| **时间衰减** | 180 天半衰期，新页面优先 |
| **图谱加权** | wikilink hub 页面加权 |
| **Entity bonus** | entity/concept 精确匹配 +25 |
| **多 Snippet** | 最多 3 个不重叠片段, ±80 chars, 高亮匹配 |
| **摘要预生成** | description 或正文前 300 字 |

**性能**: 冷查询 1-67ms, 热查询 <0.01ms, P@1=88.9%, P@3=94.7%, MRR=0.851

## 操作流程

### /wiki ingest — 录入新资料

**步骤：**

1. **获取内容**: URL → WebFetch 抓取；PDF → 读取；文本 → 直接使用
2. **创建骨架页面**:
   ```bash
   python3 "$WIKI_REPO"/scripts/ingest.py url \
     --slug article-name --title "Title" --tags "tag1,tag2" \
     --source-url "https://..." --text "fetched content..."
   ```
3. **与用户讨论**: 展示 3-5 个关键要点，确认重点方向
4. **填充详细内容**: 用 Edit 工具填充骨架页面（见下方"内容要求"）
5. **创建/更新 entity 和 concept 页面**（Bot LLM 判断需要时）
6. **构建部署**:
   ```bash
   bash "$WIKI_REPO"/scripts/build-and-sync.sh
   ```
7. **回复用户**: 附上新页面 URL `$WIKI_URL/sources/slug`

**Slug 命名**: kebab-case + 日期后缀，如 `tpu-v7-specs-20260412`

### Source 页面内容要求

Source 页面是**编译后的知识页面**，用户打开就能获取核心知识，不需要跳到外部原文。

**必须包含**：
1. **原文链接**: 保留指向原始资料的链接
2. **核心要点** (Key Takeaways): 3-7 个最重要的结论，用编号列表
3. **详细内容**: 根据原文类型选择合适的结构化内容
4. **数据和表格**: 关键数据以表格形式保留
5. **Wiki 关联**: 通过 `[[wikilinks]]` 链接到相关页面

### /wiki query — 基于 Wiki 提问

**步骤：**

1. **搜索**（优先用 MCP tools）:
   ```bash
   # MCP（推荐）
   wiki_query("搜索关键词")      # BM25 全文搜索
   wiki_ask("具体问题")          # RAG 式问答，直接提取答案段落
   wiki_search("type:source tag:tpu")  # 结构化过滤
   
   # CLI 回退
   python3 "$WIKI_REPO"/scripts/query.py "搜索关键词" --top-k 5
   ```
2. 深入阅读返回的相关页面（用 `wiki_page(slug)` 或 Read 工具）
3. 发现相关页面：`wiki_related(slug)` 获取推荐
4. 综合回答，引用具体页面 URL
5. **判断是否回存 Wiki**:
   - **应该回存**: 对比分析、综合研究、新发现的关联
   - **不需要**: 简单事实查询、单页面信息复述
   - 回存时创建 `analyses/{slug}.md`，然后运行 `build-and-sync.sh`

### /wiki lint — 健康检查

```bash
python3 "$WIKI_REPO"/scripts/lint.py
```

检查项：
- **断链**: `[[slug]]` 引用的 slug 没有对应 .md 文件
- **孤儿页面**: 没有任何页面 `[[引用]]` 的页面
- **缺失 frontmatter**: title/type/date/tags 缺失
- **内容过短**: 正文 < 100 字
- **标签不一致**: 相似标签未统一

**知识发现**（Lint 时顺带思考）：
- 哪些领域来源太少？建议用户补充
- 哪些页面相关但没有链接？
- 是否可以生成新的对比分析？

### /wiki status — 统计信息 + 知识覆盖度

```bash
python3 "$WIKI_REPO"/scripts/status.py
```

显示：页面总数（按类型）、标签分布、最近变更、知识覆盖度评分（connectivity × 40 + freshness × 30 + tag diversity × 30）、orphan 数量、平均 wikilinks 数。

## 构建部署

```bash
# 一键构建 + 同步
bash "$WIKI_REPO"/scripts/build-and-sync.sh
```

等价于：
```bash
cd "$WIKI_REPO"
npx quartz build
gcloud storage rsync -r --delete-unmatched-destination-objects public/ gs://$GCS_BUCKET/cc-pages/wiki-v2/
```

**注意**: 构建前会自动删除 `~/package.json`（如果是空文件），避免干扰 Quartz。

## MCP Server（9 个 Tools）

MCP Server 路径：`$WIKI_REPO/scripts/wiki-mcp-server.py`
配置在 `~/.claude.json` 的 `mcpServers.wiki` 中。基于 fastmcp 框架，所有 tools 用 `@_safe_tool` 包裹防崩溃。

| Tool | 用途 | 适用场景 |
|------|------|---------|
| `wiki_query(question, top_k=5)` | BM25 全文搜索，返回排名结果 + snippets | 主要搜索入口 |
| `wiki_page(slug)` | 读取页面全文 | snippet 不够时深入阅读 |
| `wiki_ask(question)` | RAG 式问答，提取最相关段落 | 直接问题（"TPU v7 HBM 多大？"） |
| `wiki_related(slug, top_k=5)` | 图+tag+类型推荐相关页面 | "看完这个还应该看什么？" |
| `wiki_search(keyword)` | 快速关键词/结构化搜索 | `type:source tag:tpu /regex/` |
| `wiki_list(type="", tag="")` | 按类型和/或标签列出页面 | 浏览类操作 |
| `wiki_graph_neighbors(slug, depth=1)` | N-hop wikilink 邻居 | 知识图谱探索 |
| `wiki_graph_path(source, target)` | 两页面最短路径（BFS） | 发现知识关联 |
| `wiki_status()` | 统计 + 知识覆盖度报告 | 健康总览 |

**MCP tools 可用时优先用 MCP，否则回退到脚本调用。**

### wiki_search 结构化语法

```
type:source tag:tpu           # 按类型+标签过滤
/v[67]/                       # 正则匹配标题
type:entity /karp/            # 组合查询
```

## 质量规则

1. **一个概念一个页面**: 不要在一个页面里混合多个无关概念
2. **优先更新已有页面**: 先用 wiki_query 确认不存在再新建
3. **矛盾必须标注**: 发现矛盾用 `> [!warning]` callout
4. **来源必须引用**: 每个事实性陈述都应标注来源
5. **Slug 命名**: kebab-case，简短有意义，如 `tpu-v7`、`knowledge-compounding`
6. **不要修改 raw/**: 原始资料只增不改
7. **Wikilinks 链接**: 提到已有页面的概念/实体时，用 `[[slug]]` 链接

## 脚本清单

| 脚本 | 用途 | 调用时机 |
|------|------|---------|
| `wiki_utils.py` | 常量、frontmatter 解析、slug 查找、wikilink 提取 | 被其他脚本 import |
| `query.py` | BM25 搜索引擎 + 倒排索引 + LRU 缓存 | MCP server / CLI |
| `wiki-mcp-server.py` | MCP Server, 9 个 tools | Claude Code MCP |
| `ingest.py` | 录入管道: 保存 raw + 创建骨架 | `/wiki ingest` |
| `lint.py` | 健康检查: 断链、孤儿、frontmatter | `/wiki lint` |
| `status.py` | 统计 + 知识覆盖度评分 | `/wiki status` |
| `benchmark.py` | 搜索质量基准测试（P@1, P@3, MRR） | 调参验证 |
| `build-and-sync.sh` | Quartz 构建 + GCS 同步 | 每次内容变更 |
| `synonyms.json` | 同义词表（30+ AI/ML 术语） | query.py 加载 |
| `test_queries.json` | 30 条标准测试查询 | benchmark.py |

