面向个人用户的 AI 图片生成 + 编辑工作台。当前代码库已完成 round-2 的前台主链路,Phase 3 可以在 Windows 本地直接拉起并做最小回归验证。
已完成并可本地验证的能力:
- 个人用户注册 / 登录 / 登录态恢复 / 路由回跳
- 首页
/、创建页/create、工作台/workspace/:conversationId - 历史页
/history、作品库/library - 管理页
/admin与普通用户前台壳层分离 - API + Worker 异步任务链路、SSE / 轮询状态刷新
- 文生图、来源任务再编辑、上传图编辑、变体、Fork、失败恢复
- 本地对象存储 / MinIO、PostgreSQL、Redis、最小烟测脚本
当前推荐版本号:v0.3.0
- 仍处于
0.x阶段,说明产品还在快速迭代,不承诺稳定 API - 相比
0.1.0,现在已经不是只有底层链路,而是具备个人用户可跑通的前台创作闭环
apps/api:NestJS API、鉴权、任务入队、SSE、Prismaapps/apiWorker 入口:BullMQ 消费、上游调用、结果落库 / 入存储apps/web:Vite + React 前台工作台与管理页packages/shared:共享类型与常量infra:PostgreSQL、Redis、MinIO、本地 Docker Composescripts/dev:Windows 本地启动 / 停止脚本
- Windows PowerShell 5.1+ 或 PowerShell 7+
- Node.js 22+
- Corepack
pnpm@10.17.1- Docker Desktop
首次准备:
corepack enable
corepack prepare pnpm@10.17.1 --activate
pnpm install
Copy-Item .env.example .env默认推荐:
pnpm local:start这个命令会自动完成:
- 若缺少
.env,从.env.example复制 - 若缺少
node_modules,执行pnpm install - 启动 Postgres / Redis / MinIO
- 执行 Prisma generate + migrate deploy
- 打开 3 个新的 PowerShell 窗口:
- API:
pnpm --filter @yunwu/api dev:api - Worker:
pnpm --filter @yunwu/api dev:worker - Web:
pnpm --filter @yunwu/web dev
- API:
pnpm local:start:manual- 只准备环境并打印手动启动命令
pnpm local:prepare- 只做 infra + migration 预热,不自动启动 API / Worker / Web
pnpm local:stop- 关闭
local:start拉起的窗口,并停止基础设施
- 关闭
- Web:首页
http://127.0.0.1:5173 - 管理页
http://127.0.0.1:5173/admin - API
http://127.0.0.1:3000 - Health
http://127.0.0.1:3000/health - Readiness
http://127.0.0.1:3000/readiness - MinIO Console
http://127.0.0.1:9001
建议优先使用 127.0.0.1,不要混用 localhost 与 127.0.0.1。
- 打开
/register注册普通用户 - 登录后进入首页
/ - 从
/create发起首个文生图或上传图编辑任务 - 提交后进入
/workspace/:conversationId查看任务时间线、状态刷新与结果 - 从工作台继续再编辑、生成变体,或 Fork 到新会话
- 在
/history查看任务链与恢复入口 - 在
/library查看成功作品、继续创作、软删除作品
- 使用管理员账号登录
- 默认进入
/admin - 查看 provider、模型能力、任务状态与可用性信息
| 页面 | 路径 | 当前能力 |
|---|---|---|
| 登录页 | /login |
登录、恢复原目标页、区分普通用户 / 管理员默认落点 |
| 注册页 | /register |
个人用户自注册并直接进入前台 |
| 首页 | / |
最近会话、最近任务、最近作品、失败恢复入口 |
| 创建页 | /create |
文生图、上传图编辑、来源任务预填、提交后进入工作台 |
| 工作台 | /workspace/:conversationId |
会话时间线、上传图、继续创作、再编辑、变体、Fork、SSE / 轮询刷新 |
| 历史页 | /history |
按任务追溯来源链、重试、继续创作、Fork |
| 作品库 | /library |
成功作品查看、继续创作、Fork、软删除 |
| 管理页 | /admin |
模型能力、provider 健康、后台入口,与前台壳层分离 |
当前 round-2 重点能力:
- 文生图:无上传图时正常走
image.generate - 上传图编辑:有上传图时优先按
image.edit提交,不再悄悄退化成文生图 - 来源任务继续创作:支持再编辑、变体、Fork
- 失败恢复:系统类失败走重试,内容类失败走参数回填
- 资产沉淀:成功结果进入作品库,支持从作品继续创作
本地环境启动后执行:
pnpm local:test
pnpm local:test:smoke包含内容:
pnpm local:test:auth- 后端鉴权关键测试
pnpm local:test:routes- 前端登录 / 注册 / 路由壳层 / 权限跳转测试
pnpm local:test:smoke- health、登录、
auth/me、provider 检查、创建会话、创建任务、轮询结果
- health、登录、
推荐按这个顺序走一遍:
pnpm local:start- 浏览器打开
http://127.0.0.1:5173/register - 注册普通用户并确认进入首页
- 退出后直接访问
/history,确认会被带到/login,登录后自动回跳 - 打开
/create提交一条文生图任务 - 再测试一次上传图片后发起编辑任务
- 打开
/workspace/:conversationId,确认时间线与任务状态刷新 - 点一遍
/history与/library - 如需后台验证,再用管理员登录测试
/admin
内建账号默认来自 .env.example:
- Admin
- 邮箱:
admin@yunwu.local - 密码:
admin123456
- 邮箱:
- Demo
- 邮箱:
demo@yunwu.local - 密码:
demo123456
- 邮箱:
普通用户可直接通过 Web 注册。
如果你不使用一键脚本,请按顺序执行:
pnpm docker:infra:up
pnpm --filter @yunwu/api prisma:generate
pnpm --filter @yunwu/api prisma:migrate:deploy然后在 3 个终端分别启动:
pnpm --filter @yunwu/api dev:api
pnpm --filter @yunwu/api dev:worker
pnpm --filter @yunwu/web dev如果你想直接启动完整栈:
pnpm docker:up
pnpm docker:ps
pnpm docker:logs
pnpm docker:down如只想先拉起基础依赖:
pnpm docker:infra:up
pnpm docker:infra:down等价命令:
docker compose --env-file .env -f infra/docker-compose.yml -f infra/docker-compose.app.yml up -d --build
docker compose --env-file .env -f infra/docker-compose.yml -f infra/docker-compose.app.yml ps
docker compose --env-file .env -f infra/docker-compose.yml -f infra/docker-compose.app.yml logs --tail=200
docker compose --env-file .env -f infra/docker-compose.yml -f infra/docker-compose.app.yml downDATABASE_URL指向可用 PostgreSQLREDIS_URL指向可用 RedisTASK_QUEUE_NAME在 API 与 Worker 中保持一致- Worker 已启动,否则任务会停在
queued/submitted YUNWU_API_KEY留空时走 mock;配置后走真实上游
最小必需环境变量:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/yunwu_platform?schema=public
REDIS_URL=redis://localhost:6379
TASK_QUEUE_NAME=yunwu-image-tasks
TASK_WORKER_ENABLED=true
TASK_WORKER_CONCURRENCY=2对象存储模式:
STORAGE_MODE=local- 本地文件存储,适合联调
STORAGE_MODE=minio- 本地模拟真实对象存储,推荐开发默认
STORAGE_MODE=s3- 真实 S3 / 兼容 S3
/health- 轻量存活检查,不访问外部依赖
/readiness- 检查 PostgreSQL、Redis,以及对象存储可用性
Worker 不额外暴露 HTTP 端口,使用容器健康检查执行 apps/api/dist/health/worker-readiness.js。
docker命令失败- 确认 Docker Desktop 已启动
- 任务一直
queued- Worker 未启动、Redis 不通,或
TASK_QUEUE_NAME不一致
- Worker 未启动、Redis 不通,或
- SSE 只有心跳,没有任务更新
- 检查 Worker 是否消费同一个会话链路、Redis / DB 是否一致、代理是否关闭缓冲
- 注册或登录后未保持登录态
- 检查
.env的AUTH_COOKIE_SECURE=false,并确认CORS_ORIGIN包含http://127.0.0.1:5173
- 检查
- Prisma DLL 被占用
- Windows 下先关闭 API / Worker / 相关
node.exe再重试
- Windows 下先关闭 API / Worker / 相关
- Windows 本地启动与测试:docs/qa/windows-local-startup.md
- round-2 PRD v0.2:docs/prd/round-2-personal-user-prd-v0.2.md
- PM 交接:docs/handoff/pm-handoff-round-1-to-round-2.md