LK 博客
FastAPI与大模型服务化
前后端
约 1 分钟阅读 1 赞 1 条评论 鸿蒙黑体

FastAPI与大模型服务化

zihan
王子翰 @zihan
累计点赞 1 登录后每个账号只能点一次
内容长度 0 正文词元数
正文
目录会跟随阅读位置移动。
阅读进度

学习大模型时,除了了解训练流程,还需要掌握如何将模型封装为可调用的服务,方便前端、其他后端或第三方系统访问。
FastAPI 是一个常用的 Python Web 框架,适合构建模型推理接口、内部工具系统以及通用 API 服务。

FastAPI异步支持

速度性能更好,耗时更少,但不代表更好 同步:每次只相应一个,完成后在完成另一个 比如一个请求进来:

  1. 接收请求
  2. 调用模型
  3. 等模型返回
  4. 返回响应
@app.post("/chat")
def chat(req: ChatRequest):
    result = infer(req.prompt)
    return {"answer": result}

这个过程中,当前处理流程会一直“等着”。 异步:当程序遇到需要等待的操作时,不傻等,先去处理别的事情。

  1. 等数据库返回
  2. 等第三方 API 返回
  3. 等文件读写
  4. 等网络响应
@app.post("/chat")
async def chat(req: ChatRequest):
    result = await some_io_task()
    return {"answer": result}

异步主要优化“等待时间”,不是直接优化“计算速度”。

终端运行指令

python -m uvicorn main:app --reload

python -m uvicorn 会明确使用当前这个 Python main是当前文件的文件名 app是main里面创建的FastAPI实例 --reload可以使修改后端后可以直接使用而不是关闭后端在打开

访问FastAPI交互式文档

IP地址:端口/docs

基础入门

路由

路由就是url_地址和处理函数之间的映射关系,它决定了当用户访问某个特定网址时,服务器应该执行哪段代码来返回结果 FatsAPI的路由定义基于Python的装饰器模式

@app.get("/")
#FastAPI实例app 请求方法get 请求路径/

参数

客户端发送请求时附带的额外信息和指令 作用是让同一个接口能根据不同的输入,返回不同的输出,实现动态交互

路径参数

位置:URL路径的一部分

/book/{id}

作用:指向唯一的,特定的资源

方法:get

类型注解 Path

导入FastAPI的Path函数

def name(id: int = Path(...,gt=0,lt=101,description="描述"))

Path函数的 作用:...:默认初始值 gt:int类型最小值,lt:int类型最大值,description:描述

查询参数

位置:URL?之后 k1=v1&k2=v2

作用:对资源集合进行过滤,排序,分类等操作

方法:GET

@app.get("/hello/news_list")  
async def get_news_list(skip: int, limit: int):  
    return {"skip": skip, "limit": limit}

额外类型注解Query

skip: int = Query(0 ,description="描述" ,lt = 10),

和Path差不多

请求体参数

位置:HTTP请求的消息体(body)中 作用:创建,更新资源携带大量数据,如:JSON 方法:POST,PUT等等 请求有三部分

请求行

包括方法,URL,协议版本

请求头

元数据信息(Content-Type,Authorization等)

请求体

1.定义类型

from pydantic import BaseModel
class User(BaseModel):  
    name: str  
    age: int  
    password: str

2.类型注解

user:User

Field类型注解

从pydantic导入类型注解

from pydantic import Field

响应类型

默认情况下,FastAPI会自动将路径返回的参数对象转换为JSON兼容格式 如果需要返回的非JSON格式,FastAPI同样有丰富的相应类型去返回不同的结果

响应类型设置方式

装饰器中指定响应类

场景:固定返回类型(HTML,纯文本等)

from fastapi.responses import HTMLResponse
@app.get("/html", response_class=HTMLResponse)  
async def get_html():  
    return "<h1>Hello World<h1>"

返回响应对象

场景:文件下载,图片,流式响应

from fastapi.responses import RedirectResponse
@app.get("/redirect")  
async def redirect():  
    return RedirectResponse(url="/html")#这个返回的是地址,通过RedirectResponse返回地址的文件和图片

自定义返回类型


class User(BaseModel):  
    name: str = Field(default= "法外狂徒张三", min_length=2, max_length=20, description="用户名,长度2-20")  
    id: int  
    title: str  
    password: str


@app.get("/news/{id}", response_model=User)  
async def get_news(id:int, name:str):  
      
    return {  
        "name": name,  
        "id": id,  
        "title": f"Hello {id}",  
        "password": 0000,  
    }

异常处理

对于客户端引发的错误,可使用fastapi。HTTPException 来中断正常处理流程,并返回标准错误响应

from fastapi import HTTPException

raise HTTPException(status_code=404, detail="用户不存在")

作者名片

zihan
王子翰
@zihan

这个作者暂时还没有填写个人简介。

评论区
文章作者和管理员都可以管理这里的评论。
1 条评论
登录后即可参与评论。 去登录
Jokerbai
Jokerbai @Jokerbai 2026-04-02 14:04
我类个法外狂徒张三