AGC 标准美术包硬编码四张切片并按顺序误判用途,导致生成失败与素材语义错配 #525

Open
opened 2026-09-28 01:25:32 +08:00 by lhk229 · 0 comments
Member

问题

AGC 标准美术包存在两个相互关联的严重缺陷:硬编码“有且只有四张切片”,导致已成功生成的多素材图集被判失败;又把切片返回顺序当成固定用途,可能在数量恰好为四时静默登记错误语义。

修复方向:放松不必要的数量与用途约束,按实际素材处理。不要通过增加复杂识别/重试机制或强化提示词,试图保证所有游戏必须产出四个连通域。

现场证据与复现

本地测试项目:gameagent-287d5195;核查代码基线:5c648ab9c78e03f8ad7c29dc91c7a68c59a53602。本次仅只读调查,未修改项目或发起新的付费生成。

  1. Agent 读取 taonier-art-assets Skill 和 references/platform-art-contract.md,其中要求标准包必须有四张 canonical 切片。
  2. Agent 调用 taonier_prepare_game_art,mode=reuse-or-create,brief 是森林跑酷整体视觉需求:陶土小狐狸、树桩/石块/倒木、橡果/金叶、草地平台及森林背景,没有列出恰好四个主体。
  3. 标准包依次准备规范图、背景和核心图集。核心图集调用画布图标图集生成接口:普通账号实际为 POST /api/editor/icon-spritesheets/generations;账本保存对应 external 路由 /api/external/v1/editor/icon-spritesheets/generations。
  4. 客户端将整段 brief 作为单条 iconDescriptions,另外写死 sliceMode=connected-components、sliceCount=4。
  5. 平台生成并保存了图集;抠图后的连通域切分返回 sliceWarning.code=output-slice-limit-exceeded,原文:图标 spritesheet 识别出的素材数量超过输出上限:59,最多允许 4 个。 独立切片为空。59 是算法识别的连通区域数,不等于已确认可用的游戏素材数。
  6. 客户端报美术包失败。此前“启动前被平台拒绝”的表述不准确:图片已生成,失败发生于切分/标准包验收,账本仍保留完整结果。
  7. 检查时本地已有规范图、标准背景、原始整图,以及后续单独生成的背景,没有独立切片。失败后的第二次包调用虽在 brief 加了“四个主体”,实际复用了已有整图,返回 completed 与空 slicePaths、缺切片告警,并未按新提示词重新生成。

问题一:固定四张与实际生成目标不匹配,且已深入处理流程

  • 上游 Skill 告知调用 Agent 四张合同,但首次 brief 没有传达四主体要求。
  • 客户端图集 prompt 保留 brief 原文,不追加数量指令。
  • 服务端 build_spritesheet_prompt 不接收 sliceCount。现场 actualPrompt 只要求“每个图标素材的所有内容区域完全连通”“不要遗漏、补充或重复图标”,没有限定总共四个主体;数量参数用于后处理校验。
  • 四类用途(玩家、目标、场景、反馈)不等于四个连通元素。多帧角色、多种障碍/道具和特效天然可能有更多独立元素;平台通用切片上限为 256,4 是标准包自身施加的约束。
  • 四张假设不仅在参数中:严格落盘、固定用途路径、公开清单、私有回执、事务快照/回滚、重生成完成与重放、标准美术 Runtime 验收均依赖四张。因此单独删除数量校验无法解决。
  • 旧整图复用允许缺切片并返回 warning;Direct 一般资源消费可使用其他已登记素材,不能把该兼容路径误认为严格标准包已支持动态切片。

问题二:返回顺序不能证明素材用途,存在静默语义错配

严格提交直接把数组第 1~4 张依次映射成:

返回位置 写入用途及文件名
1 player.png
2 blocks-and-targets.png
3 obstacles-and-scene.png
4 feedback-effects.png

平台连通域按空间排列顺序整理,并不按玩家/目标/障碍/特效识别分类。客户端没有内容识别或可靠用途来源,却按下标命名。假如返回“小狐狸、树桩、石块、橡果”,树桩会被标为目标,橡果被标为反馈特效;数量、透明度、像素唯一性和来源身份校验均不能证明语义正确。

普通非严格切片保存也残留前四张的固定用途映射,多余切片才保留编号路径/空用途,需一并检查。私有回执还使用 usages[index] 访问四项数组,不能只移除前置数量检查而留下越界风险。

代码定位

以下均相对于仓库,基线为上述提交:

  • apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs:DIRECT_CODEX_SPRITESHEET_SLICE_PATHS、DIRECT_TAONIER_STRICT_CONTRACT_SNAPSHOT_PATHS、generate_direct_taonier_art_asset_at、validate_completed_workflow_result_at、direct_taonier_strict_art_package_is_valid。
  • apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs:build_platform_art_asset_prompt、commit_strict_platform_art_slices_at、commit_prepared_platform_art_slices_at、strict_game_art_contract_receipt_bytes、STRICT_PLATFORM_ART_CONTRACT_PATHS。
  • apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/art_manifest_contract.rs:REQUIRED_SLICE_USAGES、validated_art_slices。
  • apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/autonomous_completion.rs:game_index_missing_visible_art_slice。
  • apps/ai-game-creator-shell/src-tauri/resources/agc-skills/taonier-art-assets/:四张固定切片的 Skill/合同描述。
  • server-rs/crates/api-server/src/editor_project_icon.rs:生图 prompt builder、slice_count 后处理及切片告警返回。
  • server-rs/crates/api-server/src/prompt/icon_spec.rs:build_spritesheet_prompt。

