当前位置:   article > 正文

FastAPI:在大模型中使用fastapi对外提供接口_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]"
  • 1
  • 2

大模型对外提供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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

结果展示

代码运行

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

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

在这里插入图片描述

web界面访问

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/819542
推荐阅读
相关标签
  

闽ICP备14008679号