img2threejs 自修正循环教程:5 种行动决策与修正上限,让 AI 自己修对模型又不烧穿 Token
【免费下载链接】img2threejsRebuild the object in a reference image as a code-only, procedural, quality-gated, animation-ready Three.js model. Token-efficient image-to-3D.项目地址: https://gitcode.com/gh_mirrors/im/img2threejs
让 AI 自己修模型,听着很美,真正让人心里没底的是:它反复尝试、渲染、对比,Token 计费的指针一路上涨,永远不知道哪天会停。img2threejs 是一个把参考图重建为纯代码、程序化 Three.js 模型的 AI 图像转 3D 工具集,它的自修正循环让 AI 每渲染一轮就自动对比并修正,同时用一套刹车机制把成本锁死。本文用大白话讲清楚 5 种行动决策怎么挑,以及修正上限策略如何防止 Token 无限消耗。
整条流水线:生成、渲染、对比、打分、修正怎么转成闭环
每个 build pass 都按同一套节奏转:生成模型 → 浏览器渲染截图 → 与参考图并排对比 → 打分找茬 → 修改 → 再渲染,像厨师做一道菜,炒一盘、尝一口、对照师傅的样菜、调味,再炒第二盘。
这个闭环的裁判分两层:
- 零 token 确定性门禁:divine_eye.py 用纯像素数学做量化测量(轮廓重合度、尺度差、对称性、色板差),不花一分钱 token 就把明显不合格的拦在 AI 视野之外;
- AI 视觉判断:门禁通过后,AI 查看对比图,对整体观感和关键特征打分,评审流程定义在 self_correction.md。
每轮结束时,循环必须且只能挑一个行动:
五个出口:5 种行动决策,每轮只能选一个
| 行动 | 何时触发 | 一句人话 |
|---|---|---|
continue | 保真度达标、关键特征全部过关 | ✅ 这轮合格,进下一阶段 |
refine-spec | 规格本身写错/写漏(部件缺失、比例错、材质没写) | 📝 图纸错了,先改图纸 |
refine-code | 规格没问题,但生成的几何体/材质不对 | 🔧 图纸没错,施工出了岔子 |
request-input | 图片遮挡了关键结构、单视图信息不够 | 🙋 我看不到了,请给我更多素材 |
stop | 目标达成,或用户接受了当前近似度 | 🏁 收尾交付 |
关键设计是根因分离:refine-spec和refine-code绝不混用。规格错了就回去改规格并重新校验,绝不在代码里打补丁绕过去——好比医生开方和配药:方子错就改方子,配错就改配药,而不是多抓一味药硬盖过去,否则错误会被固化进代码。完整根因判断清单(什么情况改规格、什么情况改代码、什么情况要素材)见 self_correction.md 的 Root Cause Guide 部分。
💡 一个易被忽略的细节:
continue是证据驱动的——必须附带渲染截图、对比图和达到阈值的 AI 视觉分数才允许放行,像素对比代码永远不能单独充当验收权威。
停机时刻的约定:AI 会不会修到一半悄悄放弃?
先正面回答:不会。所有停止路径都有明确出口,AI 停下之前必须"交代卡在哪":
| 触发条件 | 明确出口 |
|---|---|
| 达到保真度目标 | 正常收尾,进入下一阶段或交付 |
| 重复缺陷 / 震荡 | 升级为改规格,把问题从代码层拉到设计层 |
| 平台期 / 硬上限 | request-input:讲清卡在哪、需要什么(更多视角、更清晰的素材,或接受当前近似度) |
| 预算耗尽 | 硬停并询问,附上已完成的证据 |
SKILL.md 明确规定:"This cannot reach the requested fidelity from this image"(这张图达不到要求的保真度)本身就是合法结论。宁可诚实降级,不虚报"完成"——就像医生明说"这张片子看不清这个病灶",而不是硬说没事。
刹车系统:修正上限策略的三层保险
每一轮修正都很贵:要渲染、要看图、要修改。如果分数一直贴着目标线以下打转,朴素实现会无限循环烧 Token。以下三层机制保证"一定会停"。
停止策略状态机:6 条规则按优先级逐条检查
核心实现在 correction_loop.py,它是修正循环的刹车踏板——不管它跑得有多起劲,踩中条件就必须刹住,按严格优先级逐条检查(先匹配先生效):
- 硬门禁失败→ 立即
refine-code(几何硬伤不进入打分讨论); - 达标→ 保真度 ≥ 目标(默认0.85)且无遗留缺陷 →
continue; - 重复缺陷→ 同一缺陷标签连续 2 轮修不好 →
refine-spec(大概率是规格问题,别再瞎改代码); - 震荡检测→ 连续 2 轮修改都让分数变差并被自动回滚 →
refine-spec("越修越乱"的信号); - 平台期→ 单轮提升低于阈值(默认Δ<0.02)且仍低于目标 →
request-input(进步停滞,需要人来补充素材或降低预期); - 硬上限→ 迭代次数达到max_iter(默认6 次)无条件终止——即使分数还在缓慢改善也停,任何状态都绕不过这一条。
双层计数:每阶段 3 次,全局 6 次
本地工作流状态机 workflow_state.py 维护两层计数器,像出租车计价器上的双上限:
- 每阶段上限:默认每个 build pass 最多修正3次
- 全局上限:默认整次重建最多修正6次
触到任一上限即硬停止(status=stopped),要求向用户要输入,绝不静默继续。计数的依据是reviewHistory里的行动记录(refine-spec/refine-code),而不是 AI 的"记忆"——对话上下文可以丢,.img2threejs/state.json里的状态文件才是权威清单。
兜底保险:Token 熔断与每轮留痕
- Token 预算断路器:correction_loop.py 中的
budget_exceeded()会在 token 花费达到预算时立即熔断,像家庭配电箱的空气开关——电流超负荷立刻跳闸,直接停下询问用户,永不静默继续; - 每轮记录可追溯:每轮评审的截图路径、分数、AI 评语都会通过 append_review.py 写入
reviewHistory,像飞机的飞行日志,随时能回溯"哪一步的哪个决定导致了现在的错误"。
亲手验证:观察自修正循环的 4 个动作
- 每次修正前先运行
python3 forge/next.py --state .img2threejs/state.json [spec](forge/next.py),它会报告当前步骤、下一条准确命令和loop/max循环状态; - 看到
status=stopped或退出码3,就是硬停止信号——报告原因并请求输入,别凭聊天记录"接着干"; - 完整门禁契约(Divine Eye、多视角、内部差异、左右手性等)查 gates_reference.md;
- 整体流程与硬性规则见 SKILL.md 的 "The Loop" 与 "Self-Correction" 章节。
这套机制给 AI 图像转 3D 工作流加上了两个关键约束:决策有据(5 种行动 + 根因分离,改规格和改代码不混用)与成本有界(重复缺陷、震荡、平台期、双层计数上限 + token 预算断路器,任何情况都能终止)。对你来说这意味着:AI 会自己迭代修模型,但修不动时,它会停下来告诉你卡在哪、需要你提供什么,而不是失控烧钱。
【免费下载链接】img2threejsRebuild the object in a reference image as a code-only, procedural, quality-gated, animation-ready Three.js model. Token-efficient image-to-3D.项目地址: https://gitcode.com/gh_mirrors/im/img2threejs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考