通过本文你可以了解到:
- 如何安装fastapi,快速接入
- 如何让大模型对外提供API接口
往期文章回顾:
1.大模型学习资料整理:大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业RAG系统,如何评估与优化(更新中…)
2.streamlit入门和简单使用:streamlit:如何快速构建一个应用,不会前端也能写出好看的界面
3.搭建RAG应用:RAG:如何从0到1搭建一个RAG应用
欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中…
文章目录
- FastAPI介绍
- FastAPi安装
- 大模型对外提供API接口
- 结果展示
- 代码运行
- web界面访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/61ce1bf52ffb4df3ac2e360b6fe8c98b.png#pic_center)
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 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,等待返回结果