344 lines
13 KiB
Markdown
344 lines
13 KiB
Markdown
# 智念AIGC平台中文说明
|
||
|
||
智念AIGC平台是一个面向图片与视频创作的 Web 工作台。当前版本聚焦核心生产链路:提示词创作、素材上传、图片生成、视频生成、局部重绘、智能超清、历史资产管理和接口配置。
|
||
|
||
## 运维与对接文档
|
||
|
||
- [部署说明](./docs/DEPLOYMENT.md)
|
||
- [开放 API 对接说明](./docs/API.md)
|
||
- OpenAPI JSON:`GET /api/v1/openapi.json`
|
||
|
||
## 功能概览
|
||
|
||
- 统一创作入口:`/create`
|
||
- 结果资产管理:`/assets`
|
||
- 服务与引擎配置:`/settings`,管理员可见
|
||
- 后台日志管理:`/logs`,管理员可见
|
||
- 账号管理:`/accounts`,管理员可见
|
||
- 图片生成:即梦图片生成 4.6 或 EvoLink GPT Image 2
|
||
- 图片编辑:局部重绘、智能超清
|
||
- 视频生成:Seedance 2.0
|
||
- 素材引用:上传后可在提示词中使用 `@图片1`、`@视频1`、`@音频1`
|
||
- 本地开发兜底:未配置真实接口时,可使用 mock 流程完成产品验收
|
||
|
||
## 技术栈
|
||
|
||
- Next.js 15
|
||
- React 19
|
||
- TypeScript
|
||
- GSAP
|
||
- Supabase/Postgres 可选
|
||
- Aliyun OSS 可选
|
||
- Vitest
|
||
|
||
## 快速启动
|
||
|
||
开发环境:
|
||
|
||
```bash
|
||
npm install
|
||
cp .env.example .env.local
|
||
npm run dev -- --hostname 127.0.0.1 --port 3000
|
||
```
|
||
|
||
访问地址:
|
||
|
||
```text
|
||
http://127.0.0.1:3000
|
||
```
|
||
|
||
生产模式:
|
||
|
||
```bash
|
||
npm start
|
||
```
|
||
|
||
`npm start` 会先执行 `next build`,再启动 `127.0.0.1:3000`。
|
||
|
||
## 服务器一键部署
|
||
|
||
服务器推荐使用 Docker Compose:
|
||
|
||
```bash
|
||
git clone <你的仓库地址>
|
||
cd NianAIGC
|
||
bash scripts/deploy.sh
|
||
```
|
||
|
||
脚本会自动完成:
|
||
|
||
- 创建 `.env.local`
|
||
- 创建 `.runtime/data`、`.runtime/uploads`、`.runtime/generated-results`
|
||
- 创建 `.runtime/logs`
|
||
- 构建 Docker 镜像
|
||
- 使用 `docker compose up -d --build` 后台启动 Web 服务和 Worker 服务
|
||
|
||
默认访问:
|
||
|
||
```text
|
||
http://服务器IP:3000
|
||
```
|
||
|
||
如果要换端口,可以编辑 `.env.local`:
|
||
|
||
```env
|
||
APP_PORT=8080
|
||
NEXT_PUBLIC_APP_URL=http://你的服务器IP:8080
|
||
```
|
||
|
||
然后重新执行:
|
||
|
||
```bash
|
||
bash scripts/deploy.sh
|
||
```
|
||
|
||
常用 Docker 命令:
|
||
|
||
```bash
|
||
docker compose ps
|
||
docker compose logs -f zhinian-aigc
|
||
docker compose logs -f zhinian-worker
|
||
docker compose restart
|
||
docker compose down
|
||
```
|
||
|
||
如果服务器不用 Docker,也可以用 Node 直接部署:
|
||
|
||
```bash
|
||
npm ci
|
||
npm run build
|
||
npm run start:server
|
||
```
|
||
|
||
另开一个进程运行任务 Worker:
|
||
|
||
```bash
|
||
npm run worker
|
||
```
|
||
|
||
生产环境建议把 `NEXT_PUBLIC_APP_URL` 设置成真实域名或公网地址,配置 `ZHINIAN_INTERNAL_WORKER_TOKEN`,并把 `.runtime/` 做定期备份。
|
||
部署后如果页面或接口报错,登录后台访问 `/logs` 查看最近错误、请求路径、状态码和错误栈。日志文件默认在 `.runtime/logs/server-events.jsonl`。
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
npm run dev -- --hostname 127.0.0.1 --port 3000
|
||
npm test
|
||
npm run build
|
||
npm run health
|
||
npm run worker:once
|
||
npm run info
|
||
```
|
||
|
||
## 页面路由
|
||
|
||
| 路由 | 用途 |
|
||
|------|------|
|
||
| `/` | 自动跳转到 `/create` |
|
||
| `/create` | 统一创作入口 |
|
||
| `/create?mode=video` | 视频生成模式 |
|
||
| `/create?mode=inpaint` | 局部重绘模式 |
|
||
| `/create?mode=upscale` | 智能超清模式 |
|
||
| `/assets` | 历史任务与资产 |
|
||
| `/logs` | 后台日志管理 |
|
||
| `/settings` | 接口、引擎和服务配置 |
|
||
| `/accounts` | 组织成员账号管理 |
|
||
|
||
## 账户登录 / SSO
|
||
|
||
发布环境默认启用账户登录保护。Web 端支持 OAuth2 Authorization Code 和账号密码验证码两种登录方式:授权码模式会跳转认证中心,平台后端在 `/api/auth/callback` 用授权码换 token;账号密码方式会在本项目登录页提交账号、密码和图形验证码,由后端调用 `${AUTH_BASE}/oauth2/token` 的 password grant。两种方式都会通过 JWKS 本地验签 JWT,然后写入 HttpOnly 会话 cookie。
|
||
|
||
认证中心客户端需要配置回调地址:
|
||
|
||
```text
|
||
https://你的域名/api/auth/callback
|
||
```
|
||
|
||
核心配置:
|
||
|
||
| 变量 | 说明 |
|
||
|------|------|
|
||
| `ZHINIAN_AUTH_REQUIRED` | `auto` 默认策略;生产启用,本地可信开发可设 `0` |
|
||
| `ZHINIAN_AUTH_BASE_URL` | 认证服务网关地址,例如 `https://<gateway-domain>/auth` |
|
||
| `ZHINIAN_AUTH_CLIENT_ID` | 普通账号 OAuth2 客户端 ID,默认 `custom` |
|
||
| `ZHINIAN_AUTH_CLIENT_SECRET` | 普通账号 OAuth2 客户端密钥,只能保存在服务端 |
|
||
| `ZHINIAN_ADMIN_AUTH_CLIENT_ID` | 管理员登录入口 OAuth2 客户端 ID,默认 `app` |
|
||
| `ZHINIAN_ADMIN_AUTH_CLIENT_SECRET` | 管理员登录入口 OAuth2 客户端密钥,只能保存在服务端 |
|
||
| `ZHINIAN_AUTH_SCOPE` | 默认 `server` |
|
||
| `ZHINIAN_AUTH_ISSUER` | JWT issuer,默认 `https://pig4cloud.com` |
|
||
| `ZHINIAN_AUTH_PASSWORD_ENC_KEY` | 按认证中心 `security.encode-key` 对 password grant 的密码做 AES-CFB 加密,默认示例 `thanks,pig4cloud` |
|
||
| `ZHINIAN_AUTH_SESSION_SECRET` | 本地会话签名密钥,使用长随机字符串 |
|
||
| `ZHINIAN_ADMIN_AUTHORITIES` | 管理员权限码白名单,逗号分隔 |
|
||
| `ZHINIAN_ADMIN_USERS` | 管理员账号白名单,逗号分隔,默认 `ceshiop` |
|
||
|
||
受保护范围包括 `/create`、`/assets`、`/settings`、`/logs`、`/accounts`、第一方生成/资产 API,以及本地 `/uploads/*` 和 `/generated-results/*` 文件。普通用户主导航只显示创作和结果;`/logs`、`/settings`、`/accounts` 和 `/api/admin/*` 需要管理员权限。开放 `/api/v1/*` 仍使用 API Key,Worker 仍使用内部 token,不走浏览器 SSO。
|
||
|
||
如果认证中心客户端没有加入 `security.ignore-clients`,`/oauth2/token` 可能返回“验证码不能为空”。普通账号登录默认使用 `custom/custom`;登录页里的“管理员登录”入口使用 `app/app`。两组 client 都需要认证中心允许 password grant。
|
||
|
||
## 组织账号管理
|
||
|
||
后台账号管理通过组织模块接口维护成员、角色、部门绑定和成员状态,并通过企业端用户接口创建用户、重置密码。按运维提供的组织能力接口文档,需要在服务端配置:
|
||
|
||
| 变量 | 说明 |
|
||
|------|------|
|
||
| `ZHINIAN_ORG_API_BASE_URL` | 组织能力网关或统一服务前缀,例如 `https://<gateway-domain>/hotelStaff` |
|
||
| `ZHINIAN_ORG_API_TOKEN` | 备用 Bearer Token;默认优先转发当前登录管理员的 `access_token` |
|
||
| `ZHINIAN_STAFF_API_BASE_URL` | 企业端用户服务网关或统一服务前缀,例如 `https://<gateway-domain>/hotelStaff` |
|
||
| `ZHINIAN_STAFF_API_TOKEN` | 备用 Bearer Token,可为空,默认优先转发当前登录管理员的 `access_token` |
|
||
| `ZHINIAN_ORG_TENANT_ID` | 需要多租户 Header 时填写 |
|
||
| `ZHINIAN_ORG_ID` | 默认组织 ID,可为空,系统会优先使用组织列表第一项 |
|
||
| `ZHINIAN_ORG_MEMBER_LIST_PATH` | 可选,成员查询路径覆盖;默认 `/adminOrganization/organizationMember/organizationMemberList` |
|
||
|
||
成员分页列表通过 `hotelStaff` 的 `/adminOrganization/organizationMember/organizationMemberList` 对外代理;只有直连基础组织服务内部 `/organizationMember/organizationMemberList` 时才需要 `from: Y`。创建账号会优先调用 `/adminOrganization/organizationMember/addOrganizationMemberAndCreatePlatformUser`,密码重置调用 `/adminPcUser/resetPlatformUserPassword`;这些接口默认使用当前登录账号的 token,要求该账号具备管理员角色 `1`。
|
||
|
||
## 引擎说明
|
||
|
||
### 图片生成
|
||
|
||
图片生成可在设置页按能力切换:
|
||
|
||
- `jimeng`:火山 Visual 即梦能力
|
||
- `evolink`:EvoLink GPT Image 2 中转接口
|
||
|
||
### 图片编辑
|
||
|
||
- 局部重绘:即梦 inpainting 或 EvoLink inpaint
|
||
- 智能超清:即梦超清能力
|
||
|
||
### 视频生成
|
||
|
||
视频生成使用 Seedance 2.0。
|
||
|
||
当前参数限制已按官方接口收口:
|
||
|
||
- `duration`:`4` 到 `15` 的整数秒
|
||
- `duration=-1`:允许在环境变量或服务端归一化中表示模型自动选择
|
||
- `ratio`:`16:9`、`4:3`、`1:1`、`3:4`、`9:16`、`21:9`、`adaptive`
|
||
- `resolution`:`480p`、`720p`、`1080p`
|
||
- Seedance 2.0 fast 不支持 `1080p`
|
||
|
||
## 任务管理与开放 API
|
||
|
||
平台现在支持服务端任务管理:页面和开放 API 提交任务后只写入 `queued`,由 Worker 统一提交供应商、轮询状态、导入资产、重试和触发 Webhook。这个实现不是 Redis/BullMQ 消息队列,而是基于 `generation_jobs` 的任务状态机、锁和调度字段。
|
||
|
||
开放 API 使用 API Key:
|
||
|
||
```env
|
||
ZHINIAN_API_KEYS=demo-agent:change-me-public-api-key
|
||
ZHINIAN_INTERNAL_WORKER_TOKEN=change-me-worker-token
|
||
```
|
||
|
||
`ZHINIAN_API_KEYS` 冒号前的值是账号 ID,开放 API 任务和资产会按该账号 ID 写入独立 owner 分区,例如 `api:demo-agent`。
|
||
|
||
调用示例:
|
||
|
||
```bash
|
||
curl -X POST http://127.0.0.1:3000/api/v1/jobs \
|
||
-H 'Authorization: Bearer change-me-public-api-key' \
|
||
-H 'Content-Type: application/json' \
|
||
-H 'Idempotency-Key: demo-job-001' \
|
||
-d '{"capability":"image.generate","prompt":"生成一张专业产品主图"}'
|
||
```
|
||
|
||
主要接口:
|
||
|
||
| 接口 | 说明 |
|
||
|------|------|
|
||
| `GET /api/v1/capabilities` | 查询图片、修图、超清、视频能力 |
|
||
| `POST /api/v1/assets` | 上传文件或注册外部素材 URL |
|
||
| `GET /api/v1/assets` | 查询素材 |
|
||
| `POST /api/v1/jobs` | 创建生成任务 |
|
||
| `GET /api/v1/jobs` | 按状态、能力、时间分页查询任务 |
|
||
| `GET /api/v1/jobs/:id` | 查询单个任务 |
|
||
| `POST /api/v1/jobs/:id/cancel` | 取消未完成任务 |
|
||
| `GET /api/v1/openapi.json` | OpenAPI 描述 |
|
||
|
||
幂等规则:同一 API Client 使用同一个 `Idempotency-Key` 重复提交相同请求时返回已有任务;请求内容不同会返回 `409`。
|
||
|
||
Webhook:创建任务时传 `webhookUrl`,任务进入 `succeeded`、`failed`、`cancelled` 或 `expired` 后会回调。配置 `ZHINIAN_WEBHOOK_SECRET` 后,请求头会带 `X-Zhinian-Signature: sha256=...`。
|
||
|
||
## 环境变量
|
||
|
||
复制 `.env.example` 后按需配置:
|
||
|
||
```bash
|
||
cp .env.example .env.local
|
||
```
|
||
|
||
核心变量:
|
||
|
||
| 变量 | 说明 |
|
||
|------|------|
|
||
| `APP_PORT` | Docker Compose 对外暴露端口,默认 `3000` |
|
||
| `NEXT_PUBLIC_APP_URL` | 对外访问地址,用于生成回调/本地文件 URL |
|
||
| `ZHINIAN_AUTH_REQUIRED` | 账户登录保护策略 |
|
||
| `ZHINIAN_AUTH_BASE_URL` | 统一认证中心地址 |
|
||
| `ZHINIAN_AUTH_CLIENT_ID` | OAuth2 客户端 ID |
|
||
| `ZHINIAN_AUTH_CLIENT_SECRET` | OAuth2 客户端密钥 |
|
||
| `ZHINIAN_ADMIN_AUTH_CLIENT_ID` | 管理员登录入口 OAuth2 客户端 ID |
|
||
| `ZHINIAN_ADMIN_AUTH_CLIENT_SECRET` | 管理员登录入口 OAuth2 客户端密钥 |
|
||
| `ZHINIAN_AUTH_SESSION_SECRET` | 本地登录态签名密钥 |
|
||
| `ZHINIAN_ADMIN_AUTHORITIES` | 管理员权限码白名单 |
|
||
| `ZHINIAN_ADMIN_USERS` | 管理员账号白名单,默认 `ceshiop` |
|
||
| `ZHINIAN_ORG_API_BASE_URL` | 组织账号接口 Base URL |
|
||
| `ZHINIAN_ORG_API_TOKEN` | 组织账号接口备用 Bearer Token |
|
||
| `ZHINIAN_STAFF_API_BASE_URL` | 企业端用户接口 Base URL |
|
||
| `ZHINIAN_STAFF_API_TOKEN` | 企业端用户接口备用 Bearer Token,可为空 |
|
||
| `ZHINIAN_ORG_TENANT_ID` | 组织接口租户 ID |
|
||
| `ZHINIAN_ORG_ID` | 默认组织 ID |
|
||
| `ZHINIAN_API_KEYS` | 开放 API Key,格式 `账号ID:key,账号ID2:key2`;任务和资产按账号 ID 写入独立 owner 分区 |
|
||
| `ZHINIAN_INTERNAL_WORKER_TOKEN` | 内部 Worker tick 接口令牌 |
|
||
| `ZHINIAN_WEBHOOK_SECRET` | Webhook 签名密钥,可选 |
|
||
| `ZHINIAN_WORKER_*` | Worker 间隔、批量、锁超时、重试配置 |
|
||
| `IMAGE_GENERATE_ENGINE` | 图片生成引擎:`jimeng` 或 `evolink` |
|
||
| `IMAGE_INPAINT_ENGINE` | 局部重绘引擎:`jimeng` 或 `evolink` |
|
||
| `VOLCENGINE_ACCESS_KEY_ID` | 火山引擎 Access Key |
|
||
| `VOLCENGINE_SECRET_ACCESS_KEY` | 火山引擎 Secret Key |
|
||
| `EVOLINK_API_KEY` | EvoLink API Key |
|
||
| `SEEDANCE_API_KEY` | 火山方舟 Seedance API Key |
|
||
| `SEEDANCE_MODEL` | Seedance 模型 ID |
|
||
| `SEEDANCE_RATIO` | 默认视频比例 |
|
||
| `SEEDANCE_DURATION` | 默认视频秒数 |
|
||
| `SEEDANCE_RESOLUTION` | 默认视频分辨率 |
|
||
| `ALI_OSS_*` | 上传素材和生成结果转存配置 |
|
||
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase URL |
|
||
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase 匿名 Key |
|
||
| `SUPABASE_SERVICE_ROLE_KEY` | Supabase 服务端 Key |
|
||
|
||
未配置 Supabase 时,应用会使用 `.runtime/data/web-app-state.json` 作为本地开发数据层。未配置 OSS 时,上传和生成结果会写入 `.runtime/uploads` 与 `.runtime/generated-results`。
|
||
|
||
## 项目结构
|
||
|
||
```text
|
||
app/ Next.js App Router 页面与 API
|
||
components/ 前端组件
|
||
lib/ 业务逻辑、服务端适配器、接口客户端
|
||
lib/ui/motion.ts GSAP 动效工具层
|
||
public/logo/ 品牌 Logo
|
||
scripts/ 启动、健康检查与信息脚本
|
||
supabase/schema.sql 数据库结构
|
||
tests/ Vitest 测试
|
||
Dockerfile Docker 镜像构建
|
||
docker-compose.yml 服务器部署编排
|
||
```
|
||
|
||
## 验证
|
||
|
||
推荐提交前执行:
|
||
|
||
```bash
|
||
npm test
|
||
npm run build
|
||
npm run health
|
||
npm run worker:once
|
||
```
|
||
|
||
如果本地 dev server 正在运行,建议先停止后再执行生产构建,避免 Next.js dev 缓存与生产构建互相影响。
|
||
|
||
## 注意事项
|
||
|
||
- `.env.local` 不应提交到仓库。
|
||
- `.next/`、`.runtime/`、`node_modules/` 不应提交到仓库。
|
||
- 当前主产品名为 `智念AIGC平台`。
|
||
- 顶部 Logo 使用 `public/logo/zhinian-logo.png`。
|