Files

8.6 KiB
Raw Permalink Blame History

AI 流水线与 Provider 设计 V1

文档状态:当前有效
基线日期:2026-07-15
目的:说明当前 AI 请求如何选择、执行、记录、回退和进入业务资产。

1. 设计目标

  • 业务不直接绑定单一厂商 SDK。
  • 每次调用可解释、可审计、可计费、可重试。
  • 同步和异步 Provider 使用统一日志与业务结果。
  • 用户指定的模型和参数不被静默替换。
  • Prompt 模板、实验请求和原样透传有明确边界。
  • AI 失败不会破坏已经确认的业务资产。

2. Provider 类型

当前目录覆盖:

  • TextProvider
  • NovelProvider
  • ImageProvider
  • VideoProvider
  • VoiceProvider
  • MusicProvider
  • EmbeddingProvider
  • ModerationProvider
  • LipSyncProvider(抽象存在,真实配置当前关闭)

数据库当前有 112 个 Provider 配置,其中真实配置 101 个、启用 64 个;Mock 配置 11 个、启用 10 个。全局 AI_PROVIDER_MODE 当前仍为 mock,但业务显式选择真实 Provider 时会产生真实调用。

3. 调用选择

一次调用可能同时受到以下输入影响:

  1. 用户明确选择的 provider_code
  2. 项目级模型偏好。
  3. 用户级模型偏好。
  4. 业务模块默认 Provider。
  5. Provider 启停、优先级、能力和成本限制。
  6. AI Router 的业务评分与回退规则。

当前 AI Router 主要用于真人视频,不是全平台统一路由。后续必须固定一套明确优先级,并在调用详情展示:请求选择、路由原因、实际 Provider、实际模型和回退链。

4. 请求生命周期

flowchart LR
  Input[业务输入] --> Build[构建请求]
  Build --> Preflight[参数/能力/素材 URL/成本预检]
  Preflight --> Config[解析 ProviderConfig]
  Config --> Submit[同步执行或异步提交]
  Submit --> Log[ProviderLog]
  Log --> Poll[异步轮询/回调]
  Poll --> Normalize[结果归一]
  Normalize --> Asset[Asset / VideoClip / 文本版本]
  Normalize --> QC[质量评估]
  QC --> Pass{通过?}
  Pass -- 否 --> Retry[同模型重试/回退/人工介入]
  Pass -- 是 --> Done[业务确认]

4.1 请求构建

请求快照至少保存:

  • 业务类型和关联项目/分镜/角色。
  • 原始输入与最终 Prompt。
  • 公共模板版本和是否旁路模板。
  • 模型、比例、时长、分辨率、种子等参数。
  • 参考素材的资产 ID、顺序和用途。
  • 预估成本和用户确认条件。

4.2 Preflight

提交前检查:

  • Provider 是否启用且类型匹配。
  • 参数是否在模型能力范围。
  • 参考图数量、格式、大小和顺序。
  • 外部 Provider 能否访问临时素材 URL。
  • 账户额度和项目成本上限。
  • 原生音频、首尾帧、多图参考等能力是否真实支持。
  • 实验请求是否要求禁止模板注入。
  • 新生产任务的画幅是否为唯一允许值16:9。
  • S+ Kling Omni 镜头的每个出场角色是否绑定质检分不低于90的已审批视频角色元素。
  • Omni 的图片、视频与元素组合是否满足数量和互斥限制;无参考视频时图片与元素合计不超过7。

4.3 结果归一

不同 Provider 的任务 ID、状态、URL、用量和错误格式必须转换为平台统一结构,再写入业务资产。临时 URL 不是最终资产,需下载到私有存储并保存来源信息。

5. Prompt 管理

Prompt 分为四层:

  1. 业务事实:剧本、角色、场景、动作和台词。
  2. 公共质量模板:画质、一致性、可用性和负向约束。
  3. Provider 适配:模型特有参数与表达。
  4. 本次覆盖:用户人工修改或严格原样提交。

优先级为“本次明确覆盖 > 已确认业务事实 > 公共模板 > Provider 默认”。公共模板不得改变台词、人物、镜头时长或参考图集合。

人物三视图已具备“主锚点参考”和“本次唯一角色描述覆盖”两种模式,并将视觉质检问题沉淀为后续优化经验。经验只能以版本化、可审阅方式进入公共模板,避免单个角色的专用词污染全局。

