Files
Genarrative/docs/technical/CHARACTER_VISUAL_IP_MODERATION_FALLBACK_FIX_2026-04-25.md
2026-04-25 22:19:04 +08:00

3.3 KiB
Raw Blame History

角色主形象 IP 审核失败兜底修复2026-04-25

1. 问题

自动生成草稿素材时,角色「艾瑞克」主形象连续 3 次失败,供应商返回:

{
  "code": "IPInfringementSuspect",
  "message": "Input data is suspected of being involved in IP infringement."
}

这类失败不是网络抖动。原样重试会把同一份包含角色姓名、长设定和可能触发审核的专名继续提交给 DashScope容易稳定失败。

2. 参考日志与文档

  • 用户提供的失败日志:request_id=a18fb05d-d3be-9b9c-8d37-e0427397789etask_id=cb768c95-13b7-4790-9f18-35a8a8761b31task_status=FAILEDcode=IPInfringementSuspect。该日志确认失败源于供应商 IP/内容审核,而不是 OSS、SpacetimeDB 或下载链路。
  • docs/audits/CHARACTER_ASSET_PROMPT_CHAIN_AUDIT_2026-04-20.md:确认角色主形象正式模型 prompt 层由后端 prompt builder 编译,不能只改前端默认描述文本。
  • docs/technical/CUSTOM_WORLD_ASSET_PROMPT_DEFAULTS_2026-04-24.md:确认当前主链已迁到 server-rs/crates/api-server/src/custom_world_asset_prompts.rsserver-rs/crates/api-server/src/custom_world_ai.rs,不再修改旧 server-node
  • docs/technical/ASSET_EXTERNAL_GENERATION_MANUAL_VERIFICATION_RUNBOOK_2026-04-23.md:确认角色主形象真实生成入口走 Rust api-server、DashScope、OSS 与资产绑定链路。
  • server-rs/crates/api-server/src/character_animation_assets.rs 现有日志/代码经验:动作生成已经有审核失败时的安全兜底 prompt 策略,本次沿用到角色主形象。

3. 修复方案

  1. 在角色主图 prompt 层新增安全兜底 prompt
    • 不携带角色姓名、作品名、长设定原文。
    • 保留职业原型,如原创近战剑士、原创法术职业冒险者。
    • 明确要求不参考现有动漫、游戏、影视、小说角色,不使用可识别 IP 元素。
  2. 在 DashScope 角色主形象请求层识别审核类错误:
    • IPInfringementSuspect
    • inappropriate
    • sensitive
    • risk
    • 中文内容审核、疑似侵权、知识产权等关键词。
  3. 首次提交遇到上述错误时,后端自动用安全兜底 prompt 再提交一次。
  4. 非审核类错误仍按原错误返回不隐藏模型、网络、OSS、超时等真实问题。
  5. 错误映射保留 raw 字段,便于后续从日志直接看到供应商原始 code/message/task_id

4. 落地文件

  • server-rs/crates/api-server/src/prompt/character_visual.rs
    • 新增 build_fallback_moderation_safe_character_visual_prompt
  • server-rs/crates/api-server/src/custom_world_asset_prompts.rs
    • 导出角色主图审核兜底 prompt builder。
  • server-rs/crates/api-server/src/character_visual_assets.rs
    • 角色主形象 DashScope 请求增加审核兜底提交。
    • RequestModel 阶段结构化日志增加 moderationFallbackApplied
    • DashScope 上游错误保留 raw

5. 验收口径

  • 用户不需要手动改「艾瑞克」这个名字;后端遇到 IPInfringementSuspect 会自动切换到原创安全 prompt 再试一次。
  • 若兜底 prompt 生成成功,后续 OSS 草稿、发布和资产绑定链路保持原样。
  • 若兜底 prompt 仍失败,错误中仍能看到 DashScope 原始失败内容,方便继续定位具体触发项。