3.2 KiB
3.2 KiB
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 - 重试条件:
- 超时
- 连接错误
5xx408429
3.2 VLM
- 客户端:
ResilientQwenVLMClient - 超时:
VLM_REQUEST_TIMEOUT - 最大尝试次数:
VLM_RETRY_MAX_ATTEMPTS - 退避基数:
VLM_RETRY_BACKOFF_BASE_SECONDS - 重试条件:
- 超时
- 连接错误
5xx408429
3.3 OCR
- 客户端:
ResilientChandraOCRClient - OCR HTTP 超时:沿用
[OCR].TIMEOUT - 最大尝试次数:
OCR_RETRY_MAX_ATTEMPTS - 退避基数:
OCR_RETRY_BACKOFF_BASE_SECONDS - 重试条件:
- 超时
- 连接错误
5xx408429
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 = 2SIGNATURE_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 probe:
fastapi_modules/fastapi_leaudit/leaudit_bridge/ocr_bridge.py