Product Specification · v3.0

AI 生图产品
从零到一

一份完整的产品方案 — 技术选型、商业模型、运营策略、落地路线,一周内交付一款能跑通的产品

5 – 7
MVP 上线
¥110
启动成本
8
盈亏平衡
15
模块方案
Scroll
Chapter 01

项目概述

1.1 产品定位

面向国内用户的 AI 生图平台,用户输入 Prompt 调用第三方 API(如 GPT-image2)生成图片,后期可能扩展至视频生成。

1.2 核心功能

AI 生图
用户通过 Prompt 生成 AI 图片,多中转站智能调度
用户体系
注册登录、用户中心、历史记录管理
混合变现
免费额度 + 付费订阅 + 体验包的灵活定价
邀请裂变
邀请分润系统,驱动用户增长(V2)

1.3 开发资源

  • 独立开发者(1 人)
  • 前端技术栈:React(熟练)
  • 后端技术栈:Python(通过 AI 辅助编写)
  • MVP 目标:5–7 天上线

1.4 目标用户

  • 国内用户为主
  • MVP 阶段使用海外服务器(不需要备案),快速上线验证
  • 有用户后迁移国内,正规运营

1.5 开发策略

参考优秀开源项目,从头编写,不从任何项目 Fork。参考 NextChat 的 API 调用封装和错误处理模式,参考 LobeChat 的插件架构思路(后期扩展用)。理由:生图工具和聊天工具产品形态差异大,Fork 改造成本 > 从头写。
Chapter 02

前置准备与服务采购清单

2.1 必买项

服务买什么在哪里买费用说明
域名.com 域名Cloudflare / Namecheap≈¥60/年唯一固定支出
后端服务器海外 VPS 或 RailwayVultr / Railway≈¥0–35/月Railway 免费额度够 MVP
中转站充值API 调用余额你选的中转站平台按需充值建议先充 ¥50–100 测试

2.2 免费项(MVP 阶段够用)

服务用什么在哪里免费额度说明
前端托管Vercel / CF Pagesvercel.com免费前端静态资源托管
数据库Neon PostgreSQLneon.tech0.5GB + 190h/月Serverless PG
图片存储Cloudflare R2dash.cloudflare.com10GB + 无出口流量费这就是你的 OSS
DNS + CDNCloudflarecloudflare.com完全免费域名解析 + 全球 CDN
错误监控Sentrysentry.io5000 事件/月前后端报错通知
访问统计Umami / 百度统计自建/免费无限制用户行为分析
代码托管GitHub 私有仓库github.com无限制版本管理

2.3 后续可能花钱的

服务什么时候花钱预估费用说明
虎皮椒支付有收入后收入的 1.5%按交易额抽成
R2 超额存储图片超过 10GB≈¥3.8/月用户多了以后
邮件服务V2 加邮箱验证Resend 免费 100 封/天超出后按量付费
国内服务器V2 迁移国内≈¥50–100/月阿里云/腾讯云
短信服务V2 加手机登录≈¥0.04/条阿里云/腾讯云

2.4 账号注册清单

开工前需要注册的账号:

  ✓ Cloudflare 账号(DNS + R2 图片存储 + 前端部署)
  ✓ Vercel 账号(前端部署备选)
  ✓ Neon 账号(数据库)
  ✓ Railway 或 Vultr 账号(后端服务器)
  ✓ GitHub 账号(代码托管)
  ✓ Sentry 账号(错误监控)
  ✓ 虎皮椒账号(支付,可以 Day 5 再注册)
  ✓ 域名注册(Cloudflare 或 Namecheap)
  ✓ 中转站平台账号(充值 API 余额)

2.5 MVP 总启动成本

总计:¥110–195 即可启动(首月),之后每月 ¥0–35
域名 ¥60/年 + 后端服务器 ¥0–35/月 + 中转站测试充值 ¥50–100(一次性),其他全免费。
Chapter 03

技术架构

前端 React SPA + 后端 Python FastAPI,前后端分离部署

3.1 为什么选择前后端分离 + Python 后端

核心背景:开发者只会 React,后端代码由 AI 辅助编写。

为什么不用 Next.js?

问题说明
SSR 价值低产品是登录后的工具型应用,搜索引擎抓不到登录后的页面
API Routes 超时Vercel 免费版函数超时 10 秒,生图需要 10–30 秒
不适合长任务不支持 WebSocket,不适合独立扩展后端性能
前后端耦合一个项目里混在一起,改 UI 可能影响 API

为什么 Python + FastAPI 最合适?

