From c533932ac61686609befc1775fdc4216971b0375 Mon Sep 17 00:00:00 2001 From: ymq Date: Wed, 16 Sep 2026 18:30:01 +0800 Subject: [PATCH] =?UTF-8?q?docs(readme):=20LLM=E8=B6=85=E6=97=B6=E9=A2=84?= =?UTF-8?q?=E7=AE=97=E7=BB=9F=E4=B8=80=E6=B2=BB=E7=90=86=E6=AE=B5(2026-09-?= =?UTF-8?q?16=E7=94=A8=E6=88=B7=E8=A3=81=E5=AE=9A=E5=8D=95=E7=82=B9?= =?UTF-8?q?=E6=94=B6=E6=95=9B)=E2=80=94=E2=80=94bridge.=5Fresolve=5Fbudget?= =?UTF-8?q?+inference=20deadline=E4=B8=A4=E5=A4=84=E5=8D=95=E7=82=B9,?= =?UTF-8?q?=E4=B8=89=E5=B1=82=E9=A2=84=E7=AE=97=E5=AF=B9=E9=BD=90=E9=93=81?= =?UTF-8?q?=E5=BE=8B,=E5=BF=98=E4=BC=A0timeout=E7=BB=93=E6=9E=84=E6=80=A7?= =?UTF-8?q?=E5=AE=89=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 46f821c..0557518 100644 --- a/README.md +++ b/README.md @@ -161,3 +161,26 @@ old_string 唯一性校验(0/多次拒绝,replace_all 放行)+ 原子写 + 不能来自 agent 的自我声明;QC 尺子要配「取证失败 ≠ 判 0 分」的出路,否则盲审烧轮次。 + +## LLM 超时预算统一治理(2026-09-16 用户裁定:单点收敛,禁散落) + +**事故背景**:09-05 提取、09-14 develop、09-16 QC 三次事故同一根因——调用方忘传 +timeout → payload 无 _timeout → inference 按供应商端点配置(百炼 120s)掐断长生成; +且超时公式散落在各产线各角色调用点(570/330/+60/-60/min+60 各自为政),按角色 +逐个修必然复发(09-14 只修 develop native,09-16 QC 复发实锤)。 + +**统一架构(全平台只有两处单点)**: +1. `llm_bridge._resolve_budget(timeout, default)`:timeout 语义=一次调用【总预算】 + (0=平台缺省 chat 300 / 生成类 900;封顶 900 下限 60)→ 返回 + (payload._timeout=总预算, 客户端 aiohttp=总预算+60)。四个公开入口 + (llm_call/llm_call_msgs/llm_call_msgs_native/llm_infer)全走它, + payload._timeout 恒传——忘传 timeout 也结构性安全。 +2. `pipeline-llm inference._post_upstream` deadline:attempt 超时=剩余预算, + 总时长≈预算(消灭 3× 放大→客户端先断连→模糊 TimeoutError→误判永久错误链); + 预算耗尽(<15s)不再发起必然超时 attempt;端点配置 timeout 不再掐断 attempt + (仅直连未传 _timeout 时与 _TOTAL_TIMEOUT 取大兜底)。 + +**三层预算对齐铁律**:调用方总预算 T → payload._timeout=T → 客户端=T+60 → +外层 wait_for(若有)≥ T+60。agent_loop:510→570→600 实证对齐。 +验证特征串:inference 日志「预算=Ns」;llm_call_trace status_code=0 计数。 +新增 LLM 调用点只需(可选)声明总预算,禁止自算客户端等待。