模型应用开发的基础工具与原理之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 实战》

相关推荐
Ven%18 分钟前
在魔搭 Notebook 容器里跑 Qwen Code:从零配置到省魔粒的完整实践
人工智能·python·ai·ai编程·modelscope
2401_8858850423 分钟前
巴林语音通知接口如何对接?系统告警语音API接入教程
android·前端·网络·python·语音识别
java1234_小锋23 分钟前
【技术专题】CSS3 网页技术 - CSS3 盒模型
前端·css·css3
计算机魔术师26 分钟前
手握芯片、又要吞下开源分发入口,英伟达被盯上了
前端
执假以为真1 小时前
Python内存分析器memray的简单介绍
python
收纳过往1 小时前
数据库加索引的时机:慢查询日志说话
android·开发语言·数据库·python·低代码·rxjava
段一凡-华北理工大学1 小时前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章07:高炉煤气:产生规律与全厂用户平衡
java·前端·能源
小鹿学程序1 小时前
市赛python学习
python
高洁011 小时前
知识图谱:结构化表达实体与关系的知识组织技术
人工智能·python·深度学习·机器学习·迁移学习
雾喔2 小时前
从零理解大语言模型:AI、LLM、训练成本与手机助手的底层逻辑
人工智能·语言模型·智能手机