大模型的api封装与本地端口调用(二)——fastapi实现

一、fastapi

FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建基于标准 Python 类型提示的 API。以下是 FastAPI 的主要特点及其入门方法的简要说明:

主要特点:

  1. 开发速度快:提高开发功能的速度,大约是 200% 到 300%。
  2. 更少的错误:减少约 40% 的人为(开发人员)引入的错误。
  3. 直观:出色的编辑器支持,随处都有代码补全功能,减少调试时间。
  4. 易用:设计易于使用和学习,减少阅读文档的时间。
  5. 简洁:最小化代码重复,从每个参数声明中获得多个功能。
  6. 健壮:生产就绪代码,具有自动交互文档。
  7. 基于标准:基于(并完全兼容)API 的开放标准:OpenAPI 和 JSON Schema。

二、代码封装api前端请求与后端响应

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import uvicorn
import json
import datetime
import torch

# 设置设备参数
DEVICE = "cuda"  # 使用CUDA
DEVICE_ID = "0"  # CUDA设备ID,如果未设置则为空
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE  # 组合CUDA设备信息

# 清理GPU内存函数
def torch_gc():
    if torch.cuda.is_available():  # 检查是否可用CUDA
        with torch.cuda.device(CUDA_DEVICE):  # 指定CUDA设备
            torch.cuda.empty_cache()  # 清空CUDA缓存
            torch.cuda.ipc_collect()  # 收集CUDA内存碎片

# 构建 chat 模版
def bulid_input(prompt, history=[], system_message=None):
    system_format = 'system\n\n{content}\n'
    user_format = 'user\n\n{content}\n'
    assistant_format = 'assistant\n\n{content}\n'

    prompt_str = ''

    # 添加system消息
    if system_message:
        prompt_str += system_format.format(content=system_message)

    # 拼接历史对话
    for item in history:
        if item['role'] == 'user':
            prompt_str += user_format.format(content=item['content'])
        else:
            prompt_str += assistant_f
### 使用 FastAPI 创建 AI 接口 为了创建基于 FastAPI 的 AI 接口,开发者可以从模型封装到部署的每一步都进行详细操作,利用 FastAPI 的高性能灵活性来快速将 AI 模型转化为可用的 Web 服务接口[^1]。 #### 安装依赖库 首先需要安装 FastAPI 和 Uvicorn(用于运行服务器)。可以通过 pip 来完成这些包的安装: ```bash pip install fastapi uvicorn ``` #### 导入必要的模块并初始化应用对象 接着,在 Python 文件中导入所需的模块,并创建一个 FastAPI 实例: ```python from fastapi import FastAPI, Request import json app = FastAPI() ``` #### 加载预训练模型 假设有一个已经训练好的自然语言处理(NLP)模型保存为 `model.pkl` 文件,则可以在启动时加载它以便后续调用: ```python import joblib @app.on_event('startup') def load_model(): global model model_path = 'path/to/your/model.pkl' model = joblib.load(model_path) ``` #### 设计 API 路由函数 定义好输入输出的数据结构之后就可以编写具体的业务逻辑了。这里给出一个简单的例子——接收一段文本作为输入并通过已有的分类器预测其情感倾向(正面还是负面): ```python class SentimentRequest(BaseModel): text: str @app.post("/predict/") async def predict_sentiment(request_data: SentimentRequest): prediction = model.predict([request_data.text]) probability = model.predict_proba([request_data.text])[0].max() response = { "sentiment": "positive" if prediction[0]==1 else "negative", "confidence_score": float(probability), } return JSONResponse(content=response) ``` 上述代码片段实现了 POST 方法 `/predict/` ,接受 JSON 形式的请求体,其中包含待测字符串;随后调用预先加载过的 scikit-learn 分类器来进行推理计算,并最终返回带有情绪类别及其置信度的结果给客户端[^3]。 #### 启动应用程序 最后只需要简单的一行命令就能让整个服务跑起来啦! ```bash uvicorn main:app --reload ``` 这将会监听本地8000端口上的 HTTP 请求,当有新的连接到来时就会触发相应的处理器去执行具体的操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值