优化全能创作

This commit is contained in:
Azmat@qq.com
2026-09-14 11:47:49 +08:00
parent 02e5dbfb60
commit 463613c0d7
7 changed files with 875 additions and 197 deletions
+24 -18
View File
@@ -13,7 +13,7 @@
| 策略卡 · 方案卡 | **AI 真生成**(新 skill `omni-creative-strategy`),不是模板 |
| @ 引用范围 | 商品(卖点+主图) · 角色/模特(锁脸) · 场景/资产库任意图。**不含**历史项目;**不含**本会话产物(产物靠记忆层自动带) |
| 图片会话 | 无确认闸门,聊完直接生成 |
| 视频会话 | 策略卡 → 方案卡 → **确认(按钮旁显示预计积分)** → 生成 |
| 视频会话 | **5 步闸门**:澄清(`ask_user`) → 策略确认 → 方案确认 → Prompt 确认 → **参数+积分确认** → 生成 |
| 重新生成 | 对话流**往下叠加**新结果,旧的留在上面。历史页封面取最新一版 |
| 编排模型 | `doubao-seed-2-1-pro-260628`(火山直连),`gpt-5.5`(tokenssr)兜底 |
| 生成模型 | 图 `doubao-seedream-5-0-260128` / `gpt-image-2`;视频 `doubao-seedance-2-5-260628` |
@@ -34,7 +34,7 @@ mode "video" | "image" 发起时定死
preset str(64) 预设名,"" = 自由创作
params json {model, resolution, ratio, duration} 会话级参数
pinned_refs json [Ref] 本会话锁定的实体(每轮无条件带上 → 锁脸锁商品)
memory json {summary: str, artifacts: [ArtifactRef], turn_count: int}
memory json {summary: str, artifacts: [ArtifactRef], turn_count: int, stage: clarify|strategy|plan|prompt|confirm|done, pending_video_prompt?: str}
status "running" | "completed" | "failed"
agent_status "idle" | "planning" | "awaiting_user" 整理方案态(与 status 正交);一团队同时只能有一个 planning
agent_started_at datetime|null planning 开始时间(超时清扫用)
@@ -83,7 +83,7 @@ created_at
| kind | 谁产 | payload | 对应设计稿 |
| --- | --- | --- | --- |
| `text` | 双方 | — (用 text 字段) | `.omni-chat-bubble` |
| `elicit` | AI | `{fields: [Field], submitted: bool, answers: {}}` | **新增卡片** |
| `elicit` | AI | `{fields: [Field], submitted: bool, answers: {}}`;步骤确认另带 `interaction:"step_confirm"`, `step: strategy\|plan\|prompt` | 追问卡 / 步骤确认条 |
| `strategy` | AI | `{target, trust, belief, direction}` | `.omni-strategy-card` |
| `plan` | AI | 见下 | `.omni-video-plan-card` |
| `prompt_file` | AI | `{title, body, ref_count}` | `.omni-prompt-file-card` |
@@ -168,13 +168,12 @@ created_at
| 工具 | 参数 | 复用 |
| --- | --- | --- |
| `ask_user` | `{fields: [Field]}` | 新写。**这是「小云雀式追问」的唯一入口** |
| `search_library` | `{query, types}` | 新写,复用 mentions 检索 |
| `write_strategy` | `{}` strategy payload | 新 skill |
| `write_plan` | `{}` plan payload | 新 skill |
| `ask_user` | `{fields: [Field]}` | 澄清缺信息。**一调即中断** |
| `search_library` | `{query, types}` | 复用 mentions 检索 |
| `write_strategy` | strategy payload | 出策略卡 + `step_confirm`,**中断**等确认 |
| `write_plan` | plan payload + `video_prompt`(先缓存) | 出方案卡 + `step_confirm`,**中断**;不同轮出 Prompt/积分卡 |
| `write_prompt` | `{video_prompt}` | 出 `prompt_file` + `step_confirm`,**中断** |
| `generate_image` | `{prompt, ref_asset_ids, count, ratio}` | 现有 `GenerateImageView` 服务层 |
| `write_strategy` | strategy payload | 出策略卡,**不打断循环** |
| `write_plan` | plan payload + `video_prompt` | 出 方案卡+Prompt卡+确认卡,**打断循环等确认** |
循环上限:单条用户消息最多 **8 轮**工具调用、最多 **1 次**计费生成(防「多做几版」烧积分)。
@@ -185,21 +184,28 @@ created_at
标准 `json.dumps` 会 TypeError 把整条流当场打断。
会话 mode 决定暴露哪些工具:图片会话只有 `generate_image`,视频会话只有
`write_strategy` / `write_plan`,互相看不见。
`write_strategy` / `write_plan` / `write_prompt`,互相看不见。
### 视频确认闸门(阶段 4)
### 视频确认闸门(5 步 · 小云雀式)
```
聊 → [ask_user…] → write_strategy(策略卡,不停)
→ write_plan(方案卡 + Prompt卡 + 确认卡,**停**)
→ 用户点确认 → 直接出片
聊 → ask_user?(缺信息则停)
write_strategy → 策略卡 + step_confirm(**停**;确认/改)
→ ③ write_plan → 方案卡 + step_confirm(**停**;确认/改)
· video_prompt 先写入 memory.pending_video_prompt
→ ④ 用户确认方案后平台(或 write_prompt)出 prompt_file + step_confirm(**停**)
→ ⑤ 用户确认 Prompt 后平台出积分 confirm 卡(模型/分辨率/比例/时长)
→ 用户点「开始生成」→ submit_free_video(不再跑编排模型)
```
**点确认后不再跑模型。** 方案已经确认过了,再让模型决定一次既费钱、又可能它根本不调
生成工具。`video_prompt` `write_plan` 时就存进确认卡的 payload,确认时照它提交
`submit_free_video`,返回同步 JSON(不是 SSE)。
`memory.stage` 取值:`clarify|strategy|plan|prompt|confirm|done`,用于 resume 与系统提示约束。
每一步确认用 `elicit` + `interaction:"step_confirm"` + `step`;前端「按这个继续」走
`elicit_answer`,`我想改` 打开输入框,打字反馈走 text(后端标 revise 并只重写该步)。
确认卡是一次性的:`submitted` 置位后重复提交返回 409 —— 连点两下会出两条片、扣两次积分。
**最终「开始生成」后不再跑编排模型。** `video_prompt` 在方案步缓存、Prompt 确认后写入
确认卡 payload,确认时照它提交 `submit_free_video`,返回同步 JSON。
积分确认卡是一次性的:`submitted` 置位后重复提交返回 409。
但**提交失败要把闸门放回去**(`submitted` 复位),否则积分不足改完也点不了了。
顶栏的模型 label(「Seedance 2.5」)要翻成火山真名才能提交;`duration` 从「15 秒」里