建议方向与范围

  1. 移除标准包默认强制 sliceCount=4、恰好四张和四个固定用途路径的假设;在现有合理资源上限内接受实际切片数量。
  2. 复用已有切片列表与登记流程,以稳定资源身份/中性名称保存和返回实际素材;没有可靠用途信息时保持未分类,不按数组位置伪造用途。素材如何用于游戏由具体游戏需求决定。
  3. 将清单、回执、事务恢复和 Runtime 验收中相关四张依赖收敛为实际产物集合;保留必要的文件可解码、来源身份、透明素材要求、大小上限及已有幂等/恢复保障,不另建通用框架或复杂状态机。
  4. 不以强化 prompt、“必须四个主体”、额外语义识别、自动付费重生成、硬取前四张或强行合并连通域作为修复手段。
  5. 同步删除过时 Skill/提示词/文档中的固定四张要求;对现存四张包及已受理账本保留最小必要兼容,避免丢产物或重复生成。

验收标准

  • 标准包面对数量不是 4、但满足现有资源限制的有效切片集合,可以正常保存、登记和返回,不因“不是四张”失败。
  • 四张或多张素材均不再按返回下标被强制标记为玩家/目标/障碍/反馈;未知用途允许保持未分类。
  • 清单、回执、结果重放和补偿恢复处理实际切片集合,不遗漏第五张及后续素材,不越界、不静默截断;现存四张包仍可读取。
  • 现有生成结果可在可用范围内恢复使用;不因移除四张假设遗失账本或重新提交付费生成。
  • 不把整图可用、切片为空的结果描述为独立素材齐全;用户能区分已保存整图和实际可用切片。
  • 定向测试覆盖非四张集合、四张但语义不符合旧固定顺序、已有结果恢复及旧包读取;不引入新测试基础设施。

此问题与 PNG 自动转码修复无关;本 Issue 不要求通过任何新增机制维持“四张图必然具有四种固定语义”的假设。

