技术栈方案(已选定:方案 C 全 Python)
已选定方案 C:Python FastAPI 全栈,AI 网关与业务后端统一使用 Python,前端使用 Next.js 14。
架构总览
┌─────────────────────────────────────────────────────────────────┐
│ 用户控制台 │
│ Next.js 14 + TypeScript + shadcn/ui + TailwindCSS │
│ Vercel AI SDK(流式对话)+ ECharts(用量仪表盘) │
│ NextAuth.js(OAuth)+ TanStack Query + Zustand │
├─────────────────────────────────────────────────────────────────┤
│ 平台管理端 │
│ Next.js 14 + TypeScript + Ant Design Pro │
├──────────────────────┬──────────────────────────────────────────┤
│ Python 业务后端 │ Python AI 网关 │
│ FastAPI + Celery │ FastAPI + httpx │
│ SQLAlchemy + PG │ openai/anthropic/dashscope SDK │
│ 支付宝/微信 SDK │ Redis 优先级队列 + 滑动限流 │
│ JWT + RBAC │ tenacity 熔断降级 │
├──────────────────────┴──────────────────────────────────────────┤
│ 存储层 │
│ PostgreSQL 16(主业务) Redis 7(缓存/队列/限流) │
│ ClickHouse 24(Token 用量分析) OSS(文件存储) │
├─────────────────────────────────────────────────────────────────┤
│ 消息与任务 │
│ Kafka(服务间事件) Celery(异步任务 + 定时任务) │
├─────────────────────────────────────────────────────────────────┤
│ 基础设施 │
│ NGINX Docker Kubernetes + Helm │
│ Prometheus + Grafana Loki Jaeger Alertmanager │
└─────────────────────────────────────────────────────────────────┘
一、用户控制台前端
1.1 框架与工程化
| 技术 |
版本 |
用途 |
| Next.js |
14(App Router) |
框架,SSR/SSG,内置路由,SEO 友好 |
| TypeScript |
5.x |
全量类型安全 |
| TailwindCSS |
3.x |
原子化 CSS,快速构建 UI |
| shadcn/ui |
latest |
基于 Radix UI + TailwindCSS,高度可定制组件库 |
| Ant Design |
5.x |
补充复杂业务组件(Table、Form、Upload) |
| Turbopack |
内置 |
Next.js 默认打包器,极速热更新 |
| pnpm |
8.x |
包管理器 |
1.2 状态管理
| 技术 |
用途 |
| Zustand |
全局客户端状态(用户信息、会员等级、未读消息数、主题) |
| TanStack Query v5 |
服务端状态(接口缓存、自动重试、乐观更新、后台刷新) |
| Jotai |
局部原子状态(对话页消息列表、设置面板) |
1.3 AI 对话与流式输出
| 技术 |
用途 |
| Vercel AI SDK |
封装 SSE 流式对话,useChat hook 对接 /chat/completions |
EventSource API |
消息中心实时推送 GET /messages/stream |
react-markdown |
渲染 AI 返回 Markdown 内容 |
rehype-highlight |
代码块语法高亮(自动识别 50+ 语言) |
remark-gfm |
GitHub Flavored Markdown(表格、任务列表) |
| KaTeX |
数学公式渲染($...$ 行内 / $$...$$ 块级) |
1.4 数据可视化
| 技术 |
用途 |
ECharts 5 + echarts-for-react |
Token 用量趋势折线、Top 10 柱状图、热力图 |
| Recharts |
简单图表(会员套餐用量进度弧形图) |
1.5 表单与校验
| 技术 |
用途 |
| React Hook Form |
高性能表单(注册/登录/企业认证/充值) |
| Zod |
Schema 校验,前后端共享类型定义 |
1.6 认证与安全
| 技术 |
用途 |
| NextAuth.js v5 |
OAuth 登录(微信/GitHub/Google),JWT session |
jose |
客户端 JWT 解析(读取用户角色、会员等级) |
| CSRF 保护 |
Next.js middleware + next-csrf |
1.7 支付集成(前端)
| 技术 |
用途 |
| 支付宝 JSSDK |
H5 跳转支付 |
| 微信 JS-SDK |
微信内网页支付 |
| 自定义 QR 组件 |
展示二维码 + 轮询支付状态(useInterval) |
1.8 UI 交互与动效
| 技术 |
用途 |
| Framer Motion |
页面切换、卡片入场、流式字符打字动画 |
sonner |
Toast 通知(轻量优雅) |
cmdk |
全局命令面板(⌘K,快速切换模型/跳转页面) |
| Lucide React |
图标库(统一风格) |
1.9 国际化与其他
| 技术 |
用途 |
next-intl |
i18n 中英文切换,URL 路由级别 |
| Vitest |
单元测试(工具函数、Zod schema) |
| React Testing Library |
组件交互测试 |
| Playwright |
E2E 测试(登录/充值/对话完整流程) |
1.10 关键页面设计说明
主页(Landing Page / 首页):
- 未登录态:品牌介绍 + 核心功能亮点卡片 + 定价套餐对比 + 注册/登录 CTA 按钮,SSG 静态生成,SEO 友好
- 已登录态:自动跳转控制台 Dashboard,展示今日用量摘要、余额状态、最近对话入口、系统公告横幅
- 导航栏:Logo + 功能导航 + 登录/注册按钮(未登录)/ 用户头像菜单 + 消息 Badge(已登录)
- 响应式布局,移动端优先,TailwindCSS 断点适配
- Framer Motion 入场动画(Hero 区域文字淡入 + 功能卡片依次滑入)
模型列表页:
- 顶部筛选栏:按提供商(OpenAI / 阿里云 / Anthropic…)、模型类型(对话 / 嵌入 / 图像)、是否支持流式、上下文长度区间多维筛选
- 卡片网格布局:每张模型卡片展示模型名、提供商 Logo、上下文窗口大小、input/output 定价、支持的能力标签(
Function Calling / Vision / Code 等) - 价格对比入口:点击任意模型卡片右上角「比价」图标,弹出与第三方的价格对比 Sheet(调用
GET /tokens/price-comparison/{model_id}) - 快速发起对话:每个模型卡片有「立即对话」按钮,点击携带
model_id 跳转到对话页并预选该模型 - 当前会员等级价格高亮:根据用户会员等级(free / basic / premium)在卡片上显示对应档位的实际价格
- TanStack Query 缓存模型列表(5 分钟 stale time),搜索框使用防抖(300ms)
AI 对话页:
- 左侧历史列表 + 右侧对话区,
useChat 流式逐字输出 - 消息气泡支持 Markdown + 代码高亮 + KaTeX 公式
- 右下角实时显示本次 Token 消耗与费用
- 流式输出时光标闪烁动画(Framer Motion)
Token 仪表盘:
- 顶部今日/本月用量卡片(数字跳动动效)
- 中间趋势折线图(ECharts,支持时间范围切换)
- 底部 Top 10 模型横向柱状图 + API Key 用量 Table
- TanStack Query 自动后台刷新
充值页:
- 金额快选按钮(50/100/200/500)+ 自定义输入
- 扫码/H5 跳转支付,
useInterval 轮询支付状态 - 支付成功后 Framer Motion 庆祝动效 + 余额实时刷新
二、平台管理端前端
| 技术 |
版本 |
用途 |
| Next.js |
14(App Router) |
框架 |
| TypeScript |
5.x |
|
| Ant Design Pro |
6.x |
ProTable / ProForm / ProDescriptions |
| TailwindCSS |
3.x |
补充自定义样式 |
| ECharts |
5.x |
运营数据图表 |
| Zustand |
|
全局状态 |
| TanStack Query |
v5 |
接口状态管理 |
三、AI 网关服务(Python)
职责: 模型调用、SSE 流式输出、多提供商路由、优先级队列、限流、降级熔断。
| 技术 |
版本 |
用途 |
| Python |
3.12 |
|
| FastAPI |
0.111+ |
异步 HTTP,原生 StreamingResponse(SSE) |
| uvicorn |
0.30+ |
ASGI 服务器(生产:gunicorn + uvicorn workers) |
| Pydantic v2 |
|
请求/响应校验,性能比 v1 提升 5-50x |
| httpx |
|
异步 HTTP 客户端,调用上游 LLM API |
| openai SDK |
latest |
OpenAI / Azure OpenAI |
| anthropic SDK |
latest |
Claude 系列 |
| dashscope SDK |
latest |
阿里云百炼(通义千问) |
| qianfan SDK |
latest |
百度文心一言 |
| zhipuai SDK |
latest |
智谱 GLM |
| redis-py (async) |
|
限流(滑动窗口)、优先级队列(Sorted Set) |
| SQLAlchemy 2.0 |
|
异步 ORM,写入 Token 用量 |
| tenacity |
|
自动重试 + 指数退避,触发降级 |
| prometheus-fastapi-instrumentator |
|
Prometheus 指标自动采集 |
优先级队列实现(Redis Sorted Set):
priority_offset = {"P0": 4000, "P1": 3000, "P2": 2000, "P3": 1000}
score = time.time() * 1000 - priority_offset[priority]
await redis.zadd(f"model:{model_id}:queue", {request_id: score})
request_id = await redis.zpopmin(f"model:{model_id}:queue")
四、业务后端服务(Python)
职责: 用户、认证、支付、钱包、账务、会员、营销等业务逻辑。
| 技术 |
版本 |
用途 |
| Python |
3.12 |
|
| FastAPI |
0.111+ |
HTTP 框架,依赖注入、中间件、路由分组 |
| uvicorn |
0.30+ |
ASGI 服务器 |
| Pydantic v2 |
|
全链路数据校验 |
| SQLAlchemy 2.0 |
|
异步 ORM(async_sessionmaker) |
| Alembic |
|
数据库版本迁移 |
| python-jose |
|
JWT 签发与验证(HS256 / RS256) |
| passlib + bcrypt |
|
密码哈希 |
| redis-py (async) |
|
JWT 黑名单、API Key 缓存 |
| Celery |
5.x |
异步任务(发邮件/短信/发券/生成 PDF) |
| celery-beat |
|
定时任务(月度账单/会员到期检查/对账) |
| alipay-sdk-python |
|
支付宝支付 + 回调验签 |
| wechatpayv3 |
|
微信支付 v3 API |
| python-multipart |
|
文件上传(营业执照/头像) |
| oss2 / boto3 |
|
阿里云 OSS / MinIO |
| structlog |
|
结构化 JSON 日志 |
| opentelemetry-sdk |
|
链路追踪(与 AI 网关统一 trace_id) |
| pytest + httpx |
|
单元测试 + 接口测试 |
项目结构(Monorepo 双服务):
backend/
├── ai_gateway/
│ ├── main.py
│ ├── routers/
│ └── services/
│
├── business/
│ ├── main.py
│ ├── routers/
│ ├── services/
│ ├── models/
│ └── tasks/
│
├── shared/
│ ├── db.py
│ ├── redis_client.py
│ ├── schemas/
│ └── middleware/
│
├── alembic/
├── tests/
└── requirements.txt
五、数据存储层
| 存储 |
版本 |
用途 |
关键数据 |
| PostgreSQL |
16 |
主业务数据库 |
users, orders, transactions, memberships, campaigns, vouchers, notifications |
| Redis |
7 |
缓存 + 队列 + 限流 |
JWT 黑名单、API Key 缓存、限流计数器、模型请求优先级队列(Sorted Set) |
| ClickHouse |
24.x |
Token 用量分析(写多读少) |
token_usage 表,按月分区,支持 Top 10 / 热力图 / 趋势查询 |
| 阿里云 OSS / MinIO |
— |
对象存储 |
营业执照图片、账单 PDF、用户头像 |
ClickHouse token_usage 表结构:
CREATE TABLE token_usage (
request_id String,
user_id String,
api_key_id String,
model_id String,
provider_id String,
input_tokens UInt32,
output_tokens UInt32,
total_tokens UInt32,
input_cost Decimal(18,8),
output_cost Decimal(18,8),
latency_ms UInt32,
created_at DateTime
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(created_at)
ORDER BY (user_id, model_id, created_at);
六、消息队列(Kafka)
| Topic |
生产方 |
消费方 |
说明 |
model.request.completed |
AI 网关 |
计费服务 |
触发 Token 扣费 |
billing.charged |
计费服务 |
通知服务 |
触发用量告警检查 |
payment.success |
支付回调 |
钱包服务 |
充值到账 |
user.registered |
业务后端 |
营销服务 |
触发新用户代金券自动发放 |
notification.send |
各业务模块 |
通知服务 |
统一通知发送入口 |
membership.expiring |
Celery Beat |
通知服务 |
会员即将到期提醒 |
七、基础设施与部署
| 组件 |
技术 |
说明 |
| 容器化 |
Docker + docker-compose(开发) |
docker-compose up 一键启动全部服务 |
| 编排 |
Kubernetes + Helm(生产) |
各服务独立 Deployment,按需 HPA 扩缩容 |
| 反向代理 |
NGINX |
SSL 终止、静态资源、路由分发 |
| CI/CD |
GitHub Actions |
lint → pytest → 构建镜像 → 滚动更新 K8s |
| 监控 |
Prometheus + Grafana |
QPS、错误率、P99 延迟、Celery 队列积压 |
| 日志 |
Loki + Grafana |
structlog JSON 日志,trace_id 全链路追踪 |
| 链路追踪 |
Jaeger(OpenTelemetry) |
浏览器 → 业务后端 → AI 网关 → LLM API |
| 告警 |
Alertmanager + 钉钉 Webhook |
错误率 >5%、队列积压 >1000 自动告警 |
| 密钥管理 |
阿里云 KMS |
AK/SK 加密存储,避免明文 |
docker-compose 服务清单(开发环境):
services:
business:
ai_gateway:
celery_worker:
celery_beat:
postgres:
redis:
clickhouse:
kafka:
zookeeper:
nginx:
八、服务拓扑图
用户浏览器 / 第三方 API 调用
└── NGINX(SSL终止 + 静态资源)
├── /api/v1/chat/* → Python AI 网关(FastAPI,模型调用/SSE流式)
├── /api/v1/* → Python 业务后端(FastAPI,用户/支付/钱包/会员/营销)
└── /admin/v1/* → Python 业务后端(管理员接口,RBAC 鉴权)
Python 业务后端
├── PostgreSQL(用户/订单/钱包/会员/营销主业务数据)
├── Redis(JWT黑名单、API Key 缓存)
├── Celery Worker(发邮件/短信、发券、生成PDF)
├── Celery Beat(月度账单、会员到期检查、对账)
└── Kafka(生产:user.registered / payment.success / notification.send)
Python AI 网关
├── Redis(优先级队列 Sorted Set、滑动窗口限流计数)
├── ClickHouse(Token 用量明细批量写入)
├── OpenAI / Anthropic / 阿里云百炼 / 百度 / 智谱...
└── Kafka(生产:model.request.completed)