# R2.2.8 任务报告

## 结果

已增强 Sub2API 只读诊断 CLI，按分组和上游账号归因近期请求质量。默认输出保持 Kubernetes 风格表格，完整展示账号名称和账号 ID；显式 `--json` 提供紧凑语义摘要，整组概要通过 `--account` 和 request ID 渐进下钻。未修改 Sub2API runtime、YAML、账号调度或源码运行面。

## 数据口径

- 成功请求、流式请求和账号 TTFT 来自 Sub2API 原生 `/api/v1/admin/usage`。
- 客户可见错误来自原生 `/api/v1/admin/ops/request-errors`。
- 切号、同账号重试、临时不可调度和 `forward_failed` 来自原生 system-log 索引，并自动分页读取近期窗口。
- 失败分子按 request ID 去重；账号 attempts 是上游账号尝试次数，不等于客户请求数，切号时一个客户请求可以计入多个账号。
- 评分权重为可靠性 60、TTFT 25、当前可用性 15，置信度单独计算。TTFT 少于 5 个样本不按零时延计分。
- 至少 10 次尝试且至少 5 个 TTFT 样本时，才把高分映射为 A-D 可比较等级；样本不足的偶然高分标记为 `insufficient`。至少 10 次尝试且评分低于 60 时保留 E，避免高失败率被证据不足掩盖。
- 账号名称是人类可读运维信息，报告和 CLI 完整输出；API Key、token、credentials 继续脱敏。

## 近期只读快照

采样窗口为 2026-07-14 05:32-05:35 UTC 向前 60 分钟，滚动值会随请求变化。

- 所有分组共 530 个请求、13 个客户错误，客户错误率 2.45%，上游错误率 6.60%。
- `unidesk-codex-pool`：约 219 个请求、7 个客户错误，客户错误率 3.20%，上游错误率 13.24%，队列为 0。
  - `https://api.iceiu.com plus 0.03`（ID 33）：89.9/B/healthy，高置信；172 次尝试、3 次失败，失败率 1.74%，TTFT P95 42.87 秒；有 3 个 `forward_failed`，未形成客户错误。
  - `https://sub.yjxm1221.top plus 0.025`（ID 27）：15/E/poor，中置信；39 次尝试、26 次失败，失败率 66.67%，TTFT P95 202.12 秒；23 个切号请求，18 个恢复、5 个失败，3 次临时不可调度、3 个 `forward_failed`、7 个客户错误。它是该分组近期客户可见错误的主因。
  - `https://ai.whistlelads.com plus 0.03`（ID 28）：20/E/poor，低置信；11 次尝试全部失败；11 个切号请求全部由后续账号恢复，12 次临时不可调度，未形成客户错误。说明现有切号有效遮蔽了该账号故障，但源账号质量差。
  - `https://sub2.pokexiao.com plus 0.03`（ID 31）：样本内 100 分，但只有 8 次尝试，等级为 `insufficient`，不能据此认定为优质账号。
  - `https://api.lwylink.xyz pro 0.1`（ID 29）和 `https://api.lwylink.xyz plus 0.05`（ID 30）当前不可用且无近期成功证据。
- `自用`：约 326 个请求、5 个客户错误，客户错误率 1.53%，上游错误率 2.15%，队列为 0。
  - `https://api.iceiu.com plus 0.03`（ID 33）：93.5/A/preferred，高置信；230 次尝试全部成功，TTFT P95 53.94 秒。
  - `https://sub2.pokexiao.com pro 0.05`（ID 32）：77.9/C/watch，中置信；33 次尝试、1 次失败，切号后恢复，TTFT P95 98.49 秒。
  - `lyon9801`（ID 15）：55.9/E/poor，中置信；34 次尝试、5 次失败，失败率 14.71%；5 次切号均未恢复，5 个客户错误，是该分组近期客户可见错误主因。
- `grok` 分组近期无请求和错误。
- 两个活跃分组均无排队，当前证据不支持把降低全局上游并发作为主修复方向。
- 近期未观察到同账号重试事件；不能把“未观察到”解释为功能不存在。

## CLI 行为

- `runtime errors --all-groups`：所有分组概要和稳定分页。
- `runtime errors --group <name-or-id>`：分组内完整账号名称、评分、置信度、错误、切号和 TTFT 表格。
- `runtime errors --group <name-or-id> --account <name-or-id>`：单账号详细归因和 request index。
- 整组 `--json` 保留所有账号名称和质量概要；请求级证据通过 `--account` 下钻，不依赖手工 `limit`。
- 单账号 JSON 实测 9248 字节、整组 JSON 实测 9058 字节，均低于 10240 字节输出预算；未出现 `outputTruncated`，也未暴露内部 `_requestIds`。

## 结论与后续建议

主因不是池总并发或排队，而是少数上游账号的高失败率和长 TTFT：`https://sub.yjxm1221.top plus 0.025` 与 `lyon9801` 会把错误直接传给客户，`https://ai.whistlelads.com plus 0.03` 虽被切号遮蔽但持续消耗 failover。下一步若获准调优，应优先基于高置信/中置信评分调整账号优先级或临时不可调度，并继续保持 `lyon9801` 的既有例外约束；低置信账号先积累样本，不应自动调度。任何自动评分到 runtime 的闭环都应另行审批，本任务没有实施。

## 验证

- `bun --check scripts/src/platform-infra-sub2api-codex/runtime.ts`
- `bun --check scripts/src/platform-infra-sub2api-codex/remote-python-sync.ts`
- `bun --check scripts/src/output.ts`
- `bun test scripts/src/output.test.ts`：2 pass，0 fail。
- `git diff --check`
- PK01 原生只读命令已验证 all-groups、group 2、group 3、account 27、默认表格和显式 JSON。
