🚀 FastAPI:高性能 Python Web 框架
随着 AI 技术的爆发,越来越多的团队开始在后端引入 Python,用来承载如 LangChain、LangGraph、向量检索、Embedding、LLM 调用 等 AI 能力。但对于前端工程师或非 Python 后端开发来说,如何快速搭建一个高性能、易扩展的 Python API 服务,是进入 AI 开发的第一步。
FastAPI,就是这样一个足以媲美 Java Spring Boot 的现代 Python Web 框架。
本文我会从一个前端工程师的角度出发,用最直观的方式介绍:
- 为什么 FastAPI 是 AI 后端的最佳选择
- 如何用 FastAPI 5 分钟搭建一个可用 API
- 如何处理参数、校验、错误返回
- 如何构建一个可扩展的项目结构
- 如何整合 AI(LangChain)能力
- 如何在生产环境部署
🎯 为什么是 FastAPI?
相比 Flask、Django,FastAPI 有几个特别关键的优势:
🟩 1. 自带自动生成 API 文档(Swagger + ReDoc)
开发体验类似 Spring Boot,通过 /docs 自动生成文档和请求调试界面。
🟦 2. 原生 async/await,性能极高
FastAPI 底层基于 Starlette + Pydantic,是目前 Python 速度最高的框架之一,非常适合高并发 AI 服务。
🟧 3. 内置强类型支持(非常像 TypeScript)
你写类型 → 自动生成文档 → 自动校验参数
这对前端工程师非常友好。
🟨 4. 与 AI 生态适配最佳
LangChain、LangGraph、OpenAI、LlamaIndex 官方示例几乎都用 FastAPI。
🟥 5. 学习曲线非常平滑
仅需 Python 基础即可快速搭建后端服务。
⚡ 5 分钟上手:第一个 FastAPI 程序
安装依赖:
bash
pip install fastapi uvicorn
创建 app.py:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello():
return {"message": "Hello FastAPI"}
运行:
bash
uvicorn app:app --reload
访问:
http://localhost:8000/
自动 API 文档(惊喜):
http://localhost:8000/docs
你会看到一个可交互的 Swagger UI,并且可以直接调试 API。
🧩 路由与参数:FastAPI 的优雅之处
1. 路径参数(Path Parameter)
python
@app.get("/weather/{city}")
def get_weather(city: str):
return {"city": city, "weather": "sunny"}
访问:
/weather/Shanghai
2. 查询参数(Query Parameter)
python
@app.get("/sum")
def sum_numbers(a: int, b: int):
return {"result": a + b}
访问:
/sum?a=3&b=5
3. Body 参数(使用 Pydantic 校验)
python
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
@app.post("/user")
def create_user(user: User):
return {"msg": "ok", "data": user}
Swagger 会自动显示请求的 JSON 模型,非常强大。
🧱 企业级项目目录结构推荐
如果你来自 Java(Spring Boot),你会喜欢以下结构:
app/
│── api/ # 路由层(Controller)
│── services/ # 业务逻辑层(Service)
│── models/ # ORM(数据库 Model)
│── schemas/ # 请求/响应 DTO(Pydantic)
│── core/ # 配置、中间件、日志
main.py # 程序入口
典型入口文件:
python
from fastapi import FastAPI
from app.api import user_router, chat_router
app = FastAPI()
app.include_router(user_router)
app.include_router(chat_router)
🤖 FastAPI + LangChain:让你的 API 拥有 LLM 智能
安装依赖:
bash
pip install langchain-openai
示例:一个简单的 AI Chat API
python
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
app = FastAPI()
llm = ChatOpenAI(model="gpt-4.1-mini")
@app.get("/chat")
def chat(msg: str):
res = llm.invoke(msg)
return {"reply": res.content}
访问:
/chat?msg=你好
1 分钟做一个 AI 服务,就是这么简单。
🤖 FastAPI + LangGraph:工作流级别的 AI Agent 服务
LangGraph 可做多步骤 AI Agent,你可以这样包装一个图:
python
from fastapi import FastAPI
from langgraph.graph import StateGraph
app = FastAPI()
def say_hello(state):
return {"text": "Hello from LangGraph"}
graph = StateGraph().add_node("hello", say_hello).compile()
@app.get("/graph")
def run_graph():
out = graph.invoke({"input": ""})
return out
这就已经是一个最小可运行的 AI agent workflow 接口了。
📦 CORS:前端跨域必备
python
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
🚀 部署 FastAPI(生产环境)
最标准生产方案:
Gunicorn + Uvicorn workers
启动方式:
bash
pip install gunicorn uvicorn
gunicorn -k uvicorn.workers.UvicornWorker app:app -w 4 -b 0.0.0.0:8000
Dockerfile 示例:
dockerfile
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "app:app"]
部署到 K8s、阿里云、腾讯云都很简单。
🚀 什么是 Uvicorn?
uvicorn 是 一个高性能的 Python ASGI 服务器 ,它负责真正运行 FastAPI 项目 。
一句话:
FastAPI 是框架,Uvicorn 是用来运行 FastAPI 的"发动机"。
下面我给你一个前端工程师能一秒理解的解释。
- 它是一个 ASGI server(Asynchronous Server Gateway Interface)
- 用于运行异步 Web 框架,比如 FastAPI / Starlette
- 速度非常快(基于 uvloop + httptools)
你可以把它理解为:
| Java | Python |
|---|---|
| Tomcat / Jetty / Undertow | Uvicorn |
👉 你写 FastAPI,但真正处理网络请求的是 Uvicorn。
🟦 为什么 FastAPI 必须安装 Uvicorn?
FastAPI 本身是 框架 ,不是 服务器。
你不能直接运行一个 framework,你需要一个 web server 去:
- 打开端口
- 接收 HTTP 请求
- 分发请求
- 管理异步事件循环
- 返回 HTTP 响应
FastAPI 官方推荐的运行方式就是:
bash
uvicorn app:app --reload
uvicorn app:app --host 0.0.0.0 --port 8000
其中:
app:app= 文件名:实例名uvicorn负责启动整个服务
没有 Uvicorn,你无法通过 HTTP 访问 FastAPI。
🟩 为什么不用 Flask 那样的 "app.run()"?
Flask 是 WSGI 框架(同步)。
FastAPI 是 ASGI 框架(异步),支持:
- async/await 并发
- WebSocket
- 高性能 IO
- Streaming
- 背压
- LLM 长链接/流式输出
这些必须依赖 ASGI server,所以需要:
✔ Uvicorn
✔ 或 Hypercorn
✔ 或 Daphne
其中 Uvicorn 最轻量 + 速度最快。
🟧 前端视角理解(最直观)
你可以把它类比:
| Node.js | Python |
|---|---|
node server.js |
uvicorn app:app |
FastAPI 类似 Express,但它没有内置一个"启动 API 的命令"。
你需要用 Uvicorn 来启动它。
理念与:
- Express(Node)
- Flask(Python)
- Koa(Node)
一致。
框架不内置 server,server 由专业项目处理。
🟫 总结
FastAPI = 框架,而不是服务器
Uvicorn = 运行 FastAPI 的 ASGI 服务器
安装 FastAPI 时必须要一个 ASGI server,否则它无法提供 HTTP 服务。
最常用的组合:
FastAPI + Uvicorn(开发)
FastAPI + Uvicorn + Gunicorn(生产)