ask · git:20261030.a103b40 · 2026-10-30 · sha256 ad31dc7fcdd340f4

ask git:20261030.a103b40A

Immutable. This exact content never changes and is served at /api/v1/blob/ad31dc7fcdd340f4.

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

# Ask

知识库的快问快答。读正文词条不超过 2 个(流程类 3 个、阈值题 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 按码、变量、背景三选一跑一条,错误码表零命中再加缺口索引一条;查证最多读 2 个正文(族表加缺口或结构词条),族表零命中判「只有相关」,不再换族。

```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 个,它再点名不再读;把该 `check` 里的分流判据抄进行 2(例:通信算子逐个没变慢 → 重叠变差)。
- `.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 行 ≤50 字 |
| 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/`)不许当第一动作。查证与术语的第一动作必须落到具体文件、子目录或命令(`plog-pid_*.log`、`grep ERROR` 取首报错),不许停在目录级。
- 新手落点:从问法推断是新手(「是不是我哪一步没装好」「怎么弄」这类自我归因)时,行 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。流程的第 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;答完不追问。