Skip to main content

my-wiki

用户提到"知识库"、"wiki"、"消化素材"、"整理到知识库",或对已初始化的知识库执行查询、健康检查、统计、lint、去重等操作。

インストールへ移動

ソース情報

リポジトリ
modoojunko/my-wiki-skill
ソースの最終更新活動
2026年4月7日 11:53
検出された SKILL.md の言語
中国語
スター
2
フォーク
0

インストール方法

デフォルトでは、最初にソースを確認する 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で見る