# 一个完整的 API 接口,就这么几行,一目了然
@app.post("/generate")
async def generate_image(req: GenerateRequest):
    image_url = await call_provider(req.prompt)
    return {"url": image_url}
维度Python + FastAPINode.js + ExpressJava + Spring Boot
代码可读性极高 — 最接近伪代码较高一般 — 过于冗长
项目文件数很少较少很多
AI 生成质量非常好一般 — 容易过度设计
你能看懂多少最多较多较少
出 Bug 时定位容易一般困难
后期 AI 扩展天然优势一般一般
DEVELOPER FRIENDLINESS — INDEX 0–100 Python + FastAPI 92 可读性极高 · AI 生成质量最佳 · 出 Bug 易定位 Node.js + Express 74 可读性较高 · 文件数较少 · 异步模型偏复杂 Java + Spring Boot 48 代码冗长 · 容易过度设计 · 单人维护成本高

3.2 技术选型总览

模块最终方案说明
前端React + Vite + TypeScript + Tailwind CSS纯 SPA,开发快
后端Python + FastAPI代码可读性最高,AI 生成质量最好
ORMSQLAlchemy / Tortoise ORM自动生成 SQL
数据库Neon PostgreSQL(Serverless)免费额度够用
图片存储Cloudflare R2(boto3,兼容 S3)免费 10GB
认证JWT(FastAPI 原生支持)免费无限制
支付虎皮椒(微信 + 支付宝)个人可用,费率 1.5%
前端部署Vercel / Cloudflare Pages免费
后端部署Railway / VPS(Vultr)$0–5/月

3.3 前端技术细节

  • Vite 替代 Webpack,开发服务器启动速度秒级
  • TypeScript 提供类型安全
  • Tailwind CSS 替代手写 CSS
  • 状态管理:Zustand 或 React Context
  • 路由:React Router · HTTP 请求:Axios

3.4 后端核心依赖

fastapi          → Web 框架
uvicorn          → ASGI 服务器
sqlalchemy       → ORM
alembic          → 数据库迁移
pydantic         → 数据校验
python-jose      → JWT 认证
bcrypt           → 密码加密
boto3            → R2/S3 存储操作
httpx            → HTTP 客户端
python-dotenv    → 环境变量管理

3.5 核心数据表结构

users            → 用户信息(id, email, nickname, avatar, created_at)
subscriptions    → 订阅记录(user_id, plan_type, start_at, end_at, remaining_quota)
orders           → 支付订单(user_id, plan_type, amount, status, paid_at)
transactions     → 交易记录(user_id, amount, type, created_at)
images           → 生成图片(user_id, prompt, image_url, provider_name, status, created_at)
api_providers    → 中转站配置(name, base_url, api_key, cost_per_image, is_enabled...)
quota_records    → 额度变更明细(user_id, change_amount, reason, created_at)
invite_records   → 邀请关系(inviter_id, invitee_id, created_at)[V2]
commissions      → 分润记录(inviter_id, from_user_id, amount, created_at)[V2]
Chapter 04

图片数据流转与 OSS

4.1 模型返回的图片格式

方式 1:返回 Base64

{ "data": [{ "b64_json": "/9j/4AAQSkZJRgABAQ..." }] }

方式 2:返回 URL(临时链接,1–24 小时后失效)

{ "data": [{ "url": "https://xxx.com/image/xxx.png" }] }

4.2 为什么必须用 OSS

不管中转站返回 Base64 还是临时 URL,你都需要把图片存到自己的 OSS 里。

× 不能只靠中转站的临时 URL — URL 会过期,历史记录变 404
× 不能把 Base64 存数据库 — 数据库膨胀到不可用
✓ 必须用 OSS — 图片存 OSS,数据库只存 URL

4.3 完整图片数据流转

用户输入 Prompt → 点击"生成" │ ▼ ┌─────────────────────────────────────────────┐ │ 前端(React SPA) │ │ POST /api/generate { prompt: "..." } │ └──────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ 后端(FastAPI on Railway/VPS) │ │ 1. 验证 JWT Token 2. 检查用户额度 │ │ 3. 选择中转站(按价格排序,自动 fallback) │ │ 4. 调用中转站 API → 拿到 Base64 或临时 URL │ │ 5. 上传图片到 R2 6. 存入数据库 │ │ 7. 扣减用户额度 8. 返回图片 URL 给前端 │ └─────────────────────────────────────────────┘

4.4 整体架构图

