docs: 项目移交报告(2026-06-24)—— 整体状况/本程改动/视频流程现状/已知待办/团队管理

给接手同学的速览:项目是什么、视频生成流程已端到端跑通、本程(06-22~06-24)做了什么、
已知小问题(admin刷新404已修/借AirDrama账号待换/视频poster/质量词半接/线上建商品复核)、
团队管理现状与缺口、风险提醒、已有文档索引、跑起来&部署速记。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-24 02:04:08 +08:00
co-authored by Claude Opus 4.8
parent 51d5010c43
commit c7baf5cc9d
+200
View File
@@ -0,0 +1,200 @@
# AirShelf 项目移交报告 · 2026-06-24
> 给接手的开发同学:这份是当前项目整体状况 + 我们这一程做了什么 + 还差什么的速览。
> 配合看仓库里已有的:[CLAUDE.md](CLAUDE.md)(工程约定/铁律)、[core/ARCHITECTURE.md](core/ARCHITECTURE.md)、[PRD.md](PRD.md)、[交接-AI生成Agent化-2026-06-17.md](交接-AI生成Agent化-2026-06-17.md)。
---
## 0. 一句话结论
**核心「商品 → 视频」生成全流程已经端到端跑通**(实测项目「电子吧唧 · 短视频 · v3」四段视频全部出片)。
所以**视频这条线暂时不用再投入**,可以先去做别的。下面第 5、6 节列了几个**已知小问题 + 临时依赖**,不阻塞主流程,回头清。
---
## 1. 项目是什么
- **AirShelf** —— AI 短视频带货生成平台。一条流水线把「一个商品」变成「可投放的竖屏带货短视频」。
- **真实开发目录在 [core/](core/)**(仓库根的 `电商AI平台/` 只是 UI 设计稿/视觉标准答案,不是运行代码):
- [core/frontend/](core/frontend/) —— React 19 + Vite + TS,真网站前端。
- [core/backend/](core/backend/) —— Django + DRF + Celery,后端 + 平台后台。
- [core/qa/](core/qa/) —— 截图对比测试。
- **部署**Gitea Actions[.gitea/workflows/deploy.yaml](.gitea/workflows/deploy.yaml))→ 打 Docker 镜像 → K8s。
- dev 分支 → **测试环境**:前端 `https://airshelf-web.test.airlabs.art`,推 dev 自动构建部署。
- 三个核心服务:`airshelf-core-api`Django)、`airshelf-core-worker`Celery)、`airshelf-core-web`nginx 托管 SPA + 反代 /api)。
### 生成流水线(5 阶段)
```
商品(选品) → 脚本(脚本 Agent 流式对话) → 实体提取(角色/场景) →
基础资产(人物立绘/三视图 · 场景图 · 商品三视图) → 故事板(分镜图) → 视频(Seedance 逐段出片)
```
### AI 链路(详见 CLAUDE.md「AI 生成 Agent 化架构」)
- **可插拔 Provider**:火山官方直连 `VolcanoArkProvider`(豆包/SeeDream/Seedance+ 通用中转站 `OpenAICompatibleProvider`yunqi/tokenssr)。分流在 [services.py](core/backend/apps/ai/services.py) `build_provider()`
- **默认模型**:图像 = `yunqi:gpt-image-2`;视频 = `doubao-seedance-2-0`;脚本/提取 = 豆包 doubao-seed-2.0-pro。
- **火山人像合规审核**:含人脸的素材(人物立绘/三视图/分镜图)自动送火山「人像素材库」审核,拿绿/红盾。
---
## 2. 视频生成流程现状:✅ 顺畅,已跑通
实测 `电子吧唧 v3` 四段视频提交火山全部 ACCEPTED、正常出片。让它跑通的**关键认知**(接手必懂):
> **火山 Seedance 2.0 对「写实人脸」的原始图片直链会直接 400 拒**`InputImageSensitiveContentDetected`)。
> 含人脸的参考图(人物立绘、分镜图)**必须走「素材库引用」`asset://asset-xxx`**,而不是原始 TOS 直链。
> 素材库引用要求:① 资产已送审进库(有 `review_remote_id`processing 也行,不必等 active);② **素材库和 Seedance 必须同一个火山账号**(见第 5.2 节临时依赖)。
代码位置:[services.py](core/backend/apps/ai/services.py) `_seedance_ref_url()` / `_video_reference_images()`
### 视频提示词(admin 可改)
真正发给 Seedance 的正文长这样(admin「提示词」页的「视频」卡可改模板):
```
【设定】@图1是学生女主(角色),@图2是室友(角色),@图3是女生宿舍书桌(场景),@图4是商品(商品)。
【分镜】根据@图5分镜图生成「电子吧唧」短视频。
【脚本】画面:… / 台词:室友:… / 学生女主:…
电商带货短视频,商品露出清晰,节奏有转化感。不要字幕,不要背景音乐,但是要有音效,逼真的音效。
```
- 时长/比例(duration/ratio/resolution**是 API 参数单独传**,不写进正文。
- 对白带说话人、照脚本原样放(不再拍扁成一行口播)。
---
## 3. 我们这一程做了什么(2026-06-22 ~ 06-24
按模块归类(完整见 `git log`,均带 Claude 署名):
**提取(角色/场景)**
- 实体提取改**异步 worker + 轮询**,根治线上 502 / 刷新丢 loading / 重复扣费。
- skills 随后端打进镜像(之前放仓库根 → 镜像里没有 → 系统提示词为空 → 提取吐散文解析失败)。
- 锁定豆包 2.0 Pro + 写死 JSON 输出契约兜底。
**视频(本程重点,让它跑通)**
-**真人/分镜图走素材库 `asset://` 锁脸**,根治 Seedance「人物/场景全错」。
- 提交报错**接住返 JSON、不再 500 白屏**;分镜图 processing 态也能走 asset://。
- 视频卡交互反馈(重跑转圈、防连点双扣)、「全部重跑」真重跑已完成段、「共 N 版」入口。
- 视频卡用首帧当封面(`#t=0.1`),不再空白占位。
- 视频提示词:台词带说话人、时长/比例只走参数。
**故事板**
- 整张生成时每张分镜转圈(不全屏遮挡)、未生成占位回 2:3 竖屏。
- ⭐ 分镜图挂**火山人像审核盾** + 红盾可「重新送审」(审核超时是误判,重提即过)。
**商品**
- ⭐ 建商品改 **upload-first**(图先进桶拿 asset,创建时带 `cover_asset`+`images` 一块落库),根治「商品创建失败」。
- 商品图删除接通(之前叉子是纯 CSS 装饰没绑事件)+ 至少保留一张。
**图片比例 / admin**
- admin「提示词」页:视频线 6 条生图/视频提示词正文 + 比例**可在后台改,不再写死**。
- 真 16:9 支持(`1536x864`,原来误当 3:2);人物三视图/商品三视图/场景图默认设成 16:9(分镜图/立绘/视频保持竖屏)。
- 脚本按向导选的时长出(之前写死 60 秒)。
---
## 4. 怎么跑起来(接手速记)
**本地后端(连真测试库,不是隔离 sqlite)**
```bash
cd core/backend
DJANGO_SETTINGS_MODULE=airshelf.settings.development .venv/bin/python manage.py runserver 127.0.0.1:8010 --noreload
```
**本地前端**`cd core/frontend && npm run dev`5173HMR/api 走 8010)。
**跑测试**(远程库无建库权限,必须 sqlite)
```bash
cd core/backend
DB_ENGINE=sqlite DJANGO_SETTINGS_MODULE=airshelf.settings.test .venv/bin/python manage.py test
```
**部署**:推 dev → Gitea Actions 自动构建 + 跑迁移 + 滚动部署。**默认不推,改完即停,明确说推才推**(CLAUDE.md Git 铁律)。
> 注:本机用的是 python-build-standalone 的 CPython 3.12(系统自带 3.9 跑不了 Django 5),venv 在 `core/backend/.venv`。
---
## 5. 已知问题 / 待办(不阻塞主流程,回头清)
### 5.1 ⚠️ Admin 页刷新报「找不到网页」(404)—— 根因已定位,修法明确
**现象**:在 `/admin/...`(如 `/admin/prompts`)刷新页面 → 404。点链接进去没事(前端路由),一刷新就挂。
**根因**:路径冲突。
- React 平台后台用的是客户端路由 `/admin``/admin/prompts``/admin/teams`
- 但 nginx[core/frontend/nginx.conf](core/frontend/nginx.conf))里有 `location /admin/ { proxy_pass …api }`,把 `/admin/` **反代给了 Django**
- Django[core/backend/airshelf/urls.py](core/backend/airshelf/urls.py))只有 `path("admin/", admin.site.urls)`Django 自带后台),找不到 `/admin/prompts` → 404。
**推荐修法**(把 Django 自带后台挪开,让 `/admin/*` 回落 SPA):
1. `urls.py``path("admin/", admin.site.urls)``path("django-admin/", admin.site.urls)`
2. `nginx.conf``location /admin/``location /django-admin/`
这样 `/admin/*` 落到底部 `try_files $uri $uri/ /index.html`SPA 路由),刷新就正常了。
> 约 10 分钟的小改。要的话可以直接做。
### 5.2 ⚠️ 临时借 AirDrama 火山账号(**待换自有,最该尽快处理的基建项**)
- **真人素材库审核** 用的是借来的 AirDrama 账号 AK/SK`.env``ASSETS_API_*`)。
- **视频 Seedance** 我们临时也指到 AirDrama 账号(`.env``VIDEO_ARK_API_KEY`,仅覆盖 video 能力,见 [services.py](core/backend/apps/ai/services.py) `build_provider`)—— 因为 `asset://` 素材库引用必须和 Seedance 同账号才解析得到。
- **终态**:等自有火山账号开通「人像素材库(Assets API)」后,把 `ASSETS_API_*` 换成自有账号 AK/SK,并删掉 `VIDEO_ARK_API_KEY` 这行(视频自动回落自有 `VOLCANO_ARK_API_KEY`)。CLAUDE.md 里记的「待张业昌换」就是这个。
### 5.3 视频封面:后端抽帧没产出 poster(前端已兜底)
- 后端 [services.py](core/backend/apps/ai/services.py) `_generate_video_poster` 本应抽视频首帧存成封面图,但当前环境**没产出 poster 文件**(大概率缺 ffmpeg/抽帧依赖)。
- 现在靠前端 `<video src=…#t=0.1>` 让浏览器渲染首帧当封面,已经能看。要更稳/要真 poster 再补后端抽帧依赖。
### 5.4 质量词页(admin)半接状态
- admin「质量词」页目前**只喂 `model_tryon`(模特上身)**一处;人物/故事板/视频的质量词已经不接了(提示词改走「提示词」页)。
- 现状不影响生成(质量词全空也不报错)。回头要么把它清成只留 model_tryon,要么并进「提示词」页统一管。
### 5.5 线上建商品(需接手同学复核一次)
- upload-first 修复已推 dev、线上 bundle 实测**含新代码**(旧「先建后传」drawer 已无)。
- 之前有同事报「线上还是失败」,排查下来最可能是**测试时部署没完成 / 浏览器开着旧标签缓存**。请接手后**硬刷新**Cmd/Ctrl+Shift+R)在 `airshelf-web.test.airlabs.art` 再建一次(记得拖图、等图转圈→完成再点创建)确认。若仍失败,开 F12 Network 看是 `/api/assets/upload/` 还是 `/api/products/` 挂、什么状态码。
---
## 6. 团队管理现状 + 缺什么
**这个项目是按团队 + 平台超管两层来管的,地基是齐的:**
已有([apps/accounts/models.py](core/backend/apps/accounts/models.py) + [apps/billing/](core/backend/apps/billing/) + admin 后台):
- **Team**(团队,有 owner、状态、通知偏好);
- **TeamMember**(成员,角色 owner/admin/member、状态、**每人月度额度** `monthly_credit_limit`);
- **Invitation**(邀请码:超管发「开团码」= 新用户注册即开新团队当 owner;团队 owner 发「入团码」);
- **计费**:每团队一个 billing `Account``balance` + `reserved_balance`),生成走**预扣 → 成功扣费 / 失败释放**(`CreditReservation` + 流水);
- **平台超管后台**`/admin`,分阶段已上线):概览 / 邀请码 / 团队 / 用户 / 提示词 / 质量词 / 资产审核 / 任务监控 / 模型供应商 / 计费审计 / 额度策略 / 治理。
**可能缺 / 待复核(接手可以扫一遍确认):**
- **团队主自助管理**:团队 owner 在「前台」自助改团队名/管成员/看本团队用量的页面是否完整(很多管理动作目前集中在平台超管后台)。
- **充值/加额闭环**:团队余额怎么充?目前看到的是**注册发试用额度** + 超管手动调额;有没有「自助充值」入口要确认(可能本期不做)。
- **认证**:登录/注册是「用户名 + 密码 + 邀请码」,**有意不做邮箱**(CLAUDE.md 有定调:2026 中国市场);**手机号注册后续再做,本期未做**。
- **5.1 的 admin 刷新 404** 也属于团队/后台体验问题,建议先修。
---
## 7. 其他要提醒接手同学的点 / 风险
- **`.env` 进 git 且含真实密钥**`core/backend/.env` 被**有意放行进版本库 + 打进 CI 镜像**(`.gitignore``!core/backend/.env`),里面是真密钥(火山/TOS/中转站/TTS)。这是当前团队**有意为之**(就内部几人用)。移交时**提醒新人别外传仓库**,长期建议改走 K8s Secret / CI 注入。
- **测试环境与本地共用同一套测试 MySQL**:本地 development 设置直连真测试库;跑 Django 单测必须 `DB_ENGINE=sqlite`(远程库无建库权限)。改数据小心。
- **skills 必须放 `core/backend/` 内**:镜像由 `./core/backend` 构建,skills 放仓库根会不在构建上下文 → 提示词加载为空。提取/脚本两套 skill 都在 [core/backend/skills/](core/backend/skills/)。
- **设计规范铁律**:改任何页面/CSS 前先读 [电商AI平台/design.md](电商AI平台/design.md),用现成组件、单橙锚点、8px 圆角、不写裸 hex。详见 CLAUDE.md。
- **审核超时**:含人脸素材送审后若长时间没人轮询(之前故事板趴不轮询)会被本地超时兜底标「未过审」——这是误判,红盾点「重新送审」即可(现已加故事板趴轮询)。
---
## 8. 已有文档索引(别重复造轮子)
| 文档 | 内容 |
|---|---|
| [CLAUDE.md](CLAUDE.md) | 工程约定 / 设计铁律 / AI 链路架构 / 认证定调(**接手必读**) |
| [core/ARCHITECTURE.md](core/ARCHITECTURE.md) | 后端架构 |
| [PRD.md](PRD.md) | 产品需求 |
| [交接-AI生成Agent化-2026-06-17.md](交接-AI生成Agent化-2026-06-17.md) · [AI生成-Agent化落地方案.md](AI生成-Agent化落地方案.md) | AI 生成 Agent 化的设计与落地 |
| [image调用参考.md](image调用参考.md) · [tokenssr接口文档.md](tokenssr接口文档.md) | 图像/中转站接口参考 |
| [性能审计报告-AirShelf-2026-06-19.md](性能审计报告-AirShelf-2026-06-19.md) · [UI还原对比报告-AirShelf-2026-06-19.md](UI还原对比报告-AirShelf-2026-06-19.md) | 性能 / UI 还原审计 |
| [电商AI平台/design.md](电商AI平台/design.md) | 设计规范 SSoT |
---
## 9. 给接手同学的建议优先级
1. **先确认主流程**:本地(或线上硬刷新后)走一遍 商品→脚本→提取→资产→故事板→视频,确认四段出片。
2. **修 5.1 admin 刷新 404**10 分钟,体验问题)。
3. **跟进 5.2 自有火山账号**(基建,影响长期;目前借号能跑,但要尽快换)。
4. 5.3 / 5.4 / 5.5 看排期清。
5. 视频线既然通了,可按团队安排去做**别的模块**(如团队自助管理 / 充值闭环 / 手机号注册等本期未做项)。
— 本报告由本程结束时整理(2026-06-24)。有不清楚的,仓库 `git log`(带 Claude 署名的提交)每条 message 都写了「改了什么 + 根治什么」,可逐条回看。