AGC 本地配套后端未启动 BgFilter worker,导致角色图抠图回退 Aliyun Matting #257
Notifications
Due Date
No due date set.
Depends on
#258 修复 AGC 本地 BgFilter worker 启动链路
GenarrativeAI/Genarrative
Reference: GenarrativeAI/Genarrative#257
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue:AGC 本地配套后端未启动 BgFilter worker,导致角色图抠图回退 Aliyun Matting
Issue 标题
AGC
npm run agc的配套后端未启动或校验 BgFilter worker,角色图生成时本机8083连接失败并回退到 Aliyun Matting问题摘要
本地使用 AGC 客户端生成角色图时,原图生成正常,但后处理没有优先走本机 BgFilter worker,而是在访问
http://127.0.0.1:8083/internal/bgfilter/v1/remove-background时连续连接失败,最终触发既有的 Aliyun Matting 兜底。这不是远程 BgFilter provider 调用失败,也不是生产图片处理逻辑错误。当前问题集中在 AGC 开发启动链路:
npm run agc使用的backend启动模式只拉起 SpacetimeDB 和api-server,没有把 BgFilter worker 纳入同一启动单元;AGC 的后端 ready 检查也没有检查 worker 的/readyz。影响
background_mode=flat的流程,可能稳定回退到 Aliyun Matting。Aliyun Matting,容易误判为生成 provider 选错。目前未发现生产部署路径存在同一个启动遗漏。生产使用独立的
genarrative-bgfilter-worker.service,本 Issue 仅针对 AGC 本地开发启动路径。复现条件
npm run agc。api-server日志和生成结果的素材 provider。本次实际证据
启动状态
本次
.app/dev-stack.json的运行命令为backend,状态中:API 日志
logs/api-server/api-server-20260902-123319.log记录:失败请求目标为:
同一时间段没有对应的
logs/bgfilter-worker/运行日志,也没有 worker 侧远程 provider 调用记录,因此请求没有进入本机 BgFilter worker,更没有发起远程 BgFilter provider 调用。兜底结果
随后日志显示:
本地数据库中同一任务同时存在:
VectorEngine / gpt-image-2的 provider 原图;Aliyun Matting / segment-common-image的最终处理图。这说明原图生成成功,只有本地 BgFilter 后处理阶段未运行。
根因定位
1. AGC 使用了
backend启动模式脚本链路为:
2.
backend分支没有启动 Rust 双进程文件:
scripts/dev.mjs当前
startCommand('backend')只执行:而
bgfilter-worker的启动和 readiness 等待只在startRustServicePair()中执行。该双进程编排目前被all和api-server路径使用,backend路径没有复用。3. AGC 的后端 ready 检查漏掉 worker
文件:
apps/ai-game-creator-shell/scripts/start-dev-stack.mjs当前
isBackendReady()只检查:没有检查:
因此 API 和 SpacetimeDB 正常时,AGC 会认为配套后端已 ready,即使
8083没有监听。4. 形成“启动成功、业务时才失败”的延迟暴露
父 API 的 BgFilter 客户端仍按配置指向本机
127.0.0.1:8083。由于 worker 没有启动,只有在图片生成进入抠图阶段时才发生连接重试,达到预算后才回退 Aliyun。建议修复方向
推荐采用组合修复:
A. 让
backend复用startRustServicePair()启动顺序统一为:
同时把
backend的 watcher 纳入:这样 AGC 仍只持有一个
agc:backend子进程,API 和 worker 的启动、重启、日志及退出清理都沿用现有双进程机制。B. AGC 后端复用门禁增加 worker readiness
isBackendReady()应同时要求:避免 AGC 复用“API 和数据库正常、worker 缺失”的不完整本地后端。
C. 保留现有 fallback 语义
不要因为本地启动问题而删除或绕过:
修复后仍应允许真实的远程 BgFilter provider 故障按既有设计回退到 Aliyun。只有在 worker 未启动时,才应在 AGC 启动阶段直接暴露问题。
不建议的做法
api-server绕过本机 worker 直接调用远程 BgFilter。start-dev-stack.mjs内再复制一套 worker 启动、端口、日志和退出清理逻辑。/readyz检查而不启动 worker;那只能把业务时失败改成启动时失败。验收标准
启动与复用
npm run agc启动后,.app/dev-stack.json中bgfilter-worker为 active/running。http://127.0.0.1:8083/readyz返回200,端口漂移时以实际状态文件地址为准。业务链路
BgFilter。Aliyun Matting。测试
scripts/dev.test.ts增加backend路径会启动并等待 Rust 双进程的测试。apps/ai-game-creator-shell/tests/start-dev-stack.test.ts增加 worker readiness 纳入isBackendReady()的测试。范围与非目标
本 Issue 只处理:
backend模式的 Rust 服务编排;本 Issue 不处理:
当前结论
这是一个 AGC 本地开发启动缺陷:
npm run agc的backend模式漏启动 BgFilter worker,且 ready 检查漏检 worker。生产处理逻辑和 fallback 逻辑在本次证据范围内是正确的。