معلومات المصدر
- المستودع
- modoojunko/my-wiki-skill
- آخر نشاط في المصدر
- ٧ أبريل ٢٠٢٦ في ١١:٥٣
- لغة SKILL.md المكتشفة
- الصينية
- النجوم
- ٢
- التفرعات
- ٠
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- my-wiki
- description
- 用户提到"知识库"、"wiki"、"消化素材"、"整理到知识库",或对已初始化的知识库执行查询、健康检查、统计、lint、去重等操作。
# my-wiki — 个人知识库构建系统
> 把碎片化的信息变成持续积累、互相链接的知识库。知识被编译一次,持续维护;不是每次查询都从原始文档重新推导。
## 核心理念
传统 RAG 的问题:每次问问题,AI 从头读原始文件,没有积累。知识库的价值在于**编译一次,持续维护**——你只需要提供素材,AI 做所有的整理工作。
### 思维模式
处理任何请求时,先在脑中过三道判断:
1. **判断素材价值**:这条信息值得永久保存吗?值→完整处理;不值但有关键概念→简化处理;纯噪音→跳过
2. **判断处理深度**:素材是 10000 字的深度文章还是 200 字的碎片?前者需要提取实体、关联主题页、生成摘要;后者只需记录关键概念
3. **判断关联强度**:新素材里的概念和已有实体是同一个东西,还是恰好同名?高价值关联→合并到已有实体页;弱关联→在素材页标记 `[待创建]`
## 工具选择框架
```mermaid
flowchart TD
A[用户请求] --> B{知识库存在?}
B -->|否| C[→ init]
B -->|是| D{请求类型?}
D -->|URL/文件/粘贴文本| E[→ ingest]
D -->|疑问句/定义/查询| F[→ query]
D -->|综述/深度分析/对比| G[→ digest]
D -->|健康检查/lint| H[→ lint]
D -->|状态/统计/有什么| I[→ status]
D -->|图谱/关联图| J[→ graph]
E --> K{素材类型?}
K -->|> 1000字| L[完整处理:实体+主题+摘要]
K -->|≤ 1000字| M[简化处理:摘要+标记待创建]
F --> N[先读 index → search.py 搜索 → 综合回答]
G --> O[读 index → search.py 全量搜索 → 生成深度报告]
```
**兜底规则**:直接给 URL/文件但没说做什么 → 默认走 ingest。搜不到相关内容 → 建议补充素材。
## 边界与防坑
**知识库大了,index 会过时。** `index.md` 是手动维护的目录,wiki 页面多了之后 inevitably 会漏。搜不到不代表知识库里没有——query 工作流要同时查 index 和用 search.py 全文搜索,不能只看 index。
**`[[双向链接]]` 不代表语义关联。** 两个页面互相链接可能只是因为它们恰好提到了同一个词(比如"模型"在 ML 和时尚领域含义完全不同)。关联实体页时,判断"是不是同一个东西"比"有没有提到这个词"重要得多。
**短素材也可能有高价值概念。** 一条 200 字的推文可能包含一个全新的框架/术语,值得创建实体页。不要用字数作为"值不值得深入处理"的唯一标准——概念密度比字数更重要。
## 经验积累
`references/source-patterns/` 目录存放不同素材来源的处理经验。当 AI 在处理某类来源(如微信公众号、Twitter、PDF 论文)时踩了坑或发现了更好的提取策略,将经验追加到对应文件中。
- 已有经验文件:按素材来源域名命名,如 `mp.weixin.qq.com.md`、`twitter.com.md`
- 新来源首次处理时创建经验文件,记录"这个站点的页面结构特点"和"提取时的注意事项"
这些经验文件会在后续 ingest 相同来源时被自动读取,帮助 AI 更精准地提取知识。
## Script Directory
Scripts located in `scripts/` subdirectory (Python 3.10+, zero external dependencies).
`SKILL_DIR` = this SKILL.md's directory. Script path = `${SKILL_DIR}/scripts/<script-name>`.
> 跨平台兼容:所有脚本使用 `pathlib.Path`,Windows/Linux/macOS 通用。
> 调用时统一使用 `python3`(Linux/macOS)或 `python`(Windows),根据当前环境选择。
## 多平台 Skill 目录
| 平台 | Skill 安装路径 |
|------|---------------|
| **WorkBuddy** | `~/.workbuddy/skills/my-wiki/` |
| **Claude Code** | `~/.claude/skills/my-wiki/` |
| **OpenCode** | `~/.config/opencode/skills/my-wiki/` |
| **OpenClaw** | `~/.openclaw/skills/my-wiki/` |
> SKILL_DIR 的解析方式因平台而异,但脚本内部的路径处理完全跨平台。
> 如果平台不支持 `{SKILL_DIR}` 变量,可用 `__FILE__` 等价机制获取当前 SKILL.md 所在目录。
---
## 通用前置检查
除 `init` 外,其他工作流先执行:
1. 检查当前工作目录是否有 `.wiki-schema.md` → 有就用当前目录
2. 没有 → 读取 `{SKILL_DIR}/wiki-config.json`,取 `wikis[current]` 的路径
3. 都没有 → fallback 检查 `~/.my-wiki-path` 文件获取默认路径(向后兼容)
4. 都没有 → `ingest` 自动先 init,其他工作流提示用户先初始化
---
## 工作流 1:init(初始化知识库)[PROCEDURE]
1. **询问主题**:"知识库围绕什么主题?比如'AI 学习笔记'、'DevOps 实践'"
2. **询问路径**:默认 `~/Documents/my-wiki/`,用户可自定义
3. **询问名称**:"给这个知识库起个名字方便切换?比如'devops'、'reading'。不填则用目录名。"
4. **运行脚本**:
```bash
python {SKILL_DIR}/scripts/init.py --wiki-root "<路径>" --topic "<主题>" --name "<名称>"
```
5. 脚本会自动更新 `{SKILL_DIR}/wiki-config.json`,记录名称、路径、主题
6. **输出引导**:告知用户可以给链接、文件、粘贴文本,或说"查询 XX"来搜索
> `wiki-config.json` 支持多个知识库,`current` 字段标记当前活跃的知识库。前置检查按此文件定位知识库路径。
---
## 工作流 2:ingest(消化素材)[MIXED]
这是最核心的工作流。确定性操作用脚本,知识提取用 AI 判断。
### 第一段:确定性操作 [PROCEDURE]
1. 执行前置检查,确定知识库路径
2. 调用 `ingest_prepare.py` 处理素材:
```bash
# URL 类素材
python {SKILL_DIR}/scripts/ingest_prepare.py --wiki-root "<路径>" --url "<URL>" --title "<标题>"
# 本地文件
python {SKILL_DIR}/scripts/ingest_prepare.py --wiki-root "<路径>" --file "<文件路径>" --title "<标题>"
# 粘贴文本
python {SKILL_DIR}/scripts/ingest_prepare.py --wiki-root "<路径>" --text "<文本内容>" --title "<标题>"
# 强制覆盖重复素材
python {SKILL_DIR}/scripts/ingest_prepare.py --wiki-root "<路径>" --url "<URL>" --force
```
脚本输出 JSON,关键字段:`is_long`(是否 > 1000 字)、`raw_path`、`status`
3. 如果素材是 URL → 先检查 `references/source-patterns/` 下是否有该域名的经验文件,有则读取;然后用 web 工具提取网页内容
### 第二段:AI 知识提取 [REASONING]
根据脚本返回的 `is_long` 判断处理深度,但**不要机械执行**——用你的判断力调整:
**完整处理**(`is_long: true`,或素材虽然短但概念密度极高):
- 提取核心观点(3-5 个)和关键概念(3-5 个)
- 生成素材摘要页 → `wiki/sources/{日期}-{标题}.md`
- 对每个关键概念,判断它和已有实体页的关系:
- **是同一个东西** → 读取实体页,在"不同素材中的观点"section 追加新信息,更新 `updated` 日期
- **恰好同名但含义不同** → 创建新实体页,加 disambiguation 说明
- **新概念,知识库没有** → 创建新实体页 → `wiki/entities/{概念名}.md`
- 判断是否需要创建或更新主题页(只有当素材提供了足够多新信息来丰富一个主题时才值得)
**简化处理**(`is_long: false` 且概念密度一般):
- 提取核心观点(1-3 个)和关键概念(1-3 个)
- 生成素材摘要页 → `wiki/sources/{日期}-{标题}.md`
- 概念没有对应实体页时,在摘要页标记 `[待创建: [[概念名]]]`,**不主动创建实体页**
- 跳过主题页创建/更新
### 第三段:收尾 [PROCEDURE]
1. 每个新创建/更新的页面做格式校验:
```bash
python {SKILL_DIR}/scripts/validate_page.py --wiki-root "<路径>" --page-path "<页面路径>" --page-type <entity|topic|source>
```
2. 更新 `index.md`(在对应分类下添加条目)和 `log.md`(添加操作记录)
3. 如果素材来自之前没处理过的域名,在 `references/source-patterns/` 下创建经验文件,记录提取时的发现
---
## 工作流 3:query(查询知识库)[REASONING]
这是需要判断的工作流——搜索只是手段,综合回答才是目标。
1. 执行前置检查
2. 先读 `index.md` 快速定位相关条目——index 是人工维护的精华目录,优先级高于全文搜索
3. 用 search.py 全文搜索补充:
```bash
python {SKILL_DIR}/scripts/search.py --wiki-root "<路径>" --query "<关键词>"
```
> 不要只看 index。知识库大了之后 index 会过时,search.py 能找到 index 没收录的页面。
4. 阅读相关页面后**综合回答**,不要简单罗列搜索结果
5. 回答中标注来源页面(用 `[[链接]]` 或 `[来源](路径)` 格式)
6. 判断:如果查询触发了有价值的分析,建议保存为新页面
**搜索技巧**:多词查询用空格分隔(AND 逻辑);用 `--type entity` 只搜实体页;用 `--include-raw` 搜原始素材。
---
## 工作流 4:digest(深度综合分析)[REASONING]
digest 的价值在于**跨素材的综合分析**,不是简单拼接。
1. 执行前置检查
2. 读 `index.md` 定位所有相关素材和页面
3. 用 search.py 全量搜索相关关键词,确保不遗漏:
```bash
python {SKILL_DIR}/scripts/search.py --wiki-root "<路径>" --query "<关键词>" --include-raw
```
4. **综合分析**(不是拼接):阅读所有相关页面后,判断:
- 不同素材之间的观点是一致的还是有冲突?
- 哪些观点有多个素材支持(可信度高)?
- 哪些观点只有单一来源(需要更多证据)?
- 知识脉络是什么(按时间线或逻辑链)?
- 还有哪些问题没有解决?
5. 生成结构化深度报告 → `wiki/synthesis/{主题}-深度报告.md`
6. 更新 `index.md` 和 `log.md`
---
## 工作流 5:lint(知识库健康检查)[MIXED]
脚本负责结构检查,AI 负责语义检查。
### 第一段:结构检查 [PROCEDURE]
```bash
python {SKILL_DIR}/scripts/lint.py --wiki-root "<路径>"
```
脚本返回 JSON:`orphan_pages`(孤立页面)、`broken_links`(断链)、`index_mismatches`(索引不一致)、`registry_mismatches`(注册表不一致)。
### 第二段:语义检查 [REASONING]
根据脚本报告,AI 额外做:
1. **矛盾检测**:随机抽取 5-10 个页面,检查不同页面对同一概念是否存在矛盾描述
2. **交叉引用建议**:检查相关页面之间是否缺少互相链接
3. **过时判断**:判断是否有页面内容已经过时(基于素材来源的时间戳和知识时效性)
---
## 工作流 6:status(知识库状态)[PROCEDURE]
1. 执行前置检查
2. 运行脚本:
```bash
python {SKILL_DIR}/scripts/status.py --wiki-root "<路径>"
```
3. 根据脚本输出的 JSON,生成用户友好的状态报告
4. 根据当前状态给出建议(如"你可能想深入了解 X,或者对 Y 做一次 digest")
---
## 工作流 7:graph(知识图谱)[MIXED]
脚本生成 Mermaid 代码,AI 在聊天中直接渲染给用户看。
### 第一段:生成图谱 [PROCEDURE]
```bash
python {SKILL_DIR}/scripts/graph.py --wiki-root "<路径>" --max-nodes 30
```
脚本输出 JSON,关键字段:`nodes`(节点数)、`edges`(关系数)、`mermaid`(Mermaid 代码)、`truncated`(是否截断)。
### 第二段:展示图谱 [REASONING]
1. 从脚本输出中提取 `mermaid` 字段
2. **直接在聊天中输出 Mermaid 代码块**(WorkBuddy/VS Code 会渲染为可视化图谱):
````markdown
```mermaid
{mermaid 代码}
```
````
3. 附带文字摘要:节点数、关系数、类型分布
4. 如果 `truncated: true`,告知用户"图谱较大,仅展示最核心的 {N} 个节点,可通过 `--max-nodes 50` 扩大范围"
5. 如果用户要求详细交互(缩放/拖拽/搜索),生成 HTML 版本:
```bash
python {SKILL_DIR}/scripts/graph.py --wiki-root "<路径>" --max-nodes 50 --format html
```
然后用浏览器预览生成的 `wiki/knowledge-graph.html`
---
## 页面生成规范
所有 wiki 页面必须遵循以下格式。
### Frontmatter(必须)
```yaml
---
tags: [标签1, 标签2]
created: YYYY-MM-DD
updated: YYYY-MM-DD
sources: [素材引用]
---
```
### 内容结构
- `# 一级标题`:页面名称
- `> 引用块`:一句话摘要(紧跟标题下方)
- `## 二级标题`:各 section
- `[[双向链接]]`:页面间引用(Obsidian 兼容)
- `[待创建: [[概念名]]]`:标记尚未创建的实体
### 实体页必须包含的 section
- 简介
- 关键信息
- 详细内容
- 不同素材中的观点(核心价值 section——这里存放跨素材的交叉验证和观点对比)
- 相关页面
### 素材摘要页必须包含的 section
- 基本信息
- 核心观点
- 关键概念
- 与其他素材的关联
- 原文精彩摘录
- 相关页面
عرض على GitHub