┌─────────────┐ HTTP API ┌─────────────┐ │ React SPA │ ◄───────────────► │ FastAPI │ │ (Vercel) │ JSON 通信 │ (VPS) │ └─────────────┘ └──────┬──────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌──────────┐ ┌─────────────┐ │ Neon PG │ │ 中转站 API│ │ Cloudflare │ │ (数据库) │ │ (生图) │ │ R2 (OSS) │ └─────────────┘ └──────────┘ └─────────────┘

4.5 R2 存储代码示例

import boto3
s3 = boto3.client("s3",
    endpoint_url="https://xxx.r2.cloudflarestorage.com",
    aws_access_key_id="your-key",
    aws_secret_access_key="your-secret")
s3.put_object(Bucket="images", Key=f"{user_id}/{uuid}.png", Body=image_bytes)
Chapter 05

多中转站智能调度

价格优先 + 自动 Fallback + 熔断机制,成本最优且高可用

5.1 调度流程

用户点击"生成" │ ▼ ┌──────────────────────────────────────────────┐ │ 路由调度层(Python 后端) │ │ 1. 查出所有「可用」的中转站配置 │ │ 2. 过滤:禁用 / 冷却中 / 今日额度用完的 │ │ 3. 按价格从低到高排序 │ │ 4. 调用最便宜的那个 │ │ 5. 失败 → 自动切换到下一个 │ │ 6. 全部失败 → 返回错误给前端 │ └──────────────────────────────────────────────┘

5.2 中转站配置表

字段说明
id主键
name名称
base_urlAPI 地址
api_keyAPI Key(加密存储)
model模型名称(如 gpt-image-1)
cost_per_image单张成本
is_enabled是否启用
daily_limit每日调用上限
error_count连续失败次数

5.3 排序规则

优先级 1:is_enabled = true
优先级 2:error_count < 阈值
优先级 3:current_daily < daily_limit
优先级 4:cost_per_image 从低到高
优先级 5:同价格时按 priority 字段排序

5.4 自动熔断机制

连续失败 3 次 → 自动标记为「冷却中」,30 分钟内不再调用
30 分钟后 → 试探请求 → 成功恢复正常,失败继续冷却

5.5 注意事项

  • API Key 绝对不要写在前端代码里
  • 失败重试只扣 1 次额度
  • 记录每次 API 调用日志
  • 不同中转站图片质量可能不同,需手动测试
  • 计费按实际中转站成本记录
Chapter 06

定价方案

6.1 完整定价表

免费
¥0
3 张/天 · 每天重置 · 引流获客
体验包
¥1.99
3 张 · 永不过期 · 破冰首单
专业
¥29.9/月
200 张/月 · 性价比之选
VIP 专属
¥4.9
30 张 · 永不过期 · 仅月卡用户可买

6.2 毛利计算(API 成本 ¥0.08/张)

档位API 成本毛利毛利率
免费用户¥7.2/月-¥7.2获客成本
体验包¥0.24¥1.7588%
基础月卡¥4¥5.960%
专业月卡¥16¥13.946%
加量包¥2.4¥2.551%
GROSS MARGIN BY TIER 体验包 ¥1.99 88% 基础月卡 ¥9.9 60% 加量包 ¥4.9 51% 专业月卡 ¥29.9 46% ¥0.08 / 张 API 成本测算 · 含支付通道 1.5% 费率

6.3 单价阶梯

体验包¥0.663
最贵
基础月卡¥0.198
加量包¥0.163
专业月卡¥0.150
最便宜

6.4 用户转化路径

免费用户(每天 3 张) "这平台真不错,每天白送 2 块钱的额度" │ 某天灵感来了,3 张不够 ▼ 体验包(¥1.99 / 3 张) "才 2 块钱不到,买了" │ 连续买了 3 次 = ¥5.97 ▼ 基础月卡(¥9.9 / 50 张)← 主力转化 │ ├──→ 加量包(¥4.9 / 30 张)← VIP 专属 ▼ 专业月卡(¥29.9 / 200 张)← 高价值用户

6.5 定价设计要点

  • 体验包 ¥1.99 而非 ¥0.99:锚定免费额度的感知价值
  • 加量包限 VIP:保护月卡营收
  • 月卡月底清零:行业惯例
  • 体验包/加量包永不过期:避免投诉
Chapter 07

额度与计费系统

7.1 额度规则

额度类型有效期累积规则
免费额度每天重置不累积,当天没用完作废
体验包额度永久有效用多少扣多少
月卡额度每月 1 号重置不累积
加量包额度永久有效用多少扣多少

7.2 扣费优先级

