花萍雨 / Pingyu
← 全部笔记

2026-10-15 去背景卡在 99%:模型下载超时 + 超时后状态没更新

🌿 持续补充排坑最后更新 2026.10.16#AI修图智能体#排坑

学习笔记,会随着学习继续修改,难免有不完整的地方。

去背景卡在 99%:模型下载超时 + 超时后状态没更新

卡在哪

Agent 对话「去掉背景,然后水平翻转一下」,第 1 步去背景一直停在 99%,几分钟没动静。

我怎么定位的

  1. 页面在转圈 → 去看 Worker(按 故障排查:从上往下查三层 的「Worker 单独看」)

    • Worker 日志里有 TimeoutError,最后一行是一个下载进度条
    • → 自己把「卡在 99%」和「timeout」联系了起来

  2. 读进度条的数字

项 数值
模型大小 1.02 GB
下载速度 约 58 kB/s → 预计 4~5 小时
任务超时 worker.py 里 job_timeout = 300,即 5 分钟
  • → 5 分钟连 2% 都下不完,任务被超时杀掉

  1. 为什么模型这么大

    • 运行指南说抠图模型约 170 MB(u2net),实际是 1.02 GB
    • rembg 新版把默认模型换成了 bria-rmbg
    • → 和 2026-10-13 MinIO 镜像下架 同一类:教程写完后上游变了
  2. 为什么这么慢

    • 同一个文件用 curl 走系统代理(7892)下载:7.4 MB/s
    • → Python 下载没走上这条快线路
  3. 补好模型、重启 Worker 后重试,还是停在 99%

    • Worker 重启后没有收到任何新任务;API 日志全是前端轮询 GET .../messages
    • → 页面显示的是旧任务留下的状态

  4. 日志不说话,去看状态存在哪

    • 查 tool_runs 表:status = running、finished_at 为空,已经挂了两小时
    • Worker 早已判定失败(j_failed=1),数据库状态却没更新 → 僵尸任务
    • 源码 backend/app/services/tools.py 第 61~66 行用 except Exception 兜底;超时取消抛的是 CancelledError,它不是 Exception 的子类,兜底没接住

根因 & 修复

根因 三层叠加:① rembg 新版默认模型 1.02 GB,首次使用要现下载;② 下载没走快线路,远超 5 分钟任务超时;③ 超时取消抛 CancelledError,绕过了 except Exception,任务状态永远停在 running,前端一直显示 99% 并拒绝新请求。

问题 修复
模型下载慢 用 curl 走 7892 下载 bria-rmbg-2.0.onnx,校验 sha256 后放到 ~/.rembg/models/bria-rmbg/bria-rmbg.onnx;实测去背景 29 秒完成
僵尸任务卡住界面 用项目自带的 runs.finish + continue_plan 把该任务标记为失败,前端出现重试
代码缺陷 在 tools.execute 中处理 CancelledError(自己动手修,见 11 我的扩展)

下次我会先做什么

> 之后再遇到页面卡住、日志看不出什么的时候,去看一下任务的状态。 (查法见 故障排查:从上往下查三层「日志不说话时」;10-15 亲手查过一遍后写下)