跪拜 Guibai
← Back to the summary

Python + FastAPI Is the Default Backend for AI Apps — Here’s the First Route You Write

e465f9b4-5987-444e-8b79-ba2b983cfeff.png

image.png

以下是针对每一个知识点的详细教学:

1. FastAPI 路由 (对标 Express 路由)

在图中的代码里,你看到了 @app.get("/health")@app.post("/api/chat")

2. Pydantic 模型与类型标注 (对标 TypeScript 的 Interface + 运行时校验)

这是图中最核心的部分,也是 FastAPI 最强大的功能。图中写了 request: ChatRequest,但没有给出定义。

如何写出这个 ChatRequest 需要用到类 (Class)

Python

from pydantic import BaseModel

# 继承 BaseModel,这就相当于定义了一个 Interface
class ChatRequest(BaseModel):
    question: str  # 标注为字符串类型
    # 如果想加一个可选参数,可以这样写:
    # history: list = [] 

3. 数据结构:字典、列表、函数与类

图里提到了需要理解的基本数据结构,它们和 JS 非常相似:

4. 异常处理 (对标 try...catch)

在调用 AI 模型(比如组装 HTTP 请求发给大模型 API,或者读取本地向量数据库)时,网络超时或服务报错是常态。我们需要捕获这些异常,防止后端服务崩溃。

Python 中使用的是 try...except 语法:

Python

from fastapi import HTTPException

@app.post("/api/chat")
def chat(request: ChatRequest):
    try:
        # 这里未来会写调用 LLM 的代码
        answer = "模拟 LLM 回复: " + request.question
        return {"answer": answer}
    except Exception as e:
        # 如果出错,抛出标准的 500 状态码
        raise HTTPException(status_code=500, detail=str(e))

🎓 整合实战:跑起你的第一个 AI 接口服务

把上面的知识点组合起来,这就是图里要求的完整、可运行的第一阶段代码。你可以新建一个 main.py 文件,贴入以下代码:

Python

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# 1. 初始化 FastAPI 实例 (相当于 const app = express())
app = FastAPI()

# 2. 定义 Pydantic 模型 (定义请求体结构)
class ChatRequest(BaseModel):
    question: str

# 3. 定义 GET 路由
@app.get("/health")
def health():
    return {"status": "ok"}

# 4. 定义 POST 路由
@app.post("/api/chat")
def chat(request: ChatRequest):
    # 这里直接可以通过 request.question 拿到校验后的安全数据
    response_text = f"你问了:{request.question},这是 AI 的模拟回答。"
    return {"answer": response_text}

如何运行它?

Python 有专门的服务器引擎运行 FastAPI(类似于 Node 运行 JS),最常用的是 uvicorn

在终端执行:

uvicorn main:app --reload

(这里的 main 是文件名 main.pyapp 是代码里实例化的对象,--reload 相当于 nodemon 的热更新)

跑起来后,你可以立刻在浏览器访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。FastAPI 会自动为你生成一个 Swagger UI 测试页面,你可以直接在页面里测试这两个接口!

小测试:

如果我想在上面的 ChatRequest 里再加一个参数 max_tokens(必须是整数,用来控制大模型生成的最大字数),你觉得上面的 class ChatRequest 应该怎么修改?

答案在这里

在 Python 的 Pydantic 模型里加参数,就像在写数据接口约束一样。因为 max_tokens 需要是一个“整数”,在 Python 里整数对应的基础类型是 int(integer 的缩写)。

你只需要在原来的 ChatRequest 类里面加一行:

Python

class ChatRequest(BaseModel):
    question: str
    max_tokens: int  # 👈 就是这么简单,直接标注为 int 类型

这行代码背后发生了什么?

加上这行之后,FastAPI 就会自动为你做极其严格的参数校验。

假设前端发来的 JSON 数据是这样的:{"question": "你好", "max_tokens": "一百"}(传入了中文字符串,而不是数字)。Pydantic 甚至不会让这个请求进入你的 chat 函数体,而是直接给前端返回一个 422 错误,并附带错误信息指出 max_tokens 必须是合法的数字。这就完全省去了你在代码里手动写 typeof max_tokens === 'number' 这类判断逻辑的麻烦。

进阶小技巧:设置默认值

在实际的 AI 开发中,调用大模型时 max_tokens 通常会有一个合理的默认值。如果你希望前端如果不传这个参数时,后端自动给它设定为 1024,你可以直接用等号赋值:

Python

class ChatRequest(BaseModel):
    question: str
    max_tokens: int = 1024  # 👈 等号后面就是默认值,这在 TypeScript 里也很常见

只要掌握了这个模式,图中第一阶段的“先懂普通 Python 后端”你就已经通关大半了。能够写出带有严谨数据校验的路由接口,是准备 AI 应用开发面试极其重要的基石。