体验包/加量包(永久)→ 月卡 → 免费额度
原因:先消耗永久的,再消耗会过期的

7.3 注意事项

  • 并发扣费:前端 disable 按钮;后端事务 + 行锁
  • 生图失败退回额度:先调 API 成功再扣
  • 额度变更记录要完整
  • 免费额度不建议加水印:分享即免费宣传
The Path

从 ¥110 启动,
到月营收 过万

¥110
启动成本
8
盈亏平衡
¥2,260
2000 用户毛利
¥7,175
5000 用户毛利
Chapter 08

邀请分润系统 V2 阶段

8.1 核心规则

项目决定
触发条件被邀请人消费后才算
分润比例10%(持续分润)
绑定周期永久绑定
单人月总上限¥200
余额用途仅充值套餐,不可提现
上线时间V2 阶段(MVP 不做)

8.2 为什么 10%

  • 给自己留涨价空间
  • 毛利率保护(专业月卡毛利只有 46%)
  • 行业标准:拼多多 5–10%、美团 8–12%

8.3 为什么设上限

风险不设上限有上限
大 V 邀请 200 人月分润 ¥500–1000¥200 封顶
羊毛党刷 100 号月分润 ¥150+¥200 封顶

8.4 为什么不能提现(V2)

能提现
需企业资质 · 需处理税务 · 需防刷 · 需审核对账
不能提现
不涉及资金流出 · 不需企业资质 · 刷了也没用 · 实际成本仅 ¥0.08/张

8.5 防刷机制

  • 被邀请人必须完成首充
  • 同 IP/同设备不计入
  • 自邀自检
  • 分润 24h 延迟结算
Chapter 09

用户认证与安全

9.1 JWT 认证流程

用户输入邮箱+密码 → POST /api/auth/login
  → 后端验证密码 → 生成 JWT Token → 返回给前端
  → 前端存 localStorage → 每次请求 Header 带上
  → 后端验证 Token 有效性
  • 密码必须用 bcrypt 加密
  • JWT Token 7 天过期
  • MVP 只需邮箱 + 密码

9.2 防刷策略

防刷类型措施
注册防刷邮箱验证码(V2);同 IP 每天最多 3 个
生图防刷额度硬限制;10 秒冷却;同 IP 每小时最多 20 张
接口防刷Rate Limiting;超出返回 429
支付防刷同时 1 个未支付订单;30 分钟过期
邀请防刷自邀自检;同 IP 不计入;24h 延迟结算
Chapter 10

支付系统

10.1 支付渠道对比

方案个人可用费率优缺点
虎皮椒 推荐1.5%支持微信+支付宝
爱发卡2–3%适合虚拟商品卡密
YunGouOS0.6%费率低;需实名
微信/支付宝官方否(需企业)0.6%最正规

10.2 支付流程

用户点击"购买" → 前端 POST /api/payment/create
  → 后端创建订单 → 调用虎皮椒 API 生成支付链接
  → 前端跳转支付(微信/支付宝扫码)
  → 支付成功 → 回调验证签名 → 核对金额 → 更新订单 → 增加额度

10.3 注意事项

  • 回调验证必须做
  • 幂等处理:同一订单只能处理一次
  • 订单 30 分钟过期
  • 每天对账
Chapter 11

部署与运维

11.1 部署架构

组件方案成本
前端Vercel / Cloudflare Pages免费
后端Railway / Vultr VPS¥0–35/月
数据库Neon PostgreSQL免费
图片存储Cloudflare R2免费
DNS + CDNCloudflare免费
域名.com≈¥60/年
MVP 月总成本:¥5–40/月

11.2 域名与备案

MVP 阶段:注册 .com 域名,不需要备案。

V2 阶段:购买国内服务器 → ICP 备案(1–2 周)→ 公安备案。

11.3 监控与备份

监控类型工具用途
错误监控Sentry报错自动通知
访问统计Umami / 百度统计用户量、来源
业务指标自建 Dashboard注册数、付费数、收入
  • 数据库:Neon 自动备份 + 每周手动 pg_dump
  • 代码:GitHub 私有仓库
  • 每月一次恢复演练
Chapter 12

合规与法律

12.1 AIGC 内容审核

  • 维护敏感词库
  • Prompt 先过敏感词过滤
  • 命中敏感词直接拒绝

12.2 必要法律文件

隐私政策
收集什么数据、怎么用、怎么保护
用户协议
明确权利义务,版权归属
免责声明
AI 生成内容不代表平台立场

