Skip to content

ai_engine 空骨架:ports 契约 + DerivationStrategy 分流 + 串联 #53

Description

@johnnyzhang-eng

背景

后端骨架(#47)与 CI(#52)已铺 common / framework / ai_engine / app 四包 + 分层契约门禁,但 ai_engine 目前全是空 .gitkeep

ai_engine =「prompt → 资产包」整条生产线,其真实逻辑已在个人仓 windup-pipeline 实测跑通(含端到端 walk:定妆母版 → kling-video-o1 图生视频 → 最后一公里 → 引擎序列帧)。

本 Issue 把该层的系统架构(对外接口 + 串联 + 动作分流决策)落成空骨架入库,后续开发在其上叠加。

架构说明(人主导设计)

对外接口

  • CharacterGeneratorPort.generate(card, action, cb)server 唯一入口。
  • 回调 port(ProgressPort 进度上报 / ArtifactStorePort 二进制存储)由 server / framework 实现并注入。
  • server 只依赖 ai_engine.ports(import-linter 分层门禁保证);换内部实现时 server 零改动。

动作分流 ROUTE_MATRIX(实测挣得,非拍脑袋)

动作 生成路线 依据
walk / run / attack 视频 i2v 逐帧独立生成锁不住"哪条腿在前" → 踢踏舞;视频天生连贯、腿自然交替(实测证据在 windup-pipeline 归档)
hit(离散姿势) 逐帧图生图 单帧可编辑价值高、无连续步态
idle Idle-B 程序化呼吸 逐帧生成只抖不呼吸

串联CharacterGenerator 选路线 → strategy.derive 出帧 → 最后一公里(对齐 / 循环闭合)→ 打包 + 存储 → AssetPackageRef

provider 抽象:图像 = gemini-flash-image;视频 = kling-video-o1(kling-v2-5-turbo / v2-1 已从端点下架,只 o1 可用);抠图 = rembg。均 behind interface,key 由 framework 注入,ai_engine 不读 env。

验收标准

  • 空骨架入库,uv run pytest 过(串联 smoke:路由正确 + generate 端到端跑通,数据 mock)。
  • ruff + lint-imports(分层契约)绿。
  • ports 接口经组内(app / framework 负责人)对齐确认。
  • 内部真实实现不在本 Issue —— 另开开发 Issue,迁 windup-pipeline,带测试。

关联

Refs #47(后端骨架)、#44(后端架构文档)。

空骨架草案(接口真 + 串联 + 内部桩,本地 pytest 2 passed)已备好,待 #47 合并 + ports 对齐后提 PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions