| name | wiki-query |
| description | 查询 LLM Wiki 知识库内容并基于 Wiki 页面回答问题。当用户的问题涉及知识库中已有内容时使用——技术概念解释、实体信息、主题对比、知识关联等。触发词包括:查询、query、搜索、查找、搜索知识库、查一下、问一下。当用户问的是知识库覆盖的话题(编程、数学、密码学、设计模式、Docker、Git、OAuth2 等已有概念),即使没有明确说"查询知识库",也应考虑使用。不用于摄入新资料或检查 Wiki 健康。 |
Wiki Query(知识库查询)
基于 Wiki 页面内容回答用户问题,通过搜索、排序、综合三个阶段给出精准回答。
边界
基于 Wiki 已有内容回答问题。不摄入新资料(那是 /ingest),不做健康检查(那是 /lint)。
如果用户的问题需要新资料才能回答,提示用户提供资料并使用 /ingest。
前置检查
首次搜索前,检查搜索工具可用性并自动修复问题:
qmd-node search "test" --files -n 1
qmd-node collection show wiki
qmd 索引路径不正确时,自动修复:
qmd-node collection remove wiki
qmd-node collection add wiki "<项目根目录>/wiki"
修复后输出一条提示说明已自动修正。
qmd 完全不可用时(命令执行失败),直接使用 Grep 作为搜索工具,输出提示:
⚠️ qmd 搜索引擎不可用,使用 Grep 替代。搜索精度可能降低。
判断是否需要查询
不是所有问题都需要走完整查询流程。快速判断:
- 需要查询:问题涉及知识库中的具体概念、实体、主题,需要综合多个页面回答
- 直接回答:一般性编程问题、数学公式、常识问题——这些不需要查询知识库
- 不确定:先快速搜索,有结果就走查询流程,没有就告知用户知识库中暂无相关内容
搜索流程
步骤 1:搜索获取候选页面
qmd 可用时:
qmd-node query "用户的查询内容" --files -n 20
qmd-node search "精确术语" --files -n 10
qmd 不可用时,用 Grep 替代:
grep -rl "关键词" wiki/ --include="*.md"
grep -i "关键词" wiki/index.md
步骤 2:图扩展(2-hop wikilink 发现)
从步骤 1 的搜索结果中,提取每个候选页面包含的 [[wikilinks]],找到 1-hop 邻居。再从这些邻居页面中提取 wikilinks,得到 2-hop 邻居。
将图扩展发现的页面加入候选列表,标记为"图扩展发现"。这些页面可能与查询没有直接关键词匹配,但通过知识网络结构关联。
Grep 快速提取 wikilinks:
grep -oP '\[\[([^\]]+)\]\]' wiki/sources/候选页.md wiki/concepts/候选概念.md
步骤 3:精准读取 + 预算控制
预算分配(基于约 100K token 上下文窗口估算):
| 分配 | 比例 | Token 预算 | 内容 |
|---|
| 全局上下文 | 10% | ~10K | overview.md 前 30 行 + index.md |
| 深入阅读 | 60% | ~60K | 排序后的 top 页面全文 |
| 图扩展 | 15% | ~15K | 2-hop 页面的摘要段落(前 20 行) |
| 系统提示 + 输出 | 15% | ~15K | CLAUDE.md 规则 + 回答 |
执行顺序:
- 读取
wiki/overview.md 前 30 行(全局上下文)
- 读取排序后的 top 页面全文(深入阅读),从最高分开始,累计 token 直到 60K 预算用完
- 对图扩展发现的页面,只读前 20 行(摘要段落),累计到 15K 为止
- 如果 top 页面 < 3,告知用户搜索范围有限
步骤 4:聚合排序
按以下规则对所有候选页面(搜索结果 + 图扩展)排序:
- 搜索直接命中 > 图扩展发现(搜索结果优先级更高)
- 概念页面 > 来源摘要页面(概念页更精炼)
- 同页面多段落命中 → 排名提升
- 被更多页面引用 → 微调提升(用 Grep 统计
[[页面名]] 出现次数)
步骤 5:综合回答
基于步骤 3 读取的 Wiki 内容(而非原始资料)回答用户问题,遵循以下原则:
- 回答要综合多个相关页面的信息,不是复述单一页面
- 引用相关页面使用
[[wikilink]] 语法,方便用户在 Obsidian 中跳转
- 如果图扩展发现了间接关联页面,体现这些关联("此外,通过 XX 关联到 YY...")
- 如果 Wiki 中的信息不足以完整回答,坦诚说明并建议补充相关资料
步骤 6:回填洞察
如果回答过程中产生了新的洞察(以下任一情况),创建综合页面:
需要回填的情况:
- 对比了多个概念/实体的异同
- 发现了页面间未被记录的关联
- 综合多个来源得出了新结论
- 回答本身就是一篇综述性的分析
不需要回填的情况:
- 简单的事实查询("XX 是什么")
- 直接复述单个页面的内容
- 一般性的解释和定义
回填时,按 CLAUDE.md 中综合页面的格式创建 wiki/synthesis/ 页面,并同步更新 wiki/index.md 和 wiki/log.md。
搜索回退策略
如果搜索结果不足:
- 搜索结果 < 3 → 尝试拆分查询词,分别搜索
- 仍然不足 → 读取
wiki/index.md 手动定位相关页面
- index.md 也没有 → 提示用户知识库中暂无相关内容,建议:
- 补充相关资料(使用
/ingest)
- 或运行
/lint 检查是否有孤立页面未被索引