背景
后端骨架(#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。
验收标准
关联
Refs #47(后端骨架)、#44(后端架构文档)。
空骨架草案(接口真 + 串联 + 内部桩,本地 pytest 2 passed)已备好,待 #47 合并 + ports 对齐后提 PR。
背景
后端骨架(#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唯一入口。ProgressPort进度上报 /ArtifactStorePort二进制存储)由server/framework实现并注入。server只依赖ai_engine.ports(import-linter 分层门禁保证);换内部实现时 server 零改动。动作分流 ROUTE_MATRIX(实测挣得,非拍脑袋)
串联:
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 负责人)对齐确认。windup-pipeline,带测试。关联
Refs #47(后端骨架)、#44(后端架构文档)。