---
name: opensourcefaq
description: 解答与开源产品有关的深度技术问题，输出图文并茂的 Markdown 技术文章。触发条件：用户提出与开源项目（如 PostgreSQL、Redis、Kafka、Kubernetes、ClickHouse、Flink 等）相关的技术问题，并提供源码目录或 URL、deepwiki repo 名称。即使用户只说"帮我解答这个开源问题"或"分析一下这个项目的某个机制"，也应使用本 skill。输出文章保存到项目 markdown/ 目录，要求直击问题、图文并茂、有实操细节和原理分析。
---

# Open Source FAQ Skill

深度解答开源项目技术问题，输出可发布级别的 Markdown 技术文章。

---

## 输入规范

| 字段 | 说明 | 示例 |
|------|------|------|
| **问题** | 要解答的技术问题 | "PostgreSQL 为什么用 B-Tree 而不是 LSM-Tree？" |
| **源码目录 / URL** | 涉及的开源项目本地路径或 GitHub URL（可多个） | `/mnt/user-data/uploads/postgres/` 或 `https://github.com/postgres/postgres` |
| **deepwiki reponame** | deepwiki 中的 repo 标识，用于拉取结构化文档 | `postgres/postgres` |

---

## 解答流程（严格按顺序执行）

### Phase 0 — 确认输入

在开始前，检查用户是否提供了以下内容：
- [ ] 明确的技术问题
- [ ] 源码目录或 GitHub URL（至少一个）
- [ ] deepwiki reponame（强烈建议提供；如未提供，尝试从 URL 推断）

如有缺失，简短追问，不要跳过。

---

### Phase 1 — 问题描述与分析

**1.1 问题描述**

用自己的语言重新表述问题，明确：
- 问题的技术背景（版本、场景）
- 核心疑问是什么（行为/性能/架构/API 语义）
- 预期解答的粒度（原理级 / 源码级 / 实操级）

**1.2 问题分析**

拆解问题为若干子问题，例如：
- 涉及哪些核心模块/子系统？
- 需要理解哪些数据结构或算法？
- 有哪些已知假设可能影响答案？

列出解答路线图（bullet），以便后续按图索骥。

---

### Phase 2 — 准备素材

#### 2.1 搜索源码

**优先级：源码 > 文档 > 网络文章**

根据问题分析，定位以下内容：

```
a. 核心实现文件（.c/.go/.java/.rs 等）
b. 相关头文件 / 接口定义
c. 单元测试 / 集成测试（揭示预期行为）
d. 官方文档文件（.md / .rst / doc/ 目录）
e. 变更记录（CHANGELOG / git log 关键 commit）
```

**源码搜索策略：**
- 若提供本地路径：使用 `grep -rn`, `find`, `cat` 等工具直接读取
- 若提供 GitHub URL：使用 `web_fetch` 拉取关键文件；对大型仓库，优先拉取 `README`、顶层目录结构，再按需深入
- 重点关注：函数调用链、关键数据结构、注释中的设计说明

#### 2.2 浏览 DeepWiki 综述

调用 `deepwiki:read_wiki_structure` 获取项目的文档主题列表，识别与问题相关的章节。

再调用 `deepwiki:read_wiki_contents` 阅读相关章节，提取：
- 架构概述
- 核心概念定义
- 模块关系图

#### 2.3 DeepWiki 精准问答

调用 `deepwiki:ask_question`，将问题的子问题逐一提问，获取上下文关联的深度回答。

每次提问后，记录：
- 关键结论
- 涉及的源码位置（文件名 + 行号）
- 与其他子问题的关联

#### 2.4 搜索网络文章

使用 `web_search` 搜索相关文章，**严格过滤**：

```
✅ 保留：
  - 官方博客 / release notes
  - 知名技术博客（作者可信）
  - 版本匹配（与用户关注版本一致）
  - 发布时间在项目相关版本发布后

❌ 丢弃：
  - 内容与当前版本不符（API 已变更）
  - 没有源码引用的纯经验文章
  - 内容与源码搜索结论相矛盾
  - SEO 农场内容 / 无实质信息
```

对每篇保留文章，记录：来源、版本、核心观点、是否已被源码验证。

---

### Phase 3 — 撰写 Markdown 文章

**文章必须图文并茂，包含 text、mermaid、svg 三种图表形式中的至少两种。**

#### 文章结构模板

```markdown
# [问题标题]

> 关键词：[项目名] · [版本] · [技术领域]

## TL;DR
（3-5 句话给出核心结论，让读者知道看完能得到什么）

## 背景与问题定义
（问题的技术背景、为什么这个问题值得深入研究）

## 原理分析
（核心机制的深度解析，配合 mermaid 流程图 / 架构图）

## 源码走读
（关键代码片段 + 注释，直接引用文件路径和行号）

## 实操演练
（模拟环境构建 + 数据生成 + 验证步骤，确保可复现）

## 边界条件与常见误区
（what-if 分析，反直觉的地方）

## 拓展思考
（举一反三：相关问题、对比其他项目的实现、延伸阅读）

## 参考资料
（源码文件、文档链接、网络文章，注明版本）
```

#### 图表规范

**mermaid 使用场景：**
- 流程图（代码执行路径、请求生命周期）
- 时序图（组件间交互）
- 状态机（对象生命周期）
- 类图（数据结构关系）

**SVG 使用场景：**
- 内存布局图（展示数据结构在内存中的排列）
- 对比图（两种方案的 side-by-side 对比）
- 性能曲线示意图

**代码块规范：**
- 明确标注语言（```c, ```go, ```sql 等）
- 在注释中标注文件路径和行号
- 超过 30 行的代码块要加折叠说明

#### 实操演练规范

每个实操场景必须包含：

```markdown
### 环境准备
（Docker / 本地安装命令，版本要求）

### 数据生成
（建表 SQL / 数据生成脚本，确保能复现问题场景）

### 验证步骤
（具体命令 + 预期输出，让读者知道"对了"是什么样子）

### 结果解读
（输出意味着什么，如何与原理对应）
```

---

### Phase 4 — 验证文章正确性

**在输出最终文章前，必须完成验证。**

#### 4.1 源码交叉验证

对文章中每一个"原理陈述"，确认：
- [ ] 有对应源码佐证（文件 + 行号）
- [ ] 源码版本与文章描述的版本匹配
- [ ] 没有与源码矛盾的表述

#### 4.2 DeepWiki 验证

将文章核心结论作为问题，再次询问 `deepwiki:ask_question`，确认：
- [ ] DeepWiki 的回答与文章结论一致
- [ ] 如有出入，更新文章（以源码为准，DeepWiki 为辅）

#### 4.3 代码示例验证

对文章中的代码示例：
- [ ] 语法正确（无明显拼写 / 语法错误）
- [ ] 逻辑与原理描述一致
- [ ] 实操命令在指定环境中可执行（如有本地环境可验证则执行验证）

#### 4.4 最终 Checklist

```
[ ] 问题被直接回答（TL;DR 清晰）
[ ] 原理有源码支撑
[ ] 图表至少 2 种（mermaid + svg 或 mermaid + text diagram）
[ ] 实操可复现（环境 + 数据 + 命令完整）
[ ] 没有过期/错误的技术描述
[ ] 参考资料完整且版本明确
[ ] 文章保存到 markdown/ 目录
```

---

## 输出规范

- **文件路径**：`markdown/<问题关键词-项目名>.md`（英文小写，连字符分隔）
- **文件编码**：UTF-8
- **图表**：mermaid 代码块用 ` ```mermaid `，SVG 直接嵌入 `<svg>` 标签
- **代码引用**：优先引用原始源码，不要改写意思

---

## 注意事项

1. **版本敏感**：开源项目实现随版本变化大，每次引用源码必须注明版本/commit
2. **多项目问题**：若问题涉及多个项目（如 Kafka + Flink），分别建立素材池后综合分析
3. **避免过度概括**：宁可说"在 X 版本中，Y 模块的实现是..."，也不要说"X 总是..."
4. **实操优先**：每个原理点尽量配一个可验证的实操步骤
5. **中文优先**：文章默认用中文撰写，代码注释可用英文