Kling 正式镜头不再重复大段描述已锁定角色五官。平台从不可变 Generation Plan 读取 CharacterProviderBinding 快照,把真实 element_id 写入 element_list,再在 Prompt 中使用与数组顺序一致的 <<<element_n>>> 标记。角色元素控制身份和绑定声线,镜头 Prompt 控制本次动作、表演、空间、台词与摄影。

S+ 结构化写路径新增阶段 Prompt Builder。Source Analyst、Adaptation Showrunner、Episode Planner 的公共模板与项目数据分离,运行时只注入不可变来源快照、已确认父合同和上一集状态。Writer 输出完整合同;Reviewer 只输出问题与结构化修复差异,不静默重写正文。用户可以在调用 Provider 前预览最终阶段 Prompt;Phase 2 默认不提供一键付费生成入口。

6. 任务与队列

6.1 队列

novel_queue / parse_queue / story_queue / character_queue
episode_queue / script_queue / storyboard_queue / image_queue
audio_queue / subtitle_queue / video_queue / qc_queue
review_queue / analytics_queue

6.2 平台任务状态

pending / running / success / failed / retrying
cancelled / manual_required / skipped

数据库中仍有历史 completed,需要迁移或兼容,不应继续产生新值。

6.3 执行模式

Worker 消费 BullMQ 后,通过受密钥保护的内部 API 委托 backend 执行。这样可复用业务逻辑,但也意味着 backend 必须能承受 Worker 回调并保持幂等。

6.4 已知覆盖缺口

以下任务在通用 Worker 映射中没有 Provider 执行器,可能被标记为 skipped

  • long_memory_generate
  • subtitle_generate
  • live_action_keyframe_generate
  • live_action_video_render
  • analytics_event

部分能力目前由同步 Service 完成,因此应选择:补齐 Worker 执行器,或从异步任务目录移除并明确同步语义。video_render 当前映射到 VideoProvider,与 FFmpeg 成片合成的命名也需要拆分。

7. 重试与回退

重试策略按错误性质区分:

错误 处理
参数/素材不可用 不盲目重试,返回可修复原因
限流/临时网络故障 指数退避重试
异步任务超时 先核对外部任务,避免重复扣费
质量不达标 同模型定向重试,必要时回退其他模型
多次失败 manual_required,保留全部候选和日志

回退不可静默发生。UI 应展示实际使用模型和回退原因。

8. 成本与额度

  • ProviderConfig 保存成本规则和能力配置。
  • ProviderLog 保存本次调用的估算/实际成本、耗时和状态。
  • QuotaAccountQuotaLog 支持冻结、释放和扣减。
  • 数据库历史 cost_actual 可能混有不同币种/规则,只能技术对账,不能直接作为财务总额。
  • 真实支付仍为 mock,不能把订单模型描述成生产支付闭环。

提交付费任务建议采用:

预估 -> 冻结额度 -> 执行 -> 按实际结算 -> 释放差额

异步任务重试必须复用或核验外部任务 ID,避免重复扣费。

9. 日志与审计

每次 AI 调用应能回答:

  • 谁、在哪个项目、为了哪个业务对象调用?
  • 用户请求了什么 Provider/模型?
  • 系统为何选择实际 Provider/模型?
  • 最终提交了什么参数和参考素材?
  • 是否注入模板、是否回退、重试了几次?
  • 外部任务 ID、耗时、状态和错误是什么?
  • 产生了哪些资产,哪一个被选择?
  • 估算成本、实际成本和额度变化是什么?

API Key、JWT、数据库密码和临时签名参数不能进入可下载日志或 Work 文档。

10. 新 Provider 接入清单

  1. 明确能力类型、模型和区域。
  2. 定义请求 DTO、参数范围和默认值。
  3. 实现鉴权、提交、轮询/回调、取消和结果归一。
  4. 处理文本、二进制和临时 URL 输入。
  5. 定义成本规则和币种。
  6. 增加 preflight 与错误分类。
  7. 增加 mock、单元测试和至少一次真实小额冒烟。
  8. 在 Provider Lab 验证参数透传。
  9. 验证日志不泄露密钥。
  10. 更新本文件、CHANGELOG 和项目状态文档。

11. 当前优先级

P0

  • 修复 Provider/Seedance 相关测试与真实策略不一致。
  • 对齐运行进程与最新构建。

P1

  • 固化模型选择优先级和路由解释。
  • 补齐素材 URL preflight。
  • 清理历史 running/failed 日志和任务积压。
  • 补齐队列执行映射与任务命名。

P2

  • 将 AI Router 扩展为可选的平台统一入口。
  • 建立 Provider 契约测试和录制回放测试。
  • 统一成本币种和财务口径。