# Serendipity

> 从 Wiki 随机抽取 1-3 个页面作为灵感种子，到网上搜索相关分析文章，发现 Wiki 真正的缺口并补齐。可接受参数指定灵感方向。项目路径见 local/config/serendipity.config.md。

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

---


# /serendipity — 随缘探索 Skill

## 核心理念

**从 Wiki 自身出发，借外部视角照亮盲区。**

从现有 Wiki 随机抽取种子页面，以它们为起点搜索相关分析文章，再反过来发现 Wiki 的缺口。外部资料只提供选题灵感，词条正文须基于书中内容（corpus 路径见 local/config/serendipity.config.md）。

## 参数

| 调用方式 | 说明 |
|---------|------|
| `/serendipity` | 随机从 Wiki 抽取 1–3 个种子页面 |
| `/serendipity 图灵` | 以"图灵"为方向，定向探索 |
| `/serendipity 神经网络 深度学习` | 以多个关键词为方向 |

## 工作流程

### 步骤 1 · 抽取灵感种子

```bash
python3 -c "
import json, random
pages = json.load(open('docs/wiki/pages.json'))['pages']
candidates = [p for p,v in pages.items() if not p.startswith('第') or not p.endswith('章')]
seeds = random.sample(list(candidates), min(3, len(candidates)))
for s in seeds:
    v = pages[s]
    print(s, '|', v.get('type','?'), '|', v.get('description','')[:40])
"
```

读取种子页面正文，提取 2–3 个**尚未充分展开**的关联概念。

### 步骤 2 · 构造搜索查询

| 角度 | 构造方式 |
|------|---------|
| 历史深挖 | `人工智能历史 [种子词] 深度解读` |
| 学术角度 | `[种子词] AI history review` |
| 冷门细节 | `[种子词] 人工智能 早期 细节` |
| 当代评价 | `[种子词] 影响 现代AI` |

### 步骤 3 · 并发搜索 + 精读

同时发出 2–3 个 WebSearch 查询（并行）。从结果中挑 1–2 篇最有趣的文章，WebFetch 精读。

精读提取要点：
- 提到了哪些**具体的人物、系统、事件、概念**？
- 有没有**书中提及但 Wiki 尚无词条**的实体？
- 有没有跨话题的关联叙述？

### 步骤 4 · 识别候选话题

从文章中提炼 3–8 个候选词条话题。

**过滤原则**：
- 须在 corpus_search.py 中有命中（否则不建页）
- 外部分析框架名（如"寒冬"、"AI热潮"）：若书中有此词 → 建页；否则只做背景参考
- 过于抽象的概念（如"科技乐观主义"）：不建 concept 页

### 步骤 5 · 对照现有 Wiki 查缺口

```bash
python3 -c "
import json
ai = json.load(open('docs/wiki/pages.json'))['alias_index']
for c in ['话题A', '话题B']:
    print(c, '->', ai.get(c, 'MISSING'))
"
```

### 步骤 6 · corpus_search 验证

```bash
python3 wiki/scripts/butler/corpus_search.py "话题名" --max 8
```

入选标准：
- ≥3 次命中 → 建完整页面（create-page）
- 1–2 次命中 → 建 stub（create-stub）
- 0 次命中 → 不建页

### 步骤 7 · 撰写词条

内容须基于 corpus_search.py 找到的书中原文，不得将外部分析结论直接写入正文。

### 步骤 8 · 发布

```
/wiki
```

## 输出格式

```
## /serendipity 探索报告

### 灵感种子
- 「图灵测试」（concept）— 随机抽取

### 浏览的文章
1. [标题](URL) — 来源 — 主要角度一句话

### 候选话题筛查
| 话题 | Wiki 现状 | corpus 命中 | 决策 |
|------|----------|------------|------|
| 约翰·麦卡锡 | MISSING | 12 | ✅ 建页 |
| AI寒冬 | MISSING | 3 | ✅ 建页 |
| 通用人工智能 | 已有 | — | ❌ 跳过 |

### 本次产出
- 新建词条：X 个
- 扩写词条：Y 个
```

## 禁止事项

- ❌ 禁止把外部解读框架直接当词条内容（须有书中依据）
- ❌ 禁止未查 corpus 就直接写词条
- ❌ 禁止 git commit（由 /wiki 负责）