## 问题 AGC 标准美术包存在两个相互关联的严重缺陷:硬编码“有且只有四张切片”,导致已成功生成的多素材图集被判失败;又把切片返回顺序当成固定用途,可能在数量恰好为四时静默登记错误语义。 **修复方向:放松不必要的数量与用途约束,按实际素材处理。不要通过增加复杂识别/重试机制或强化提示词,试图保证所有游戏必须产出四个连通域。** ## 现场证据与复现 本地测试项目:`gameagent-287d5195`;核查代码基线:`5c648ab9c78e03f8ad7c29dc91c7a68c59a53602`。本次仅只读调查,未修改项目或发起新的付费生成。 1. Agent 读取 `taonier-art-assets` Skill 和 `references/platform-art-contract.md`,其中要求标准包必须有四张 canonical 切片。 2. Agent 调用 `taonier_prepare_game_art`,`mode=reuse-or-create`,brief 是森林跑酷整体视觉需求:陶土小狐狸、树桩/石块/倒木、橡果/金叶、草地平台及森林背景,没有列出恰好四个主体。 3. 标准包依次准备规范图、背景和核心图集。核心图集调用画布图标图集生成接口:普通账号实际为 `POST /api/editor/icon-spritesheets/generations`;账本保存对应 external 路由 `/api/external/v1/editor/icon-spritesheets/generations`。 4. 客户端将整段 brief 作为单条 `iconDescriptions`,另外写死 `sliceMode=connected-components`、`sliceCount=4`。 5. 平台生成并保存了图集;抠图后的连通域切分返回 `sliceWarning.code=output-slice-limit-exceeded`,原文:`图标 spritesheet 识别出的素材数量超过输出上限:59,最多允许 4 个。` 独立切片为空。59 是算法识别的连通区域数,不等于已确认可用的游戏素材数。 6. 客户端报美术包失败。此前“启动前被平台拒绝”的表述不准确:图片已生成,失败发生于切分/标准包验收,账本仍保留完整结果。 7. 检查时本地已有规范图、标准背景、原始整图,以及后续单独生成的背景,没有独立切片。失败后的第二次包调用虽在 brief 加了“四个主体”,实际复用了已有整图,返回 `completed` 与空 `slicePaths`、缺切片告警,并未按新提示词重新生成。 ## 问题一:固定四张与实际生成目标不匹配,且已深入处理流程 - 上游 Skill 告知调用 Agent 四张合同,但首次 brief 没有传达四主体要求。 - 客户端图集 prompt 保留 brief 原文,不追加数量指令。 - 服务端 `build_spritesheet_prompt` 不接收 `sliceCount`。现场 `actualPrompt` 只要求“每个图标素材的所有内容区域完全连通”“不要遗漏、补充或重复图标”,没有限定总共四个主体;数量参数用于后处理校验。 - 四类用途(玩家、目标、场景、反馈)不等于四个连通元素。多帧角色、多种障碍/道具和特效天然可能有更多独立元素;平台通用切片上限为 256,4 是标准包自身施加的约束。 - 四张假设不仅在参数中:严格落盘、固定用途路径、公开清单、私有回执、事务快照/回滚、重生成完成与重放、标准美术 Runtime 验收均依赖四张。因此单独删除数量校验无法解决。 - 旧整图复用允许缺切片并返回 warning;Direct 一般资源消费可使用其他已登记素材,不能把该兼容路径误认为严格标准包已支持动态切片。 ## 问题二:返回顺序不能证明素材用途,存在静默语义错配 严格提交直接把数组第 1~4 张依次映射成: | 返回位置 | 写入用途及文件名 | | --- | --- | | 1 | `player.png` | | 2 | `blocks-and-targets.png` | | 3 | `obstacles-and-scene.png` | | 4 | `feedback-effects.png` | 平台连通域按空间排列顺序整理,并不按玩家/目标/障碍/特效识别分类。客户端没有内容识别或可靠用途来源,却按下标命名。假如返回“小狐狸、树桩、石块、橡果”,树桩会被标为目标,橡果被标为反馈特效;数量、透明度、像素唯一性和来源身份校验均不能证明语义正确。 普通非严格切片保存也残留前四张的固定用途映射,多余切片才保留编号路径/空用途,需一并检查。私有回执还使用 `usages[index]` 访问四项数组,不能只移除前置数量检查而留下越界风险。 ## 代码定位 以下均相对于仓库,基线为上述提交: - `apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs`:`DIRECT_CODEX_SPRITESHEET_SLICE_PATHS`、`DIRECT_TAONIER_STRICT_CONTRACT_SNAPSHOT_PATHS`、`generate_direct_taonier_art_asset_at`、`validate_completed_workflow_result_at`、`direct_taonier_strict_art_package_is_valid`。 - `apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs`:`build_platform_art_asset_prompt`、`commit_strict_platform_art_slices_at`、`commit_prepared_platform_art_slices_at`、`strict_game_art_contract_receipt_bytes`、`STRICT_PLATFORM_ART_CONTRACT_PATHS`。 - `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/art_manifest_contract.rs`:`REQUIRED_SLICE_USAGES`、`validated_art_slices`。 - `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/autonomous_completion.rs`:`game_index_missing_visible_art_slice`。 - `apps/ai-game-creator-shell/src-tauri/resources/agc-skills/taonier-art-assets/`:四张固定切片的 Skill/合同描述。 - `server-rs/crates/api-server/src/editor_project_icon.rs`:生图 prompt builder、`slice_count` 后处理及切片告警返回。 - `server-rs/crates/api-server/src/prompt/icon_spec.rs`:`build_spritesheet_prompt`。 ## 建议方向与范围 1. 移除标准包默认强制 `sliceCount=4`、恰好四张和四个固定用途路径的假设;在现有合理资源上限内接受实际切片数量。 2. 复用已有切片列表与登记流程,以稳定资源身份/中性名称保存和返回实际素材;没有可靠用途信息时保持未分类,不按数组位置伪造用途。素材如何用于游戏由具体游戏需求决定。 3. 将清单、回执、事务恢复和 Runtime 验收中相关四张依赖收敛为实际产物集合;保留必要的文件可解码、来源身份、透明素材要求、大小上限及已有幂等/恢复保障,不另建通用框架或复杂状态机。 4. 不以强化 prompt、“必须四个主体”、额外语义识别、自动付费重生成、硬取前四张或强行合并连通域作为修复手段。 5. 同步删除过时 Skill/提示词/文档中的固定四张要求;对现存四张包及已受理账本保留最小必要兼容,避免丢产物或重复生成。 ## 验收标准 - [ ] 标准包面对数量不是 4、但满足现有资源限制的有效切片集合,可以正常保存、登记和返回,不因“不是四张”失败。 - [ ] 四张或多张素材均不再按返回下标被强制标记为玩家/目标/障碍/反馈;未知用途允许保持未分类。 - [ ] 清单、回执、结果重放和补偿恢复处理实际切片集合,不遗漏第五张及后续素材,不越界、不静默截断;现存四张包仍可读取。 - [ ] 现有生成结果可在可用范围内恢复使用;不因移除四张假设遗失账本或重新提交付费生成。 - [ ] 不把整图可用、切片为空的结果描述为独立素材齐全;用户能区分已保存整图和实际可用切片。 - [ ] 定向测试覆盖非四张集合、四张但语义不符合旧固定顺序、已有结果恢复及旧包读取;不引入新测试基础设施。 此问题与 PNG 自动转码修复无关;本 Issue 不要求通过任何新增机制维持“四张图必然具有四种固定语义”的假设。
lhk229 added the Kind/Bug
Priority
High
2
labels 2026-09-28 01:25:32 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#525