seaislee1209
|
13440f2709
|
feat: v0.19.2 prompt 里 @素材名 按火山规范转为「图片N/视频N/音频N」
Build and Deploy / build-and-deploy (push) Successful in 5m58s
火山 Seedance 模型只能理解"素材类型+序号"的指代(官方文档 FAQ Q3);
对文件名 / asset id / URL 类字符串一律读不懂,只能按 content 数组里
图片出现顺序瞎猜谁是谁,导致用户看到的"人物颠倒"概率性现象(典型
任务 cgt-20260422163517-4k8x6)。
改动
- backend/apps/generation/views.py:
- 新增 _format_prompt_for_ark(prompt, label_placeholders) helper
用 str.replace 避 regex 元字符崩溃, 按 label 长度降序防子串吞噬
- video_generate_view references 循环同步维护 image_n/video_n/audio_n
三个独立计数器 + label_to_placeholder 映射
- 关键不变量: 任意时刻 counter == content_items 里该类型 *_url 已 push 数
group 老路径 counter 照推但不登记 label + WARNING, 避免编号错位
- 调 create_task 前构造 api_prompt 传给火山, DB.prompt 保留用户原文
(带 @xxx.jpg) 以便 reEdit 重建带缩略图标签
测试覆盖 14 项 (airlabs-test MySQL 全绿)
- 单元 9 项: 基础替换 / 多类型独立计数 / 重复 @ / 子串冲突 / 正则元字符 /
空 mapping / label 未 @ / 中文标点 / 空 label 跳过
- 集成 5 项: local 正常替换 / DB 原文保留 / group 老路径不换 + WARN /
混用 local+group counter 对齐 (关键回归) / 图片音频独立计数
兼容性
- reEdit: DB 保留原文, PromptInput.rebuildMentionSpans 按 @label 正则
仍能重建 span, 缩略图正常
- regenerate: 走同一 POST /api/v1/video/generate, 二次过转换
- Celery: 只 query 不重发, 不受影响
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-04-23 20:52:32 +08:00 |
|