---
name: ask
description: >
  昇腾知识库快问快答：用户问一个能一句话问完的问题（错误码或环境变量取值、某类问题怎么定位、
  本次现象先查什么、某个术语是什么、库里有没有收录）时，用单个索引文件定位，读不超过 2 个词条，
  按固定 5 行格式答「一句话 + 表或候选 + 一条可粘贴命令 + 作用域 + 出处」。
  面向新员工、相邻域工程师、定位工程师。症状类只给候选与一条判别动作并转 diagnose。
  不写 trace、不建 session、不写文件。
---

# Ask

知识库的快问快答。读正文词条不超过 2 个（流程类 3 个）、单轮写不超过 400 字（导览 600），给出一个用户能立刻粘贴执行或立刻核对的答案。

## 1 何时用、何时不用

用：问题能用一句话问完，答案落在库里某段文字；问法属于码、变量、流程、现象、术语、覆盖之一。
不用，转 `/skill:diagnose`：带着一次具体故障要结论；要一串动作才收敛；已有修复要判能不能上生产。
判据：一句话能给出可核对的答案。

## 2 两个入口

判据是题干形态，不问用户。

| 入口 | 题干 | 第一步 |
|---|---|---|
| 从现象进 | 带本次现场：报错原文、日志行、某个数值 | 先归第 3 节的类再进支，不给结论 |
| 从概念进 | 只有类别词与「一般 / 有哪些 / 怎么判」 | 先给该性质的导览，再落到那一支 |

现象进是「分类 → 支 → 动作」，概念进是「面 → 支 → 动作」，后者行 2 给全 4 到 6 支。导览在 `skills/ask/references/overview.md`；未落地时用第 4 节类 2 的命令列支。

## 3 五类问题分流

| 类 | 带来什么 | 读什么 | 模板 |
|---|---|---|---|
| 1 查事实 | 一个码、一个变量名、一个规格数字 | 一个 `references/errors/<族>.yaml` 或 `env-vars/<模块>.yaml` | §1 查证 |
| 2 查流程 | 某类问题怎么定位 | 一个性质分片 + 一个流程词条 | §2 导览 |
| 3 报现象 | 卡住、NaN、慢、精度掉 | `_summary-index.yaml` + 一个故障模式域表 + 一个 `.list` | §3 现象转诊 |
| 4 问术语 | 一个名词或平台代号 | `glossary.md` + `_summary-index.yaml` | §4 术语解释 |
| 5 查覆盖 | 库里有 X 吗 | `_code-gaps.yaml` + 一个 `.list` | §1 查证 |

只跑本类那一组命令：类 2 不跑类 3 的 `.list`，类 3 不跑流程分片。类 3 必须带转诊（第 7 节）。

## 4 检索步骤

一条命令只打开一个文件，不跑通配。性质取 `interrupt` / `precision` / `performance`。类 1 按码、变量、背景三选一跑一条，错误码表零命中再加缺口索引一条。

```bash
# 1 查事实（族按第 2 位定）
grep -n "<码>" references/errors/<族>.yaml
grep -n "<变量名>" references/env-vars/<模块>.yaml
grep -n "<组件、工具或平台词>" references/_summary-index.yaml
grep -n "<码>" references/errors/_code-gaps.yaml          # 错误码表零命中才跑

# 2 查流程：开性质分片，命中行的 file 字段即词条
grep -n "<现象词>" references/_procedure-index/<性质>.yaml

# 3 报现象（域表按现象选：卡住 process-hang、中断 process-interrupt、精度 precision-threshold-cascade、性能 training-performance-case-patterns、显存 memory-symptom-triage）
grep -n "<现象词>" references/fault-patterns/<域>.yaml
grep -n "<现象词>" knowledge/_index/<ns>__<category>.list

# 4 问术语
grep -n "<术语>" skills/ask/references/glossary.md references/_summary-index.yaml 2>/dev/null

# 5 查覆盖（ns 未定时只读 common.list）
grep -n "<码或现象词>" references/errors/_code-gaps.yaml knowledge/_index/<ns>__<category>.list
```

读结果的规则：

- 同一命令最多跑两次，两次都在同一文件内换词；两次零命中才判「库里没有」。
- `_summary-index.yaml` 一行一条，行内 `summary` 即背景。
- 流程分片命中后读 `file` 指的词条完整 `flow`（每步 `action` 与 `check`），不得只看 `name:`；命中支的 `check` 点名另一个词条时，允许再读那 1 个，它再点名不再读。
- `.list` 一行一条 case，`id`、`title`、`symptoms`、`compat` 可直接引用；`compat` 不符只降置信度。
- 错误码表没有行 → `_code-gaps.yaml` 的 `seen_in` 指到有修法的表；`no_home` 段是「全库没有这个码」的清单。

