docs(nit): AI Studio 第一阶段(聚合图像/数字人)设计 spec
NIT 精英班专属 AI Studio 第一阶段:聚合 picture_agent(图像)+ digital_human(数字人)。 学员下游 key 配置 + surface 认证扩展(接受 student JWT)+ 积分轨计费 + 统一入口前端。 不碰 money_printer,视频/文本创作/PPT 留后续阶段。前置依赖第一期报考闭环。 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,100 @@
|
|||||||
|
# NIT AI Studio — 第一阶段(聚合图像/数字人)设计
|
||||||
|
|
||||||
|
日期:2026-06-17
|
||||||
|
分支:`nit_edu`
|
||||||
|
状态:已通过 brainstorming,待落实现计划
|
||||||
|
|
||||||
|
## 背景
|
||||||
|
|
||||||
|
NIT 精英班专属的「AI 综合应用软件」是一套面向精英班学员的 AI 创作工具,完整愿景涵盖
|
||||||
|
文本结构化创作(论文/小说/剧本/分镜/教材)、PPT 生成、图像(P图/制图)、视频
|
||||||
|
(文生/图生/短视频)、数字人。体量过大,分阶段建设。
|
||||||
|
|
||||||
|
**本 spec 仅覆盖 AI Studio 第一阶段:聚合现有图像 + 数字人能力**,为精英班学员提供
|
||||||
|
统一创作入口,复用 BoosAPI 已有的 `picture_agent`(图像)与 `digital_human`(数字人)。
|
||||||
|
|
||||||
|
## 已确认的关键决策
|
||||||
|
|
||||||
|
1. 定位:NIT 精英班专属模块,非通用套件。
|
||||||
|
2. 第一阶段只聚合 `picture_agent`(图像)+ `digital_human`(数字人)。
|
||||||
|
3. 视频(含 money_printer、工作流视频)留后续阶段,本阶段完全不碰 money_printer。
|
||||||
|
4. 认证桥接:给精英班学员配后台下游 key + 扩展 surface 的 resolve_auth 接受 student JWT。
|
||||||
|
5. 计费:学员创作消耗走积分轨(已建的 points track),管理员可给学员充积分。
|
||||||
|
6. 文本创作 / PPT 留后续阶段。
|
||||||
|
|
||||||
|
## 前置依赖
|
||||||
|
|
||||||
|
本阶段 gate 在第一期(报考闭环)产物上,实现排在第一期之后:
|
||||||
|
- student JWT(`audience='student'`,第一期发放)。
|
||||||
|
- `enrollment.status=approved` 且 `tier=elite`。
|
||||||
|
- 非精英班 / 未审核 → 403。
|
||||||
|
|
||||||
|
## 非目标(本阶段明确不做)
|
||||||
|
|
||||||
|
- 视频能力(文生/图生/短视频、money_printer、工作流视频)。
|
||||||
|
- 文本结构化创作(论文/小说/剧本/分镜/教材)。
|
||||||
|
- PPT 生成。
|
||||||
|
- 通用套件(面向非 NIT 用户)。
|
||||||
|
|
||||||
|
## 学员下游 key 配置
|
||||||
|
|
||||||
|
- `downstream_api_keys` 加可空 `student_id` 列(关联 `students.id`,与现有 `user_id` 并列;
|
||||||
|
二者互斥:一行要么属于 user,要么属于 student)。
|
||||||
|
- 审核通过且 `tier=elite` 时,自动 provision 一个学员下游 key,沿用现有 `comfyui-agent`
|
||||||
|
内置 key 的幂等 `ensure` 模式:缺失则建、被禁用则重新启用、保持唯一。
|
||||||
|
- 学员从精英班降级或报考被驳回时,禁用该 key。
|
||||||
|
- key 命名约定:`sk-nit-stu-{uuid_hex}`,`name='nit-student'`,便于识别。
|
||||||
|
|
||||||
|
## 认证扩展
|
||||||
|
|
||||||
|
仅改两个 surface:`src/routes/picture_agent.rs`、`src/routes/digital_human.rs`。
|
||||||
|
**money_printer 不动。**
|
||||||
|
|
||||||
|
各自的 `resolve_auth` 加一个分支(现有 admin/proxy token、user JWT 逻辑不变):
|
||||||
|
- 新增:`audience='student'` 的 JWT → 校验该学员存在 `approved` 且 `tier=elite` 的报考
|
||||||
|
→ 查其 `student_id` 对应的下游 key → 作 `outbound_key`。
|
||||||
|
- 抽共享 helper `resolve_student_outbound_key(student_id, state) -> AppResult<(key_id, key)>`,
|
||||||
|
放在 `src/services/nit/`,两处 surface 复用,避免重复逻辑。
|
||||||
|
- 校验失败(无 elite 报考 / key 缺失)→ 403。
|
||||||
|
|
||||||
|
## 计费(复用积分轨)
|
||||||
|
|
||||||
|
- 学员用图像/数字人,消耗扣在其下游 key 上,走已建的积分轨(`apply_points_delta`,track=points)。
|
||||||
|
- 管理员给学员充积分:扩展现有 admin 积分调整端点支持 `student_id`(或新增 NIT 学员积分端点,
|
||||||
|
实现时择一,优先扩展现有端点)。
|
||||||
|
- 精英班开通时可送一笔初始积分,数额为配置项,默认 `0`。
|
||||||
|
|
||||||
|
## 统一入口(前端)
|
||||||
|
|
||||||
|
- `src/web/pages/nit/Studio.tsx`:精英班学员创作工作台首页,卡片式列出「图像 / 数字人」
|
||||||
|
两个入口 + 显示积分余额。
|
||||||
|
- 卡片跳进现有 `picture_agent` / `digital_human` 页面(带 student token)。
|
||||||
|
- 非精英班学员:显示引导升级提示,不展示工具卡片。
|
||||||
|
- `api.ts` 的 `nitApi` 扩展:查学员积分余额、查 Studio 可用工具。
|
||||||
|
|
||||||
|
## 错误处理
|
||||||
|
|
||||||
|
- 非精英班 / 未审核学员访问 → 403 + 友好提示。
|
||||||
|
- 学员下游 key 缺失(provision 失败)→ 明确错误,提示联系管理员。
|
||||||
|
- 积分余额不足 → 拦截创作,提示充值(复用现有 billing 引导文案范式)。
|
||||||
|
|
||||||
|
## 测试策略(TDD)
|
||||||
|
|
||||||
|
后端(rstest + 内存 SQLite,沿用现有 `recharge_test_pool` 范式):
|
||||||
|
- 学员下游 key ensure 幂等性(缺失则建 / 禁用则启用 / 降级则禁用)。
|
||||||
|
- `resolve_auth` 接受 elite student JWT、拒绝非精英班、拒绝未审核。
|
||||||
|
- 学员创作扣积分、余额不足拦截。
|
||||||
|
|
||||||
|
前端(vitest):
|
||||||
|
- `nitApi` 积分余额 / Studio 工具查询方法(沿用 `api.test.ts` 范式)。
|
||||||
|
- Studio 页卡片渲染 + 余额展示 + 非精英班引导(沿用 `UsageRecords.test.tsx` 范式)。
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
- `cargo build -j 2`、`cargo test -p boosapi --lib`(后端 nit / picture_agent / digital_human 相关)。
|
||||||
|
- `npx vitest run`(相关前端测试)、`npm run typecheck`。
|
||||||
|
|
||||||
|
## 提交约定
|
||||||
|
|
||||||
|
全部在 `nit_edu` 分支,不混入 `refactor/rust-backend`。提交按逻辑拆分(迁移 / service /
|
||||||
|
surface 认证 / 前端 分开),沿用项目中文 commit 风格。
|
||||||
Reference in New Issue
Block a user