### 诊断流程样例
**场景**:准备对 5,000 条 session 做批量标签分类,历史上出现过 100 条全失败、Fornax JWT 长跑失效、endpoint 404、Safe Experience Mode 暂停等问题。
**输入**:
| 输入 | 来源 | 用途 |
| --- | --- | --- |
| runner config | 批量打标脚本参数或 YAML | 读取 backend、model、endpoint、prompt、输出字段 |
| credentials | 环境变量、本地 token/JWT 缓存 | 判断 key/JWT 是否可用、是否需要刷新 |
| sample rows | 待打标 CSV 前 3-10 行 | 用真实字段做 smoke test,避免空样本误判 |
| taxonomy/schema | 当前标签枚举与输出 schema | 检查模型输出是否可解析、可唯一补全 |
**命令**:
```bash
python tools/model_batch_backend_doctor.py \
--runner-config configs/batch_label_v31.yaml \
--sample-csv data/input/session_sample.csv \
--backend auto \
--limit 5 \
--json-out out/backend_health.json
```
**检查顺序**:
1. 读取 runner config,确认 endpoint、model、key/JWT、payload 字段名存在。
2. 用真实 sample 发送最小请求;Ark 类后端检查 chat/completions,Fornax 检查 evaluator payload 是否使用 `input_data.input_fields`。
3. 把错误归因到固定桶:认证失败、端点不存在、账号推理上限、payload 协议错误、模型输出 schema 错误。
4. 若 primary backend 失败,自动尝试 fallback backend,并输出可直接传给 runner 的 backend 参数。
5. 若 sample 通过,再允许全量任务启动;若 sample 失败,阻止全量运行。
**成功信号**:`backend_health.json` 中 `status=ok`、`recommended_backend` 非空、sample 成功率 100%、输出字段能通过本地 schema 校验。
**失败信号**:返回非 0 exit code,并输出类似 `action=refresh_jwt`、`action=replace_endpoint`、`action=switch_backend` 或 `action=fix_fornax_payload` 的明确下一步。