query · git:20261006.643223d · 2026-10-06 · sha256 2abf0ba2a5be2e9f
query git:20261006.643223dA
Immutable. This exact content never changes and is served at /api/v1/blob/2abf0ba2a5be2e9f.
---
name: query
description: 在本地 LLM Wiki 知识库中检索并回答问题。支持 `/query <问题>`。先读 index.md 定位,再深度阅读相关页面,综合出带 [[双链]] 引用的答案;若回答产生新洞见,主动提议保存为 synthesis / connection / question 页面。当用户说「wiki 里有没有关于 X 的内容」「帮我查一下 Y」「我的笔记里关于 Z 是怎么说的」时触发。禁止凭模型记忆回答。
user-invocable: true
---
# query 技能
## 前置:初始化
若 `.dsh/wiki.config.json` 或根目录的 `index.md` 不存在,说明骨架尚未生成,先跑一次 `python .dsh/scripts/setup_wiki.py`。知识库还没建立时没有可检索的内容,此时如实告知用户并建议先摄入资料。
## 路径以配置为准
`.dsh/wiki.config.json` 是本仓**唯一配置源**,目录名与文件名都从它读,不写死绝对路径:
```bash
python .dsh/scripts/wiki_env.py --paths # 常用目录一览
```
> 下文出现的 `wiki/papers/`、`wiki/concepts/`、`index.md`、`log.md` 等**均为默认值**;若 `wiki.config.json` 改过,以配置为准,拿不准先跑上面的自省命令。
## 核心目标
将用户的提问转化为对本地 Wiki 的深度检索。从 `wiki/` 下的 papers、concepts、connections、questions、syntheses 中提取相关信息,综合出带有明确 [[双链]] 引用的回答。当回答产生新洞见时,主动将其固化为知识库的一部分。
## 触发场景
- 用户输入 `/query <问题>`
- 用户用自然语言询问知识库内容,如"wiki 里有没有关于 X 的资料"、"帮我查一下 Y 概念"、"Z 和 W 之间有什么关系"、"有哪些论文讨论了 Q"
- 用户提及 wiki、知识库、论文、概念、连接等关键词且需要检索答案时
## 降级策略
如果问题属于纯通用知识(如"今天天气怎么样"),且通过步骤 1 确认 `wiki/` 中无相关内容:
> 本地知识库中未找到相关内容,以下为通用知识回答:
然后直接基于通用知识回答。**此情况下不记录 log.md**(因为未使用知识库)。
如果问题与工作区关注的主题相关但 wiki 中确实没有覆盖,如实告知并建议用户摄入相关资料。
---
## 检索与综合流水线
### 步骤 1:查阅全局索引 + 关键词搜索
**永远的第一步**:读取 `index.md`。
在 index.md 中定位与问题相关的页面。index.md 的分类结构如下(与 AGENTS.md 一致):
- **Papers** — 论文讲解页面(一篇论文一个文件)
- **Concepts** — 概念定义
- **Connections** — 跨概念连接
- **Questions** — 开放研究问题
- **Syntheses** — 综合论述
**补充搜索**:如果 index.md 中的条目名称不足以判断相关性,用 `grep` 在 `wiki/` 下按关键词搜索,确保不遗漏。
- `grep({ pattern: "<正则>", path: "wiki", include: "*.md" })` — 按内容检索
- `glob({ pattern: "wiki/**/*.md" })` — 按文件名检索
⚠️ 本技能运行在当前宿主的工具集上(DSH:`grep` / `glob` / `read`)。不要把工具名写成 `search_content`、`search_files` 之类——那些名字在本宿主不存在,会导致检索步骤直接失败,进而退化成"凭记忆回答",而这是本技能明令禁止的。
### 步骤 2:深度阅读目标页面
选取步骤 1 中找到的最相关页面(通常 2-5 个),完整读取其内容。阅读优先级:
1. **直接命中关键词的 concept 页面** — 概念定义最精炼,是理解的锚点
2. **相关的 paper 页面** — 有具体方法、结果和数据
3. **相关的 connection 页面** — 揭示跨概念关系
4. **相关的 synthesis 页面** — 已有综合论述,避免重复劳动
### 步骤 3:综合与回答
综合所有已读页面的信息,用清晰的逻辑组织答案。
**双链引用规范**:
- 引用某个 Wiki 页面的信息时,在文中使用 `[[页面名称]]` 标注
- 若整段内容来自同一页面,在段首或段尾引用一次即可
- 若引用特定原文,使用块引用:`> 原文内容`
- **答案末尾**列出"参考页面"汇总:
```
**参考页面**:[[page-a]]、[[page-b]]、[[page-c]]
```
**矛盾处理**:如果不同页面对同一问题给出了相互矛盾的说法,不要掩盖——在回答中明确指出矛盾所在,引用双方来源,并建议用户检查相关页面的 `## 知识冲突` 区块。
### 步骤 4:新洞见固化
如果本次回答满足以下任一条件,主动询问用户是否保存:
| 条件 | 保存类型 | 目录(默认值) |
|---|---|---|
| 综合了 2 个以上页面的信息,形成新的分析或对比 | synthesis | `wiki/syntheses/` |
| 揭示了已有概念之间尚未被记录的连接 | connection | `wiki/connections/` |
| 识别出一个值得追踪的开放问题 | question | `wiki/questions/` |
询问话术:
> 这次回答综合了 [[page-a]] 和 [[page-b]] 的内容,形成了一个新的 [综合分析 / 概念连接 / 开放问题]。是否需要我将其保存到对应目录?
用户同意后,按 AGENTS.md 规范创建页面:
**Synthesis 页面模板:**
```markdown
---
title: "综合论述标题"
type: synthesis
created: YYYY-MM-DD
updated: YYYY-MM-DD
sources: ["wiki/page-a.md", "wiki/page-b.md"]
tags: []
---
## 问题
[本次回答试图解决什么问题?]
## 综合论述
[综合后的完整论述。]
## 关联连接
- [[相关概念]]
- [[相关论文]]
```
**命名规则**:`synthesis-简短描述.md`
Connection 和 Question 页面的模板参见 `ingest/SKILL.md` 中的对应模板(注意 question 页面必须带 `updated` / `sources` / `## 关联连接` 三件套)。
创建后同步更新 `index.md` 的对应分类。
### 步骤 5:记录操作日志
查询结束后,在 `log.md` 顶部追加(**只能追加,不可覆盖已有内容**;操作类型只允许 `ingest / query / lint`;新条目必须独占一行并以空行结尾,追加后回读确认没有和旧内容粘连):
```markdown
## [YYYY-MM-DD] query | <问题简述>
- **输出**: <已保存至 [[新页面]];或"即时回答未保存">
- **参考**: [[page-a]], [[page-b]], [[page-c]]
```
格式遵循 AGENTS.md 中的示例。**如果是降级回答(未使用知识库),不记录 log。**
---
## 强制约束
- **禁止凭记忆回答**:必须先检索 `wiki/`,以知识库内容为唯一依据
- **禁止过度引用**:同一页面在同一段落中引用一次即可
- **禁止静默回答**:知识库无相关内容时必须声明"本地知识库中未找到相关内容"
- **禁止掩盖矛盾**:如发现不同来源的说法冲突,必须在回答中明确指出
- 使用简体中文回答,专有名词可保留英文
- 回答面向具有扎实数学/计算机背景的读者,不要降格简化
- 中英文混用没问题 — 用对概念最清晰的表达方式
---
## 关联连接
- [[index]] — 全局索引入口
- [[log]] — 操作日志
- [[AGENTS.md]] — Wiki 架构总规范