---
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 架构总规范
