跳转到主要内容

你将构建什么

本教程将带你从零构建一个 FastAPI 后端应用,实现袋袋 OAuth 登录、SQLAlchemy Token 持久化、按次计费事件上报、以及流式 AI 模型调用的完整流程。

前置条件

袋袋开发者账号

已注册袋袋账号并在开发者后台创建 App,获取 Client ID 和 Client Secret

开发环境

Python 3.10+、pip、基础 FastAPI 和 async/await 经验

Step 1: 项目初始化

创建 .env 文件存放凭证:
.env
永远不要将 .env 提交到版本控制。确保 .gitignore 包含该文件。

Step 2: 数据库配置

使用 SQLAlchemy async engine + SQLite(生产环境替换为 PostgreSQL):
models.py
使用 SDK contrib 模块生成 Token 表:
models.py
create_token_model 会自动创建一张包含 user_idaccess_tokenrefresh_tokenexpires_atscope 的表。无需手动定义 schema。

Step 3: 初始化 SDK

config.py
on_token_refresh 会在 SDK 自动刷新 Token 时回调,确保新 Token 立即落库,避免旧 Token 轮换后失效。

Step 4: OAuth 登录流程

main.py

Step 5: 保护路由

通过 FastAPI 依赖注入自动加载并校验 Token:
dependencies.py
在路由中注入:
main.py

Step 6: 上报计费事件

main.py
idempotency_key 保证同一请求重试不会重复扣费。建议在客户端生成后传入,或使用业务唯一标识。

Step 7: 调用 AI 模型

使用 httpx 直接调用袋袋的 OpenAI 兼容端点,实现 SSE 流式响应:
main.py
流式调用走 METERED 计费(按 token 用量),费用在流结束后自动结算。不需要手动调用 report_event

Step 8: 错误处理中间件

SDK 抛出的异常均为类型化子类,可通过 FastAPI exception handler 统一拦截:
main.py

完整项目

三个核心文件的完整代码:
models.py
config.py
dependencies.py
main.py
项目结构:
requirements.txt 内容:
requirements.txt
启动开发服务器:

部署建议

多 Worker 部署

生产环境使用 uvicorn main:app --workers 4 或搭配 Gunicorn:gunicorn main:app -k uvicorn.workers.UvicornWorker -w 4。多 Worker 下 SQLite 不适用,需切换为 PostgreSQL。

环境变量管理

生产环境通过 Kubernetes Secret 或云平台环境变量注入凭证,不要使用 .env 文件。Cookie 需设置 secure=True

数据库迁移

生产环境将 create_async_engine 的连接串替换为 postgresql+asyncpg://...,并使用 Alembic 管理 schema 迁移,不要在生产环境使用 create_all

反向代理

在 Nginx / Caddy 后面运行,处理 HTTPS 终止和静态资源。确保 X-Forwarded-Proto 正确传递以生成准确的回调 URL。

下一步

Next.js 全栈集成

使用 TypeScript SDK 构建 Next.js 全栈应用

按次计费 SaaS

PER_USE 模式:固定价格按次扣费

Token 管理最佳实践

并发刷新、安全存储、降级策略

SDK 完整指南

双语言 API 详解与 Token 持久化