12.3 经营资质与税务

  • MVP 用海外服务器,暂不需 ICP 备案
  • 月收入超 ¥5000 建议申报个税
  • 月收入稳定过万建议注册个体工商户
Chapter 13

获客与运营

13.1 获客渠道

小红书
发 AI 生图作品 + 教程 — 最重要
抖音 / B 站
发 AI 生图过程视频
即刻 / Twitter
AI 爱好者社区,精准用户多
V2EX / 掘金
分享开发过程
MVP 阶段不要花钱推广,先用免费渠道验证产品。

13.2 客服方案

  • 微信群或邮箱客服
  • FAQ 页面覆盖常见问题
  • 承诺 48h 内回复
  • 已消费额度不退,未消费 7 天可退
Chapter 14

阶段规划

14.1 MVP(Day 1–7)

7-DAY ROUTE — MVP TO LAUNCH DAY 01搭建脚手架 · DB · R2 DAY 02后端JWT · 路由 · 过滤 DAY 03前端Landing · 登录 · 生图 DAY 04联调R2 · 历史 · 端到端 DAY 05支付额度 · 虎皮椒 DAY 06管理用户中心 · 后台 LAUNCH上线打磨 · 法律 · 部署
Day 1 · 项目搭建
初始化前后端项目 · 配置 Neon + R2 · 本地跑通
Day 2 · 后端核心 API
注册/登录(JWT)· 多中转站调度 · 敏感词过滤
Day 3 · 前端核心页面
Landing Page · 登录/注册 · 生图主页
Day 4 · 联调
前后端联调 · R2 上传 · 历史记录
Day 5 · 支付
额度逻辑 · 虎皮椒支付 · 套餐购买
Day 6 · 管理
用户中心 · 管理后台 · 定价页
Day 7 · 上线
UI 打磨 · 法律文件 · 测试 · 部署上线

14.2 V2(100+ 用户)

  • 邀请分润系统
  • 手机号登录 · 邮箱验证
  • 内容审核 · Redis
  • 迁移国内 + ICP

14.3 V3(月营收过万)

  • 邀请提现 · 企业付款
  • 完善风控
  • 视频生成 · 微信登录
Chapter 15

成本与收入预估

15.1 固定成本(MVP)

项目月成本
域名≈¥5/月
前端托管¥0
后端服务器¥0–35/月
数据库 + 图片存储¥0
总固定成本¥5–40/月

15.2 收入预估

场景用户量付费用户月收入API + 服务器毛利
初期10010¥99¥80¥19
成长50075¥742¥340¥402
稳定2000400¥3,960¥1,700¥2,260
增长50001250¥12,375¥5,200¥7,175

15.3 盈亏平衡分析

盈亏平衡:¥45 ÷ ¥5.9 ≈ 8 个付费用户
月固定成本 ≈ ¥45 · 基础月卡毛利 ¥5.9 · 第 9 个用户开始净利润。
Appendix A

关键决策记录

决策点决定理由
开发策略从头写Fork 改造成本 > 从头写
前端React + Vite + TS + Tailwind最熟悉,效率最高
后端Python + FastAPI可读性最高,AI 生成质量最好
免费额度3 张/天获客效果好
体验包¥1.99/3 张锚定免费额度价值
邀请分润10%行业标准,留涨价空间
多中转站价格优先 + fallback成本最优 + 高可用
先海外后国内快速上线,验证后再合规
R2 作为 OSS免费 10GB,无出口流量费
后端部署Railway / VPS不受 Serverless 超时限制
Appendix B

项目代码结构

ai-image-app/
├── frontend/
│   ├── src/
│   │   ├── pages/       Landing | Login | Create | History | Pricing | Dashboard | Admin
│   │   ├── components/  PromptInput | ImageCard | Gallery | PricingCard | Status | Navbar
│   │   ├── api/         client (Axios+JWT) | auth | generate | images | payment | quota
│   │   ├── store/       userStore (Zustand)
│   │   └── utils/       poller
│   ├── package.json | vite.config.ts | tailwind.config.js
│
├── backend/
│   ├── app/
│   │   ├── main.py (FastAPI + CORS) | config | database | models | schemas
│   │   ├── routers/     auth | generate | images | quota | payment | admin
│   │   ├── services/    provider_router | quota_service | r2_storage | sensitive_words
│   │   ├── adapters/    base | openai_compatible
│   │   └── middleware/  rate_limit
│   ├── data/            sensitive_words.txt
│   ├── requirements.txt | .env | Dockerfile
│
├── docker-compose.yml | .gitignore | README.md