Files
pikasTech-unidesk/docs/MDTODO/details/sub2api-upstream-reliability/R2.2.20_Task_Report.md
T

2.6 KiB
Raw Blame History

R2.2.20 任务报告

目标

快速缓解客户错误 #17440request ID e5c08dde-9e60-4a14-9458-5574cec00b65),只使用 YAML-first 通用临时不可调度模板和受控 runtime CRUD,不修改 Sub2API 源码、账号容量、优先级、代理或凭据。

根因证据

  • 原生 trace 显示请求先由账号 27(https://sub.yjxm1221.top plus 0.025)返回 400,精确短语 Input must be a list 已命中既有 400 规则并触发第一次 failover。
  • 第二跳账号 31https://sub2.pokexiao.com plus 0.03)等待约 60.6 秒后返回 504;响应 detail 仍为 Input must be a list
  • 第二次 failover 已进入,但选号时客户 context 已取消,最终 reason=failover-attempted-no-candidate。因此客户可见 504 的直接原因是第二跳耗尽请求时间窗,而不是首跳 400 未切号。
  • 账号 31 在此前 30 分钟有 75 次尝试、8 次失败、失败率 10.67%,该窗口唯一客户错误就是本请求;2 小时窗口质量仍为 B,故不据单次事件调整长期容量或优先级。

配置调优

owning YAMLconfig/platform-infra/sub2api-codex-pool.yaml

在通用模板 codex-upstream-failover 的精确 504 规则中加入关键词 input must be a list,冷却时间保持 1 分钟。该规则只匹配实际 504 与稳定短语,不泛化到其他 4xx/5xx,也不涉及 auth 错误。

通过显式 selector 19,27,28,29,30,31,32,33,34 对 9 个非 lyon9801 OpenAI 账号执行:

  1. 批量 dry-runselected=9、changed=9、failed=0。
  2. 批量 confirmselected=9、succeeded=9、failed=0。
  3. 回读账号 31 和 27:504 规则均包含 input must be a list,模板匹配正常。
  4. 回读 lyon9801:临时不可调度仍为 disabled、0 条规则,例外未被改变。

下发后观察

下发后的近期 10 分钟原生 Ops 窗口:

  • 请求 88
  • 客户错误 0,错误率 0.00%
  • failover 8 次,8 次均恢复成功;
  • select failed 0
  • 临时不可调度命中 4 次;
  • 当前排队 0。

该窗口尚未出现新的“504 + Input must be a list”样本,因此只能证明配置已实际生效且未见副作用,不能把短窗口零错误宣称为长期因果验证。

边界与剩余风险

本次规则会在同类 504 首次发生后短时摘除对应账号,减少连续客户请求重复命中;它无法挽救已经在第二跳耗尽 context 的当前请求。若同类首次错误仍频繁穿透,下一步应从 Sub2API 源码能力解决 failover 时间预算/每跳超时,而不是继续扩大关键词或盲目降低全池并发。