FastAPI:在大模型中使用fastapi对外提供接口

通过本文你可以了解到:

  • 如何安装fastapi,快速接入
  • 如何让大模型对外提供API接口

往期文章回顾:
1.大模型学习资料整理:大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业RAG系统,如何评估与优化(更新中…)
2.streamlit入门和简单使用:streamlit:如何快速构建一个应用,不会前端也能写出好看的界面

3.搭建RAG应用:RAG:如何从0到1搭建一个RAG应用

欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中…


在这里插入图片描述

FastAPI介绍


文档: https://fastapi.tiangolo.com

源码: https://github.com/tiangolo/fastapi


FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
  • 高效编码:提高功能开发速度约 200% 至 300%。
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

FastAPi安装

pip install fastapi
pip install "uvicorn[standard]"

大模型对外提供API接口

参考RAG:如何从0到1搭建一个RAG应用中的模型和接口,在上层提供接口,其具体实现如下:

  • 封装请求参数为一个类Item,包含常用的参数model_name,vector_db,prompt,top_k,temperature
  • 封装返回结果到一个Response类
  • 封装函数接口chat_with_model,调用get_vector_dbask_and_get_answer_from_local,返回结果给调用方
import os
from typing import Any

from chat_doc_stream import ask_and_get_answer_from_local
from fastapi import FastAPI
from pydantic import BaseModel

# 创建app
from streamlit_demo.embedding_oper import load_embeddings_faiss

app = FastAPI()


class Item(BaseModel):
    model_name: str = "Qwen_q2"
    vector_db: str = "bge-large-zh-v1.5"
    prompt: str = None
    top_k: int = 5
    temperature: float = 0.01


class Response:
    code: int
    message: str
    data: Any

    def __init__(self, code, message, data):
        self.code = code
        self.message = message
        self.data = data

    @staticmethod
    def success(data: Any):
        return Response(code=200, message="success", data=data)

    @staticmethod
    def error(msg:str):
        return Response(code=500, message=msg, data=None)


@app.get(path="/hello", description="hello测试")
def hello():
    return {"hello": "world"}


@app.get(path="/getItemById/{id}")
def getItemById(id: int):
    return {"id: ": id}


def get_vector_db():
    base_dir = os.path.dirname(__file__)
    vector_db_path = os.path.join(base_dir, "vector_db")
    vector_store = load_embeddings_faiss(vector_db_path, "bge")
    return vector_store

@app.post(path="/chat")
def chat_with_model(item: Item):
    if item.prompt is None:
        return Response.error("prompt is None")
    vector_store = get_vector_db()
    response = ask_and_get_answer_from_local(
        model_name="Qwen_q2",
        vector_db=vector_store,
        prompt=item.prompt,
        top_k=item.top_k
    )
    print("chat_with_model: ", response)
    return Response.success(response)

结果展示

代码运行

关于 uvicorn api:app --reload 命令......
uvicorn main:app 命令含义如下:

api:api.py 文件(一个 Python "模块")。
app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
--reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。

在这里插入图片描述

web界面访问

访问http://127.0.0.1:8000/docs,查看所有的接口
接触过java后端的同学,看到这个界面应该很熟悉,这不就是swaggerui
在这里插入图片描述
输入参数,点击Try it out执行和调用后台API,等待返回结果
在这里插入图片描述

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值