## 5 输出形态

写前先从命中的 1 到 2 个词条抄 3 到 5 条必含项（数字、阈值、判别、取值、状态词），写完逐条核；少一条先补，补完再删铺陈。

| 行 | 内容 | 行数与每行字数 |
|---|---|---|
| 1 态加一句话 | 先写态：命中 <id> / 只有相关（最近一条 <id> 覆盖什么）/ 库里没有 <X>；信息不足写「现在无法归类，缺 <哪一项>」。再接结论。 | ≤60 字 |
| 2 表或候选 | 查证与术语 ≤4 行、每行 ≤45 字；现象 ≤3 行、每行 ≤30 字；导览 4 到 6 行、每行 ≤22 字（每行带该支的数字或阈值） | 见左 |
| 3 第一动作 | 用户机器上能跑的命令 | 1 行 ≤40 字 |
| 4 作用域 | 照抄命中词条的 `applies_to`；命中两条取交集；`cross` 只对那条成立；用户平台不被覆盖时加一句 | ≤35 字 |
| 5 出处 | ref-id + last_verified | 1 行 |

- 问「是什么」「默认多少」省行 3；其余题形五行全给。
- 第一动作由你写，用户侧对象先取变量再拼，例 `PID=$(pgrep -f 'python.*train\.py' | head -1)` 后接 `asys collect -r=stacktrace --remote=$PID`。命令不是事实、不需出处，但不能编参数与默认值。库内路径（`references/`、`knowledge/`）不许当第一动作。
- 落点行：从问法推断是新手（「是不是我哪一步没装好」「怎么弄」这类自我归因），在行 3 前加一行：在哪跑、跑完看哪一行。
- 术语闸：内部词首现加 4 到 12 字括注（算子接口 / 执行形态 / Host 应用日志 / 流号），算进字数。
- 信息不足以分类：行 2 前加「我按 <负载类型 × 性质> 答，<另一种> 说一声」，不列待补清单。
- 不写检索过程、不写读了哪些文件。模板在 `skills/ask/references/answer-templates.md` §1 到 §4。

## 6 三态与硬规则

状态词：命中（行里有直答）、只有相关（码只在 `_code-gaps`、只有相邻模式或相邻流程）、库里没有（同一文件换词两次零命中）、无法归类（信息不足，缺 <哪一项>）。

1. 不许问用户是哪类人。角色只从问法推断，只决定详略。
2. 不许编造。事实与数字来自这次读到的行；词条里的举例值、示例算子名、示例版本，用户原文没出现时不得当用户的事实，写成「若你日志里是 X」。
3. 不许把「没查到」写成「一般是」「通常是」。
4. 症状类不给结论：给 ≤3 个候选、第一动作、一句转诊；不出现「原因是」「大概率是」。
5. 引用以词条原文为准，结论与所引词条冲突按编造处理。
6. 出处与作用域必给；给不出出处写「未给出来源」。
7. 澄清至多 1 轮，用默认值加可纠正形式。
8. 单轮硬线 ≤400 字（导览 ≤600）。分档目标：查证 200、术语 200、现象 400、导览 600，只决定 5 分档，不是删除线。超硬线按序删 ①背景解释 ②并列候选第 3 条以后 ③重复解释。事实不删：数字与阈值、两型判别、开关名与取值、版本门槛、状态词、作用域、出处、第一动作与落点、术语括注、回滚与重启方式。

## 7 转诊

| 情形 | 去哪 | 一句 |
|---|---|---|
| 有现场证据要往下定结论 | `/skill:diagnose` | 判别动作先给，转诊跟在后面，转诊不是第一动作 |
| 只有官方文档能答 | 给文档面与检索词 | 不贴没核过的链接 |
| 平台或版本不明 | 让用户跑 `npu-smi info` | 一句话，不解释命令 |
| 库里没有且缺口可复用 | `/skill:to-reference`、`/skill:to-postmortem` | 补的是 <id> |

## 8 读预算（两轮合计）

- 正文词条 ≤2；流程类 ≤3，第 3 个只能是被第 1 个的 check 点名的那一个，它再点名不再读。
- 第二轮默认不新开词条，只回读已读文件；第二问出现新对象（新码、新术语、新现象）才 +1，合计 ≤3。
- 索引 ≤2：一个 `.list`、`_summary-index.yaml`、性质分片、`_code-gaps.yaml` 各算一个。
- 一条命令只对一个文件；禁止 `grep -rn` 跨目录扫。
- 不读 `knowledge/` 下的 case 本体、`references/_archive/`、`references/README.md`；case 只从 `.list` 行取。
- 读到上限就用已读的答，答不出写「只有相关」。
- 不写 trace、不建 session；答完不追问。
