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

通过本文你可以了解到:

  • 如何安装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_dbask_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,等待返回结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LibreOJ #10131. 「一本通 4.4 例 2」暗的连锁 题解 树上差分

暗的连锁 题目描述 Dark 是一张无向图,图中有 N 个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark 有 N−1 条主要边,并且 Dark 的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark 还有 M…

解决!word转pdf时,怎样保持图片不失真

#今天用word写了期末设计报告,里面有很多过程的截图,要打印出来,想到pdf图片不会错位,就转成了pdf,发现图片都成高糊了,找了好多方法,再不下载其他软件和插件的情况下,导出拥有清晰的…

BarTender 常见的使用要点

BarTender 简述 BarTender是由美国海鸥科技(Seagull Scientific)推出的一款条码打印软件,被广泛应用于标签、条形码、证卡和RFID标记的设计和打印领域。它在全球范围内拥有众多用户,被公认为标签打印方面的全球领先者。BarTender…

JavaScript基础用法(变量定义、输入输出、转义符、注释和编码规范)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

conda实现根据序号创建、删除或激活虚拟环境(实用脚本)

不知道用过conda的朋友,你们是否有这样一个困扰,在创建和删除与切换虚拟环境的时候,总感觉很麻烦,有时候,命令又记不住,有没有一个简单的方法,来简化我们的操作,比如通过一个脚本帮我实现,进行控制台交互,就可以轻松实现,conda的创建,激活与删除操作,而不需要记住…

对比 JSON 和 Hessian2 的序列化格式

关于服务通信,我了解到Spring Cloud LoadBalancer 和 Dubbo 的数据传输方式有所不同。它们分别使用不同的协议和技术栈来实现服务之间的通信。 他们两者对比可知: 特性Spring Cloud LoadBalancerDubbo主要协议HTTP/RESTDubbo 协议(默认&…

史上最详细四叉树地图不同技术应用和代码详解

四叉树地图在计算机和机器人领域应用的很广,但是初学者可能会发现四叉树地图有各种不同的实现方式,很多在机器人领域不适用或是在计算机存储领域不适用。今天我就讲解下各类四叉树的实现方式和应用场景。 史上最详细四叉树地图不同技术应用和代码详解 本…

vue3+ts webVTT与JSON之前格式互转

vue interface Cue {startTime: stringendTime: stringcontent: string// 可以根据需要添加其他属性,如样式、行号等 } /** desc WebVtt转 JSON */ export function parseWebVTT(vttContent: any): Cue[] {const cues: Cue[] []if (!vttContent) {return []}const …

Bio-Info每日一题:Rosalind-06-Counting Point Mutations

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初…

详解MySQL的MVCC机制

多版本并发控制(MVCC,Multi-Version Concurrency Control)是MySQL InnoDB存储引擎用于实现事务隔离和提高并发性能的一种机制。MVCC通过在同一数据的多个版本之间进行管理,允许读写操作并发进行,从而避免了传统锁机制带…

Navicat导入json文件(json文件数据导入到MySQL表中)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

mqttjs发送成功回调

在mqttjs中,发送成功回调可以通过设置client.publish()方法的callback参数来实现。以下是一个示例: javascript const mqtt require(mqtt); const client mqtt.connect(mqtt://test.mosquitto.org); client.on(connect, () > { const topic test…

多目标融合参数搜索

多目标融合 权重分类目人群。 trick normlize 不同Score之间含义、量级和分布差异较大:评分计算的不同部分的意义、范围和分布存在显著差异,这使得直接比较或融合它们的结果变得困难。显式反馈(如点赞率)存在用户间差异&#…

【AI】人工智能(AI)的崛起与未来展望

人工智能(AI)的崛起与未来展望 描述一、AI的基本概念二、AI的发展历程三、AI的应用场景与代码示例四、AI在自动驾驶中的应用五、AI的未来展望 描述 随着科技的飞速发展,人工智能(AI)已经成为当今科技领域的热门话题。…

git拉取合并分支冲突解决

这个错误信息 ! [rejected] release_zfbchk -> dev1 (non-fast-forward) 表示 Git 拒绝执行 git pull 操作,因为远程分支 release_zfbchk 的更新不能直接合并到本地分支 dev1,因为这不是一次快进(fast-forward)合并。 在 Git …

【9】openssl 代码调试

0x01 前言 最近在学习密码学,但是国密算法(SM2,SM3,SM4,SM9)的细节都在openssl项目里,当然一些国际算法也在。想着看下代码执行过程和理论结合起来。中间走了一些弯路,做个笔记。 0x02 openssl安装 一开始认为是不是直接下载好的…

Layui实现下拉多选功能

1、问题概述? 提供源码下载 在项目中有很多地方需要使用到下拉框,并且实现选择多个信息,下面是展示。 支持如下功能: 1、分页 2、主题自定义 3、国际化 4、下拉方向 5、Tips修改等 6、Style自定义样式 7、取值 8、赋值 2、资源准备及测试? 2.1、资源下载

Leetcode 力扣113. 路径总和 II (抖音号:708231408)

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

AIGC笔记--Stable Diffusion源码剖析之UNetModel

1--前言 以论文《High-Resolution Image Synthesis with Latent Diffusion Models》 开源的项目为例,剖析Stable Diffusion经典组成部分,巩固学习加深印象。 2--UNetModel 一个可以debug的小demo:SD_UNet​​​​​​​ 以文生图为例&#…

中山大学和字节发布「视频虚拟试穿」扩散模型VITON-DiT,一键生成换装后视频!

视频虚拟试穿技术日益受到关注,然而现有的工作局限于将服装图像转移到姿势和背景简单的视频上,对于随意拍摄的视频则效果不佳。最近,Sora 揭示了 Diffusion Transformer (DiT) 在生成具有真实场景的逼真视频方面的可扩展性,可以说…