通过本文你可以了解到:
- 如何安装fastapi,快速接入
- 如何让大模型对外提供API接口
往期文章回顾:
1.大模型学习资料整理:大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业RAG系统,如何评估与优化(更新中…)
2.streamlit入门和简单使用:streamlit:如何快速构建一个应用,不会前端也能写出好看的界面
3.搭建RAG应用:RAG:如何从0到1搭建一个RAG应用
欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中…
文章目录
- FastAPI介绍
- FastAPi安装
- 大模型对外提供API接口
- 结果展示
- 代码运行
- web界面访问
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_db
和ask_and_get_answer_from_local
,返回结果给调用方
import os
from typing import Anyfrom 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_faissapp = FastAPI()class Item(BaseModel):model_name: str = "Qwen_q2"vector_db: str = "bge-large-zh-v1.5"prompt: str = Nonetop_k: int = 5temperature: float = 0.01class Response:code: intmessage: strdata: Anydef __init__(self, code, message, data):self.code = codeself.message = messageself.data = data@staticmethoddef success(data: Any):return Response(code=200, message="success", data=data)@staticmethoddef 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,等待返回结果