Files
leaudit-platform-backend/docs/leaudit/并发与重试参数说明.md
T

3.2 KiB
Raw Blame History

LeAudit 并发与重试参数说明

这份文档记录当前 leaudit-platform 已经落地的并发与重试参数,避免后面再忘。


1. 为什么没有用 RETRY_BACKOFF_SECONDS = [1, 2, 4]

这次我没有把退避时间设计成数组,而是改成了:

  • *_RETRY_MAX_ATTEMPTS
  • *_RETRY_BACKOFF_BASE_SECONDS

原因很简单:

  • 配置更短,更容易看懂
  • 不用每次都手写 [1, 2, 4]
  • 代码统一按“指数退避”算等待时间

计算方式:

第 1 次重试等待 = base
第 2 次重试等待 = base * 2
第 3 次重试等待 = base * 4
...

例如:

LLM_RETRY_MAX_ATTEMPTS = 3
LLM_RETRY_BACKOFF_BASE_SECONDS = 1

表示:

  • 第 1 次请求失败后,等 1s
  • 第 2 次再失败后,等 2s
  • 总共最多尝试 3

2. 当前已正式化的参数

当前 app.toml 中已启用:

[LEAUDIT]
LLM_MAX_CONCURRENCY = 5
VLM_MAX_CONCURRENCY = 3

LLM_REQUEST_TIMEOUT = 120
LLM_RETRY_MAX_ATTEMPTS = 3
LLM_RETRY_BACKOFF_BASE_SECONDS = 1

VLM_REQUEST_TIMEOUT = 45
VLM_RETRY_MAX_ATTEMPTS = 2
VLM_RETRY_BACKOFF_BASE_SECONDS = 1

OCR_VLM_CONCURRENCY = 32
OCR_RETRY_MAX_ATTEMPTS = 3
OCR_RETRY_BACKOFF_BASE_SECONDS = 1

SIGNATURE_PROBE_CONCURRENCY = 2
SIGNATURE_PROBE_TIMEOUT = 20
SIGNATURE_PROBE_RETRY_MAX_ATTEMPTS = 2
SIGNATURE_PROBE_RETRY_BACKOFF_BASE_SECONDS = 0.5

3. 各链路当前策略

3.1 LLM

  • 客户端:ResilientOpenAICompatibleClient
  • 超时:LLM_REQUEST_TIMEOUT
  • 最大尝试次数:LLM_RETRY_MAX_ATTEMPTS
  • 退避基数:LLM_RETRY_BACKOFF_BASE_SECONDS
  • 重试条件:
    • 超时
    • 连接错误
    • 5xx
    • 408
    • 429

3.2 VLM

  • 客户端:ResilientQwenVLMClient
  • 超时:VLM_REQUEST_TIMEOUT
  • 最大尝试次数:VLM_RETRY_MAX_ATTEMPTS
  • 退避基数:VLM_RETRY_BACKOFF_BASE_SECONDS
  • 重试条件:
    • 超时
    • 连接错误
    • 5xx
    • 408
    • 429

3.3 OCR

  • 客户端:ResilientChandraOCRClient
  • OCR HTTP 超时:沿用 [OCR].TIMEOUT
  • 最大尝试次数:OCR_RETRY_MAX_ATTEMPTS
  • 退避基数:OCR_RETRY_BACKOFF_BASE_SECONDS
  • 重试条件:
    • 超时
    • 连接错误
    • 5xx
    • 408
    • 429

3.4 Signature Probe

这是 DOCX 签名候选补识别,不是主 OCR。

  • 并发:SIGNATURE_PROBE_CONCURRENCY
  • 单次超时:SIGNATURE_PROBE_TIMEOUT
  • 最大尝试次数:SIGNATURE_PROBE_RETRY_MAX_ATTEMPTS
  • 退避基数:SIGNATURE_PROBE_RETRY_BACKOFF_BASE_SECONDS
  • 第 1 次失败后,会用 fresh VLM client 再试

4. 为什么把 signature probe 调小

之前这里容易长时间卡住,根因是:

  • 它是补探测
  • 但单次超时太长
  • 且失败后还会再试一次

所以现在把它收成:

  • SIGNATURE_PROBE_CONCURRENCY = 2
  • SIGNATURE_PROBE_TIMEOUT = 20

这样它仍然能补识别,但不会把整条 OCR 长尾拖得太夸张。


5. 当前代码位置

  • 配置定义:fastapi_admin/config/_settings.py
  • 客户端工厂:fastapi_modules/fastapi_leaudit/leaudit_bridge/client_factory.py
  • 重试封装:fastapi_modules/fastapi_leaudit/leaudit_bridge/resilient_clients.py
  • signature probefastapi_modules/fastapi_leaudit/leaudit_bridge/ocr_bridge.py