Skip to content

模型输出截断时按普通错误重试 4 次,费用最坏 4 倍 #96

Open

Description

@haywolf

现象

模型输出被截断(length / max_tokens)时,截断错误被当作普通 LLM 错误按可重试处理,用相同图片和参数最多请求 4 次。对总是截断的页面(例如内容很多而模型输出上限不够),每页费用变为 4 倍,最后页面仍然失败。用户每点一次「重试失败页」,这一页又会再走 4 次。

复现步骤

用真实 Worker、ModelService、OpenAIClient 配本地 HTTP 服务(每次 mock 用量 1000/4096):

场景 HTTP 请求数 累计用量(输入/输出) 结果
正常结束 1 1000/4096 成功
第 1 次截断、第 2 次正常 2 2000/8192 成功
每次都截断 4 4000/16384 页面失败,约 7.6 秒

证据:评估探针复现。评估基准 commit ed7e9e8。

代码位置

  • src/core/application/workers/ConverterWorker.ts:251:循环 attempt <= maxRetries
  • src/core/infrastructure/config/worker.config.ts:41:maxRetries 为 3(最多 4 次)
  • ConverterWorker.ts:808-815:截断错误文案含 "LLM",被归为 LLM_ERROR
  • ConverterWorker.ts:827:isRetryableError 判为可重试
  • ConverterWorker.ts:313-317:重试不调整 maxTokens

风险等级

中。

产品判断

#87 修复后截断不再静默成功,这是对的,但现在截断页会按 4 倍计费再失败,对付费 API 用户是真实的钱。第 2 次可能恢复(模型陷入重复输出时),所以不建议取消重试。修复成本低,有必要修;只写进发版说明不能降低费用。

建议修法

  • 截断单独设错误类型,最多重试 1 次(最坏 2 倍费用)。
  • 错误文案里的「Try again」建议改为提示换用输出上限更高的模型。
  • 同步修改 ConverterWorker.test.ts:1112 中「调用 4 次」的断言。

验收标准

  • 每次都截断时,单页最多发出 2 次请求,页面标记失败并给出换模型的提示。
  • 第 1 次截断、第 2 次正常时仍能成功。
  • 其他可重试错误的重试次数不变。
  • 测试覆盖以上三种场景。

来源:小S 对 PR #90 审查遗留,经只读评估确认。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions