Files
ttstd-infinite-canvas/docs/content/docs/backend/creative-agent-runtime.mdx

113 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 智能创作会话与执行
description: 第一期在线创作的问答、审批、任务幂等与画布提交边界
---
# 智能创作会话与执行
画布沿用原 `CanvasAssistantPanel` 的会话、输入框、模型选择、素材引用、Skills 和在线工具循环。`creative_respond` 是原工具目录中的新能力:模型自主判断是否需要补问或方案,同批出现该工具时直接形成等待屏障,不执行其余工具。普通对话可以直接输出文字,原画布读写工具继续保留。
`CanvasCreativeInteraction` 只渲染原助手消息中的交互卡片,没有独立输入框或会话列表。`CreativeAgentController.presentInteraction` 接收原 Agent 已返回的内容,负责校验、保存、批准和媒体执行,不再次请求模型。用户提交回答后回到原 Agent 工具循环,结合已确认需求继续规划。
首页独立“智能创作”入口已撤回;结构化创作从原画布助手使用。画布里的批准作用于当前真实画布。首页原会话通过下述接续入口进入画布。
## 首页会话接续
首页/创作页沿用原文本与媒体创作逻辑,新增工具栏“画布中继续”,原媒体结果入口也接到同一流程。`creation-canvas-conversation.ts` 将当前对话转换为画布原 `CanvasAssistantSession`,保留用户/助手消息、生成状态、任务 ID、模型规格及资料/技能引用目录;内部事实只写入 detail,并在后续模型请求中提供,不向用户展示大段协议 JSON。
来源会话记录 `canvasId`,画布 session 和来源消息使用稳定 ID。重复进入加载已关联画布,更新来源消息并保留画布中新增的对话与执行状态。首次进入把会话作为初始画布内容保存,源会话与画布均使用已有账号隔离存储;云端同步失败时明确提示仅本机保存。来源绑定目前随首页本机历史保存,不宣称跨设备双向同步或统一服务端任务 run。
媒体结果及可匹配的上传参考图/视频复用原 asset handoff,在画布页面加载后插入,已有 assetId 不重复插入。生成尚未完成时要求完成或停止;生成结果尚未对应到已保存资产时明确等待。音频和文件保留资料目录,此次不新增对应节点导入能力。会话合并是单向接续,画布中新对话不会反向复制首页。
画布通过 `conversation` 查询参数选择已保存的会话并打开原在线助手;参数只携带 ID,消费后移除,不自动发送模型请求、批准方案或重放任务。首页没有引入任何画布操作工具;需要继续执行时在画布原输入框输入要求。后续可在此基础上接电商工作台及更完整的角色上下文。
## 简化交互
模型根据相邻明确建议理解“可以/好的”,在当前任务范围内承接用户授权;常规创意选择、读取、已授权编辑和技术纠错不重复询问。请求上下文携带实际工具确认开关:关闭时直接调用授权范围内的普通画布工具,开启时交给原工具确认 UI,不增加前置口头确认。继续创作入口发送继续执行语义,默认回复简短。结构化方案及具体费用仍以程序批准记录为准,当前没有把自然语言自动转换为这两类批准。
前端仅传递 `input.agentRequests.canonical`,其中包括标准 `messages`、`tools`、`toolChoice`、`systemPrompt`。后端完成真实模型路由与资源归属检查、素材读取后,才转换实际供应商协议。普通内建协议只构造所选请求;声明式插件所需的四套字段仅在执行内存中展开,不写回任务正文。工具选择降级仍沿用原路径。
初始上下文只提供图片目录;模型通过只读 `canvas_inspect_image` 读取当前画布真实图片节点。构图预览最长边不超过 1600 像素、单图不超过 256 KiB;`original` 使用原图,`crop` 按归一化区域读取原始像素 PNG。单轮图片总预算为 6 MiB,超出则要求分批或缩小局部,不能悄悄降低细节精度。工具历史保存节点和读取方式,像素仅加入模型请求,新一批看图时释放上一批像素。原素材不变,读取事实不等于模型已完成视觉判断。
看图派生的预览与裁剪结果先上传资源存储,以内容摘要作为上传幂等键;原图复用已有账号资源。标准消息的图片地址只允许 `resource:` 引用,任务准备入口从这些引用生成去重的 `referenceImages` 清单。后端按当前用户校验资源归属和就绪状态,执行时才将引用替换为供应商需要的图片数据或临时地址;任务持久化正文不包含 Base64。上传失败时明确返回工具错误,不继续发送缺失素材的模型请求。
初始文本上下文按 192 KiB / 粗估 48,000 token 预算组织;当前要求、系统指令和已确认需求不截断,旧对话按完整会话组省略并告知模型。已落地方案使用结构摘要,待确认/失败修正方案保留原文。实时工具调用与结果保持配对,不做截断;包含工具目录的完整文本交换另有 384 KiB / 粗估 96,000 token 上限。估算不等于供应商 tokenizer 或真实模型窗口,达到预算时保留执行事实并提示缩小范围。完整工具任务发送前检查 15 MiB,后端 `/tasks` 的 16 MiB 限制不变。
当前消息自动恢复执行租约,连接异常后在后台重试,不再要求用户反复点击接管。历史消息只读,不竞争执行权;方案批准和具体费用批准仍保留,自动恢复连接不会自动批准或重新生成。
历史问答、已确认方案和报价默认折叠。当前阶段突出一个主操作,修改放在旁边,作品重做等低频操作收进“更多”;报价明细按需展开。布局沿用系统主题、间距和控件 token。点击修改回到原输入框,当前方案修改会撤销未消费的批准;已提交生成须先同步结果再调整。停止只阻止后续制作,画布撤销沿用原助手的撤销能力,不取消生成任务或退费。过期报价点击确认时先更新价格,仍须再次确认。
通用 Agent 根据所在页面提供角色、技能与素材上下文;本次只调整画布助手,不新增首页或其他工作台入口。
后端入口为 `handler/creation.go`,业务和权限在 `service/creation.go`、`creation_canvas.go`、`creation_agent_references.go`,持久化在 `repository/creation.go`。两张创作表和 Task 的提交关联见[数据库说明](backend-database.mdx)。
## 正式场景配置
内置场景统一维护在 `web/src/lib/creation/creative-scenarios.ts`,由 `creativeScenarioPrompt` 注入原在线 Agent 请求,模型自动识别场景,无需另选“智能创作”。当前属于随应用版本发布的内置策略,不是后台在线编辑器。已提交或已报价的请求保留原快照,发布配置后新的规划请求才采用新规则。
| 场景 | 主要业务 | 关键配置 |
| --- | --- | --- |
| 通用创作 | 咨询、文字创作、跨行业创作与场景识别 | 交付目标、受众、平台、素材、数量与必要规格;按主要目标选择行业 |
| 短剧创作 | 原创故事、剧本改编、单集片段与预告 | 剧情、题材、角色、场景、道具、对白、时长与画幅;输出完整剧情和视听时序 |
| 营销创作 | 品牌海报、社交种草、促销文案与单段广告视频 | 商品、受众、卖点、钩子、品牌、真实优惠、文案、数量与视频时长 |
| 电商创作 | 商品主图、详情图、场景图、搭配展示与商品视频 | 商品/服装/模特素材角色、外观保留、展示角度、真实规格、数量和视频时长 |
每个场景包含 `instruction`(角色与目标)、`fields`(需求字段白名单)、`questionGuides`(补问条件、问法和候选选项)、`proposalSections`(方案内容要求)及 `workflowRules`(节点和引用规则)。短剧展示名更新,持久化标识仍为 `short-film`。
模型先读取已知信息,再按条件选问,默认每轮 1~3 题,必要时最多 6 题;推荐选项须根据当前需求和真实模型能力调整。场景字段仅作为参考,允许通过安全字段校验的自定义需求;需求字段不能赋予审批或执行权限。用户已明确的题材、数量、比例、时长等不再询问。用户授权自主创意时可直接提方案,建议不能伪装成用户已确认信息。
`creative_respond.plan` 可以描述最多 12 个动态步骤及调整原因;`creative-plan.ts` 将其关联到真实问答、方案、画布与媒体状态,不接受模型填写完成状态。计划保存在原消息 state,并在下一轮保留已观察完成的步骤。未返回动态计划的旧消息继续采用原进度展示。专业指导可以跨场景组合,当前仍按原批准与媒体依赖执行,不等同于新任务级调度器。
已完成或暂停的交互提供“让助手分析结果与下一步”,用户点击后发起原文本模型请求,携带最近执行记录与当前画布。此操作不自动重跑媒体;新方案继续要求批准。结果是否可视觉检查取决于实际输入和模型能力,任务成功不等于画面质量检查通过。
`creative-agent-recovery.ts` 在原模型首轮与后续工具回复呈现前校验交互。错误及原始工具参数回到模型,最多两次自动修正,只开放创作交互工具;不能执行同批夹带的画布操作。模型可修正方案或提出动态问题;持续无效时展示恢复选择,原错误保留诊断日志。自动修正属于文本推理请求,沿用文本计费,不代表免费,也不替代媒体费用批准。取消时不再启动后续修正。
短剧只按真实内容需要生成缺失角色/场景/道具图;营销的海报版本分别体现不同传播角度;电商明确商品主体与可变背景。已有图片作为引用节点,不进入重复收费的生成项。只要文案时不自动附加媒体任务;缺少真实商品素材时不以虚构商品冒充实物。独立配音、合成和精确试衣不由场景提示词凭空赋予。
### 模型、素材与技能设置
场景不绑定固定模型或价格。部署中需要配置可用的系统受管文本模型;问答和方案使用工具调用,有图片资料时文本模型还需支持视觉理解。图片模型需配置真实支持的尺寸和参考图数量;视频模型需配置真实支持的时长、比例、参考图数量及声音能力。生成报价仍走现有模型计费,不能使用场景推荐值作为价格或能力依据。
用户继续通过原助手的模型选择、选中画布素材和技能入口提供上下文。Skills 仍由原在线 Agent 按现有运行时装载,不自动安装插件或绑定不存在的技能。没有额外行业 Skill 也会加载内置场景策略。
### 原历史会话中的持久化
交互存入 `CanvasAssistantMessage.detail`,标记为 `creative-interaction`,包含原模型输入、服务端 runId、结构化需求、问题与已提交答案、方案及版本、报价与批准摘要、执行状态和产物资源引用。它随原 `chatSessions` 进入已有账号隔离的画布存储与云同步,不建立第二套聊天历史。
每条结构化回复拥有稳定的提交身份,刷新按 runId 读取服务端运行事实;回看旧卡片不会自动批准或重放任务。未提交答案按账号、原会话和消息暂存本机。已提交答案进入原会话,并作为下一次原 Agent 请求的上下文。报价历史保留金额与批准摘要,账务仍以服务端为准。
在使用过程中调整补问方式修改 `questionGuides`,调整方案内容修改 `proposalSections`,调整素材依赖和产物组织修改 `workflowRules`;发布后对新的规划请求生效。已批准方案和费用不会因场景配置变动而自动扩大执行范围。
## API 合同
以下路径均以 `/api/creation-runs` 为前缀,使用现有登录 Cookie 和统一业务响应。对象归属由 service 校验。
| 请求 | 用途 |
| --- | --- |
| `POST /`、`GET /`、`GET /:id` | 按 clientKey 幂等创建、列表和恢复 run/submissions |
| `PATCH /:id` | 用 revision 保存结构化会话和状态 |
| `POST /:id/claim` | 用 expectedEpoch 接管执行,更新 owner 和 epoch |
| `POST /:id/heartbeat`、`release` | 续租与释放执行权 |
| `POST /:id/proposal-approve`、`proposal-invalidate` | 批准具体版本和操作范围,或使原批准失效 |
| `POST /:id/canvas` | 批准后绑定稳定画布,不提前建草稿节点 |
| `POST /:id/submissions/prepare` | 按 itemKey 准备具体请求和报价,不扣费、不提交 Task |
| `POST /:id/submissions/approve` | 批准列出的提交,核对报价有效性 |
| `POST /:id/submissions/refresh` | 从原请求生成后继报价,撤销未消费旧项,等待新批准 |
| `POST /:id/execute` | 使用已批准提交进入原 Task/账务事务,幂等返回任务 |
| `GET /:id/canvas-snapshot` | 获取当前画布和 snapshotHash |
| `POST /:id/canvas-commit` | 检查 epoch、批准范围与 snapshotHash 后提交画布 |
写请求携带 `owner`、`executionEpoch`;会话和方案写入还携带 `revision`。服务端批准字段独立于页面 state JSON;修改 state 不能自行授权。execute 返回 Task,不修改 run revision,刷新依 submission.taskId 对账,不以超时作为重复生成依据。
图片在会话中使用 `resource:` 标识,后端检查资源归属和模型视觉能力,执行时转换为相应供应商输入;不把带签名 URL 或 data URL 持久化进规划。图片生成先进入现有素材库再回写节点 assetId,引用下游生成时使用真实已就绪资源。
结构化方案的媒体提交仅支持受管模型,单次输出 count 为 1,媒体生成单独报价批准。原在线 Agent 的对话与工具推理沿用既有文本请求和计费方式,不再使用被撤回独立界面的分析报价入口。估算价格按实际用量结算,不代表消费上限。修改模型、参数、提示词或引用需重新批准具体提交;原任务仍运行或账务不明确时不能重做收费。
## 恢复与限制
关闭浏览器不会取消已提交的后端任务,后续编排需要重新打开会话并取得执行权。方案批准、费用批准和结果回写分别持久化;重做保留原节点及成功产物,新一轮使用新的提交标识。失败不得自动创建第二个收费任务。
画布写入只在对应画布适配器就绪时发生,服务端按批准范围限制改动。当前标签页通过现有远端同步队列串行化提交;这不是全站协作协议,旧页面跨标签或设备保存仍需避免同时编辑同一画布。既有直接生成和本机 Agent 不因此获得新审批规则。
实际短片、UI 与 PostgreSQL 联调状态见[待测试](../progress/pending-test.mdx)。