perf(LLM任务): 首查短超时快速失败 + 退避抖动 + 标题失败跳过外观识别

生产 24h 数据:外观专利任务 LLM 重试失败 93+82 次几乎全是超时,
终态 41 行降级为「外观识别异常」;成功调用 p99=34s、超 60s 仅 0.02%。
原策略每轮重试都挂满 90s(被全局 call-timeout 钳制),且 1.5s/3s
密集重试整批落在同一劣化窗口内。

- 第 1 次尝试改用 llm-first-attempt-read-timeout-millis(默认 60s)快速失败,
  重试走完整读超时,慢而成功的正常调用不被误杀
- 重试等待改 LlmRetryBackoff:2s/10s + ±30% 抖动,覆盖更长窗口并打散同批尖峰
- 外观专利标题识别失败时跳过外观请求(该行必走回退,外观结果本就会被丢弃)
This commit is contained in:
2026-09-14 00:28:40 +08:00
parent 864c22ffc7
commit db6869b77e
8 changed files with 280 additions and 45 deletions
@@ -22,6 +22,12 @@ public class AppearancePatentProperties {
private int llmMaxTokens = 64000;
private int llmConnectTimeoutMillis = 10000;
private int llmReadTimeoutMillis = 180000;
/**
* 首次尝试读超时(毫秒):上游偶发单请求不应答(挂满超时才失败),
* 首查用更短预算快速失败并重试;生产实测成功调用 p99≈34s、超 60s 仅 0.02%
* 故默认 60s 既覆盖正常慢响应又能把单次挂死代价从 90s 降到 60s。
*/
private int llmFirstAttemptReadTimeoutMillis = 60000;
private int llmBatchSize = 10;
/**
* 批内行级并发数,默认等于批量大小
@@ -161,6 +161,11 @@ public class SimilarAsinProperties {
private int llmMaxTokens = 64000;
private int llmConnectTimeoutMillis = 10000;
private int llmReadTimeoutMillis = 180000;
/**
* 首次尝试读超时(毫秒):上游偶发单请求不应答,首查用更短预算快速失败后重试;
* 生产实测成功调用 p99≈34s、超 60s 仅 0.02%,默认 60s 兼顾慢响应与快速失败。
*/
private int llmFirstAttemptReadTimeoutMillis = 60000;
private int llmRetryTimes = 3;
/** 批内行级并发上限:每行最多 2 次图片对比 + 1 次合规 + 3 次类目匹配。 */