模型应用开发的基础工具与原理之Web 框架

「新手能听懂」+「一步一步」+「最后能跑起来」
FastAPI / Flask 核心 → 高并发原理 → 鉴权 → 大模型对话 API 实战
不讲晦涩源码,只讲"为什么 + 怎么用 + 能干嘛"


前情回顾大模型应用开发的基础工具与原理之Python 入门基础

一、FastAPI vs Flask(先选哪个?)

对比 Flask FastAPI
学习难度 ⭐⭐ ⭐⭐⭐
性能 一般 很高(异步)
接口文档 手写 自动生成
现代项目 较少 主流

📌 建议

👉 新项目 / AI 接口 👉 直接 FastAPI

👉 快速 demo 👉 Flask

下面重点讲 FastAPI,Flask 会类比说明。


二、FastAPI 核心 3 件套--新手必会内容

路由 + 依赖注入 + 接口文档


1️⃣ 接口入口--路由

最小 FastAPI 项目

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
    return {"msg": "hello fastapi"}

运行:

bash 复制代码
uvicorn main:app --reload

访问:


常见 HTTP 方法

python 复制代码
@app.get("/items")
@app.post("/items")
@app.put("/items/{item_id}")
@app.delete("/items/{item_id}")

📌 记忆口诀

GET 查|POST 增|PUT 改|DELETE 删


2️⃣ 非常重要的参数获取

路径参数

python 复制代码
@app.get("/user/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id}

查询参数

python 复制代码
@app.get("/search")
def search(q: str, page: int = 1):
    return {"q": q, "page": page}

用 Pydantic 请求体

python 复制代码
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

@app.post("/user")
def create_user(user: User):
    return user

📌 好处

  • 自动校验
  • 自动文档
  • 自动提示

3️⃣ FastAPI 最大优势--接口文档

📘 自动生成:

  • /docs(Swagger)
  • /redoc

📌 新手福利

不用写文档,写代码 = 文档


三、FastAPI 灵魂依赖注入

1️⃣ 什么是依赖注入(人话版)

公共逻辑,不要写重复

比如:

  • 登录校验
  • 数据库连接
  • 参数校验

2️⃣ 最简单的依赖

python 复制代码
from fastapi import Depends

def common_params():
    return {"version": "v1"}

@app.get("/info")
def info(params=Depends(common_params)):
    return params

📌 记忆

Depends = 自动帮你执行函数并注入结果


3️⃣ 登录校验依赖(重点)

python 复制代码
def check_token(token: str):
    if token != "abc123":
        raise Exception("未授权")
    return token

@app.get("/secure")
def secure(token: str, t=Depends(check_token)):
    return {"msg": "已登录"}

四、通俗易懂新手版FastAPI 高并发原理

1️⃣ 为什么 FastAPI 快?

三个核心原因:

✅ 1)异步 async / await

python 复制代码
@app.get("/async")
async def async_api():
    await asyncio.sleep(1)
    return {"msg": "ok"}

✅ 2)事件循环(单线程多任务)

等 IO 的时候,切换任务,不浪费时间


✅ 3)ASGI + Uvicorn

  • Flask:WSGI(同步)
  • FastAPI:ASGI(异步)

📌 一句话总结

FastAPI 快,是因为它「不傻等」


2️⃣ 什么时候才有高并发优势?

✔ IO 密集(接口、数据库、模型请求)

❌ 纯计算(CPU 密集)


五、新手必会的接口鉴权实现

1️⃣ 最常见Token 鉴权

请求头

http 复制代码
Authorization: Bearer abc123

依赖实现

python 复制代码
from fastapi import Header, HTTPException

def verify_token(authorization: str = Header(None)):
    if authorization != "Bearer abc123":
        raise HTTPException(status_code=401, detail="未登录")

使用

python 复制代码
@app.get("/chat")
def chat(dep=Depends(verify_token)):
    return {"msg": "安全接口"}

📌 记忆

鉴权 = Header + Depends


2️⃣ JWT(知道即可)

Token + 过期时间 + 签名

真实项目用得多,但新手先理解 Token 即可


六、实战:大模型对话 API(重点)

我们模拟一个 LLM 对话接口结构(可接 OpenAI / 本地模型)


1️⃣ 请求格式设计

json 复制代码
POST /chat
{
  "messages": [
    {"role": "user", "content": "你好"}
  ]
}

2️⃣ 定义请求模型

python 复制代码
class Message(BaseModel):
    role: str
    content: str

class ChatRequest(BaseModel):
    messages: list[Message]

3️⃣ 模拟大模型回复函数

python 复制代码
async def call_llm(messages):
    await asyncio.sleep(1)  # 模拟模型耗时
    return "你好,我是大模型 🤖"

4️⃣ 完整对话 API(核心)

python 复制代码
from fastapi import FastAPI, Depends, Header, HTTPException
from pydantic import BaseModel
import asyncio

app = FastAPI()

def verify_token(authorization: str = Header(None)):
    if authorization != "Bearer abc123":
        raise HTTPException(status_code=401, detail="Unauthorized")

class Message(BaseModel):
    role: str
    content: str

class ChatRequest(BaseModel):
    messages: list[Message]

async def call_llm(messages):
    await asyncio.sleep(1)
    return "你好,我是大模型 🤖"

@app.post("/chat")
async def chat(
    req: ChatRequest,
    auth=Depends(verify_token)
):
    reply = await call_llm(req.messages)
    return {
        "reply": reply,
        "usage": {"tokens": 100}
    }

5️⃣ 测试方式

bash 复制代码
curl -X POST http://127.0.0.1:8000/chat \
 -H "Authorization: Bearer abc123" \
 -H "Content-Type: application/json" \
 -d '{"messages":[{"role":"user","content":"你好"}]}'

七、终极记忆口诀(送你)

🔑 FastAPI 学习口诀

路由定入口
模型管数据
Depends 做复用
async 提并发
Header 来鉴权
/docs 看文档


八、推荐资源

FastAPI 官方文档、《FastAPI 实战》

相关推荐
用户8356290780519 小时前
Python 操作 PowerPoint 页眉与页脚指南
后端·python
一楼的猫9 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作
这个DBA有点耶9 小时前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
掘金一周9 小时前
想换一辆电车,JYM有什么推荐 | 沸点周刊 5.21
前端·人工智能·后端
码途漫谈9 小时前
让 AI 编程不断线:9Router 的本地模型路由与 Token 节流术
人工智能·ai·开源·ai编程
Nian.Baikal9 小时前
Cesium 3D Tiles 加载与优化实战
前端·cesium
枫叶林FYL9 小时前
项目九:异步高性能爬虫与数据采集中枢 —— 基于 Crawl<sub>4</sub>AI 与 Playwright 的现代化数据采集平台 项目总览
爬虫·python·深度学习·wpf
人月神话-Lee9 小时前
【图像处理】饱和度——颜色的浓淡与灰度化
图像处理·人工智能·ios·ai编程·swift
KaMeidebaby10 小时前
卡梅德生物技术快报|噬菌体肽库展示技术构建 Mhp168‑Hsp70 定向随机肽库:流程、质控与数据结果
前端·数据库·其他·百度·新浪微博
猫猫的小茶馆10 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32