使用fast-api 自建一个ai后端
readme文档
# Python AI Backend
企业级 FastAPI 后端项目模板,采用三层架构(Controller → Service → Repository),支持 MySQL/SQL Server 数据库连接,便于维护和扩展。
---
## 功能概览
- **RESTful API 服务**(FastAPI)
- **数据库访问**(SQLAlchemy ORM)
- **三层架构**:Controller / Service / Repository
- **数据库迁移支持**(Alembic)
- **轻量可维护、企业规范**
- **无需鉴权**(可后期扩展 JWT 或 OAuth2)
---
## 系统需求
- Python 3.11+
- MySQL 或 SQL Server 数据库
- pip
- 可选:虚拟环境管理(venv / pyenv / conda)
---
## 安装依赖
bash
# 1. 克隆项目
git clone <project-repo-url>
cd python-ai-backend
# 2. 创建虚拟环境
python -m venv .venv
# 3. 激活虚拟环境
# macOS / Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
# 4. 安装依赖
pip install -r requirements.txt
---
## 配置环境变量
在项目根目录创建 `.env` 文件,例如:
DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=ui_use
DB_USER=xxx
DB_PASSWORD=xxx
OPENAI_API_KEY=your_openai_api_key
---
## 目录结构说明
```text
python-ai/
├── app/
│ ├── main.py # 应用入口
│ │
│ ├── core/ # 基础设施
│ │ ├── config.py # 配置管理
│ │ ├── database.py # 数据库连接
│ │ └── logging.py # 日志管理
│ │
│ ├── api/ # Controller 层
│ │ └── v1/
│ │ └── health.py # 示例接口
│ │
│ ├── service/ # 业务层
│ │ └── ui_use_service.py
│ │
│ ├── repository/ # 数据访问层
│ │ └── ui_use_repo.py
│ │
│ ├── model/ # ORM 模型
│ │ └── ui_use.py
│ │
│ └── schema/ # 请求/响应模型
│ └── ui_use_schema.py
│
├── alembic/ # 数据库迁移
├── alembic.ini
├── requirements.txt
└── .env
---
## 启动开发环境
# 进入虚拟环境
source .venv/bin/activate
# 启动 FastAPI 服务(热重载)
uvicorn app.main:app --reload
# 浏览器访问
# http://127.0.0.1:8000/docs
# 停止服务
Ctrl + C
# 退出虚拟环境
deactivate
---
## 部署生产环境(Windows / Linux)
# 禁用 reload 模式
python run.py
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
1. 可配合 Windows 服务 或 Linux systemd 实现开机自启
2. 配置日志文件输出,方便运维监控
3. 使用 `.env` 管理敏感信息(数据库密码、OpenAI Key 等)
---
## 数据库迁移
# 初始化 Alembic(第一次执行)
alembic init alembic
# 自动生成迁移脚本
alembic revision --autogenerate -m "init schema"
# 执行迁移
alembic upgrade head
---
## API 版本管理
from fastapi import FastAPI
from app.api.v1 import v1_router
from app.api.v2 import v2_router
app = FastAPI(title="Company AI Backend")
# 挂载不同版本 API
app.include_router(v1_router, prefix="/api/v1")
app.include_router(v2_router, prefix="/api/v2")