بنقرة واحدة
wiki-ingest
// 摄入新资料到 LLM Wiki 知识库。当用户提供新的文章、论文、笔记、截图等资料要求添加到知识库时使用。触发词包括:摄入、ingest、添加资料、新资料、导入、导入资料、摄入资料、添加到 wiki、加入知识库。即使用户只说"帮我整理这篇资料"或"把这个加入知识库"也应该触发。不用于查询知识库内容或检查 Wiki 健康。无参数调用时自动扫描 raw/ 目录处理未摄入的文件。
// 摄入新资料到 LLM Wiki 知识库。当用户提供新的文章、论文、笔记、截图等资料要求添加到知识库时使用。触发词包括:摄入、ingest、添加资料、新资料、导入、导入资料、摄入资料、添加到 wiki、加入知识库。即使用户只说"帮我整理这篇资料"或"把这个加入知识库"也应该触发。不用于查询知识库内容或检查 Wiki 健康。无参数调用时自动扫描 raw/ 目录处理未摄入的文件。
翻译 Markdown 文档为中文,并格式化为 Obsidian 兼容的 Markdown。用户指定文件或目录路径,翻译 front matter(title 简化翻译、description 翻译)和正文内容,使用 Obsidian Callout 等语法美化输出。触发词:翻译文档、translate、翻译 markdown、doc translate、翻译文件、translate doc。即使用户只说"翻译这个文件"或"把这个翻译一下"也应该触发此 skill。
删除 Wiki 中的源资料及其关联页面,级联清理索引、引用和元数据。触发词包括:删除、delete、移除、remove、清理 wiki、清理摄入。当用户想删除某个已摄入的资料或清理错误摄入的内容时使用。不用于摄入新资料、查询或健康检查。
检查 LLM Wiki 知识库的健康状况。扫描所有 Wiki 页面,发现矛盾、过时信息、孤立页面、失效链接、缺失摘要等问题。触发词包括:lint、检查、wiki 检查、健康检查、检查 wiki、wiki lint、检查知识库。即使用户只说"检查一下知识库"或"wiki 有没有问题"也应该触发。不用于摄入新资料或查询知识库内容。
查询 LLM Wiki 知识库内容并基于 Wiki 页面回答问题。当用户的问题涉及知识库中已有内容时使用——技术概念解释、实体信息、主题对比、知识关联等。触发词包括:查询、query、搜索、查找、搜索知识库、查一下、问一下。当用户问的是知识库覆盖的话题(编程、数学、密码学、设计模式、Docker、Git、OAuth2 等已有概念),即使没有明确说"查询知识库",也应考虑使用。不用于摄入新资料或检查 Wiki 健康。
通过网络搜索深入研究某个主题,自动将搜索结果摄入知识库。触发词包括:研究、research、深入调查、搜索资料、查资料、调研。当用户想对某个主题进行深入研究或知识库内容不足需要补充时使用。不用于摄入已有文件(/ingest)、查询知识库(/query)或删除内容(/delete)。
Generate Excalidraw diagrams from text content for Obsidian. Use when user asks to create diagrams, flowcharts, mind maps, or visual representations in Excalidraw format. Triggers on "Excalidraw", "画图", "流程图", "思维导图", "可视化", "diagram".
| name | wiki-ingest |
| description | 摄入新资料到 LLM Wiki 知识库。当用户提供新的文章、论文、笔记、截图等资料要求添加到知识库时使用。触发词包括:摄入、ingest、添加资料、新资料、导入、导入资料、摄入资料、添加到 wiki、加入知识库。即使用户只说"帮我整理这篇资料"或"把这个加入知识库"也应该触发。不用于查询知识库内容或检查 Wiki 健康。无参数调用时自动扫描 raw/ 目录处理未摄入的文件。 |
将新资料摄入知识库:提取关键信息,创建/更新 Wiki 页面,维护索引和元数据。
做且只做摄入新资料。不处理查询(那是 /query)和健康检查(那是 /lint)。
如果用户的问题看起来像是在问知识库内容("XX是什么"),引导他们使用 /query。
开始处理前,检查工具链可用性并自动修复问题:
# 1. 检查 qmd 搜索引擎
qmd-node search "test" --files -n 1
# 2. 检查 qmd 索引目录是否指向本项目 wiki/
qmd-node collection show wiki
qmd 索引路径不正确时,自动修复:
# 移除旧集合,添加指向本项目 wiki/ 的新集合
qmd-node collection remove wiki
qmd-node collection add wiki "<项目根目录>/wiki"
修复后输出一条提示说明已自动修正。路径从 collection show wiki 输出中提取,与本项目的 wiki/ 目录绝对路径对比。
qmd 完全不可用时(命令执行失败):
grep -rl "关键词" wiki/扫描 wiki/.status.json 中是否有 status: "pending" 的条目:
# 伪代码:扫描 pending 条目
for path, entry in status.json["processed"].items():
if entry.get("status") == "pending":
print(f"中断: {path} (started at {entry['started_at']})")
如果有 pending 条目,输出报告并让用户选择:
created_pages 列表),然后重新处理根据用户输入决定处理模式:
| 用户输入 | 行为 |
|---|---|
/ingest(无参数) | 自动扫描 raw/,找到所有未处理文件,按修改时间从新到旧依次处理 |
/ingest raw/路径/文件.md | 直接处理指定文件 |
/ingest URL | 抓取 URL 内容,保存到 raw/ 再处理 |
| 用户粘贴内容 | 保存到 raw/ 再处理 |
wiki/.status.json 获取已处理文件列表及其 hash.md 文件sha256sum,与 status.json 中的 hash 对比不需要向用户确认。发现未处理文件后直接进入提取流程。
当 status.json 的 processed 为空但 wiki/ 已有页面时(说明之前的摄入未记录追踪信息),使用文件时间比较来识别真正新增的文件:
# 找到 wiki 最近更新的时间戳
# 然后只处理比该时间更新的 raw 文件
find raw/ -name "*.md" -newer wiki/index.md -type f
这种情况下输出提示:检测到 status.json 追踪为空但 wiki 已有内容,使用文件时间比较识别新增文件。如需补全全部追踪记录,请先运行 /lint。
对每个待处理文件,按以下步骤执行:
开始处理前:在 .status.json 中写入 pending 状态:
{
"raw/路径/文件.md": {
"status": "pending",
"started_at": "2026-05-09T10:30:00",
"raw_hash": "sha256-hash"
}
}
阅读原始文件完整内容。如果文件超过 2000 行,分段读取。
创建新页面前,先搜索知识库中是否已有相似内容。
qmd 可用时:
qmd-node search "概念名或实体名" --files
qmd-node query "相关描述" --files -n 5
qmd 不可用时,用 Grep 替代:
# 搜索已有页面内容中的关键词
grep -rl "关键词" wiki/
# 检查 index.md 中是否已有相关条目
grep "关键词" wiki/index.md
对于每个准备创建的实体/概念:
这一步只做分析,不写任何文件。专注理解资料内容与现有知识库的关系。
分析资料内容,输出以下结构化分析清单:
来源信息:
新建实体(资料中提到有知识价值的人物、组织、项目、工具):
新建概念(资料涉及尚未收录的技术概念):
与已有知识的关联(基于步骤 2 的搜索结果):
矛盾与歧义(如果发现):
基于步骤 3 的分析清单,按 CLAUDE.md 中的页面格式约定,创建/更新以下页面:
wiki/sources/)wiki/entities/)wiki/concepts/)使用 Write/Edit 工具直接操作文件。每个页面都必须有 50-100 字的摘要段落(frontmatter 后到第一个 ## 之间)。页面间引用使用 [[wikilink]] 语法。
来源可追溯性检查:写入每个 wiki 页面后,验证 frontmatter 中 sources: 字段非空。如果缺失,自动填充当前摄入对应的 source 摘要页 wikilink(如 [[sources/对应摘要页]])。
如果步骤 3 的分析中发现了矛盾或歧义,追加到 wiki/.review-queue.md:
### R{N}: {简短标题}
- **类型**:contradiction | ambiguity | categorization
- **来源**:[[sources/对应来源页]]
- **内容**:具体描述发现的问题
- **建议操作**:创建新页面 / 合并到已有页面 / 跳过 + 具体说明
- **预生成搜索**:`qmd-node search "..."`(方便用户一键搜索验证)
- **状态**:pending
没有矛盾/歧义时跳过此步骤。
更新 wiki/index.md:在对应类别下添加新条目(链接 + 一句话摘要)。
追加 wiki/log.md:
## [YYYY-MM-DD] ingest | 资料标题
- 创建了 [[sources/资料标题]]
- 更新了 [[entities/实体X]]
- 新增 [[concepts/概念Y]]
读取 wiki/index.md 和 wiki/log.md 末尾 20 行,生成/更新 wiki/overview.md。
内容结构:
---
title: 知识库概览
last_updated: YYYY-MM-DD
page_count: N
source_count: N
---
150-200 字摘要段落,描述知识库整体覆盖范围、核心知识领域、最近摄入方向。
## 知识领域分布
| 领域 | 页面数 | 核心主题 |
|------|--------|----------|
## 最近变更
- [日期] 变更描述
不需要读取全部 wiki 页面,index.md + log.md 即可生成。每次 ingest 覆盖更新。
计算 raw 文件和所有新建/更新页面的 SHA-256 hash:
sha256sum "raw/路径/文件名" "wiki/sources/页面.md" "wiki/concepts/概念.md" ...
更新 wiki/.status.json,添加或更新对应条目:
{
"processed": {
"raw/路径/文件名.md": {
"ingested_at": "YYYY-MM-DD",
"raw_hash": "sha256-hash",
"source_page": "wiki/sources/对应摘要页.md",
"created_pages": ["wiki/concepts/概念1.md", "wiki/entities/实体1.md"],
"page_hashes": {
"wiki/concepts/概念1.md": "sha256-hash",
"wiki/entities/实体1.md": "sha256-hash"
},
"last_lint_at": null
}
}
}
每个文件处理完后:
qmd-node update && qmd-node embed
如果是批量处理多个文件,可以等全部处理完后再执行一次。
qmd 不可用时跳过此步骤,在汇总报告中提醒用户。
当发现多个待处理文件时:
当用户提供 URL、粘贴内容、截图等非 raw/ 文件时:
归类参考:
| 资料类型 | 目标目录 |
|---|---|
| 编程技术资料 | raw/编程学习/ |
| AI 相关 | raw/编程学习/专项研究/Ai/ |
| 数学资料 | raw/数学/ |
| 英语资料 | raw/英语/ |
| 翻译文档 | raw/文档书籍翻译/ |
| 项目相关 | raw/UOCS开发/ |
保存到 raw/ 后,按上述步骤 1-6 处理。
每个文件处理完后自检:
sources: 字段非空[[wikilink]]index.md 已更新log.md 已追加记录overview.md 已更新.status.json 已更新且 hash 正确