API服务的快速搭建和测试

API服务的快速搭建和测试

使用Python的FastAPI迅速搭建一个简单API

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModel
import uvicorn, json, datetime
import torch# 设置CUDA设备信息
DEVICE = "cuda"
DEVICE_ID = "0"
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE# 清理CUDA缓存的函数
def torch_gc():if torch.cuda.is_available():with torch.cuda.device(CUDA_DEVICE):torch.cuda.empty_cache()torch.cuda.ipc_collect()# 创建FastAPI应用
app = FastAPI()# 定义POST请求的处理函数
@app.post("/")
async def create_item(request: Request):global model, tokenizer# 从请求中获取JSON数据json_post_raw = await request.json()json_post = json.dumps(json_post_raw)json_post_list = json.loads(json_post)# 从JSON数据中提取必要的参数prompt = json_post_list.get('prompt')history = json_post_list.get('history')max_length = json_post_list.get('max_length')top_p = json_post_list.get('top_p')temperature = json_post_list.get('temperature')# 调用模型生成聊天响应response, history = model.chat(tokenizer,prompt,history=history,max_length=max_length if max_length else 2048,top_p=top_p if top_p else 0.8,temperature=temperature if temperature else 0.8)# 获取当前时间now = datetime.datetime.now()time = now.strftime("%Y-%m-%d %H:%M:%S")# 构建响应对象answer = {"response": response,"history": history,"status": 200,"time": time}# 构建日志信息log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'print(log)# 调用函数清理CUDA缓存torch_gc()# 返回响应return answer# 主程序入口
if __name__ == '__main__':# 加载模型和分词器tokenizer = AutoTokenizer.from_pretrained("../base_model/chatglm3-6b", trust_remote_code=True)model = AutoModel.from_pretrained("../base_model/chatglm3-6b", trust_remote_code=True).cuda()model.eval()# 启动FastAPI应用uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)

使用Python调用API

import requests# 定义请求URL
url = "http://实际API服务地址:8000"# 定义请求头
headers = {"Content-Type": "application/json"
}# 定义请求体数据
data = {"prompt": "你好","history": []
}# 发送POST请求
response = requests.post(url, headers=headers, json=data)# 打印响应
print(response.text)

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

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

相关文章

在vim中映射类似于Windows编辑器的快捷键

vim编辑器的历史比较久,继承于vi,这个编辑器就更早了。可能拜于年代所赐,里面的快捷键设计似乎不是那么“现代化”,和很多现在的编辑器的热键设计出入很大,里面的命令更不是一般人能记得住的。 我一直知道vim可以rema…

QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有50多个格式,最…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中,把我们所要用到的配置信息配置好,在检查一下我们测试的内容是否有打开(取消注释),在检查一下我们的版本信息是否正确,查看一下接口ip是否是正式线 这里的配置信息一定要配置好…

epoll并发编程

epoll并发编程 epoll并发编程背景知识epoll 的特点epoll 的工作原理epoll 和 select/poll 的区别 epoll并发服务器思路重点代码分析git地址参考书目 epoll并发编程背景知识 epoll 是 Linux 中用于处理大量文件描述符的 I/O 事件通知机制。在传统的 I/O 模型中,一般…

Screenshot-to-code开源项目mac上实践

github上的开源项目,看介绍可以将设计ui图片转换为 HTML 和 CSS 源码地址: GitCode - 开发者的代码家园 我的mac安装了2.7和3.11,就用3吧直接上代码 安装 pip3 install keras tensorflow pillow h5py jupyter 报错 ERROR: Could not in…

Linux驱动开发之Linux内核中的中断处理与等待队列以及相关API和例程分析

目录 中断的特点 Linux中的中断类型 相关API函数 gpio_to_irq() enable_irq() disable_irq() request_irq() free_irq() 中断的使用 等待队列 DECLARE_WAIT_QUEUE_HEAD() wait_event_interruptible() wake_up_interruptible() 中断相关例程 例程分析 源码分享 …

linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享

Ubuntu安装配置Samba服务与Win10共享文件 Chapter1 Ubuntu18.04安装配置Samba服务与Win10共享文件一、什么是Samba二、安装Samba1、查看是否有安装samba2、安装samba 三、配置Samba服务1、创建共享目录(以samba_workspaces为例)2、为samba设置登录用户3、…

独立站的个性化定制:提升用户体验的关键

随着电子商务的竞争加剧,用户体验成为了企业赢得市场的关键因素之一。独立站作为企业品牌形象和产品展示的重要平台,其个性化定制的程度直接影响着用户体验。本文将探讨独立站的个性化定制如何提升用户体验,并通过代码示例说明实现个性化定制…

学习动态规划不同路径、最小路径和、打家劫舍、打家劫舍iii

学习动态规划|不同路径、最小路径和、打家劫舍、打家劫舍iii 62 不同路径 动态规划,dp[i][j]表示从左上角到(i,j)的路径数量dp[i][j] dp[i-1][j] dp[i][j-1] import java.util.Arrays;/*** 路径数量* 动态规划,dp[i][j]表示从左上角到(i,j)的路径数量…

计算机网络-动态路由

网络层协议:ip,ospf,rip,icmp共同组成网络层体系 ospf用于自治系统内部。 一个路由器或者网关需要能够支持多个不同的路由协议,以适应不同的网络环境。特别是在连接不同自治系统的边缘路由器或边界网关的情况下&#…

MongoDB聚合:$merge 阶段(2)

$merge的用途是把聚合管道产生的结果写入指定的集合,有时候可以用$merge来做物化视图。下面是$merge的一些例子。 举例 按需物化视图:创建集合 当输出集合不存在时,$merge将自动创建。首先在zoo数据库的salaries集合中填充员工和部门历史数…

Golang解决跨域问题【OPTIONS预处理请求】

Golang解决跨域问题 前置知识:跨域问题产生条件及原因 跨域是是因为浏览器的同源策略限制,是浏览器的一种安全机制,服务端之间是不存在跨域的。 所谓同源指的是两个页面具有相同的协议、主机和端口,三者有任一不相同即会产生跨域…

Autosar MCAL-RH850P1HC Mcu配置

文章目录 McuModuleConfigurationCvm Diag Lock BitCvm Out Mask DiagCvm Out Mask FbistCvm Output FilterCvm Reset EnableNumber Of Mcu ModesRam SectorsReset SettingSw Reset TriggerMcuClockSettingConfigClock Setting Id

数据库原理与应用快速复习(期末急救)

文章目录 第一章数据库系统概述数据、数据库、数据库管理系统、数据定义、数据组织、存储和管理、数据操纵功能、数据库系统的构成数据管理功能、数据库管理的3个阶段以及特点数据库的特点、共享、独立、DBMS数据控制功能数据库的特点 数据模型两类数据模型、逻辑模型主要包括什…

2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...

12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…

【Web2D/3D】CSS3的2D/3D转换、过渡、动画(第一篇)

1. 前言 本篇开始介绍Web2D和3D相关基础知识,会从CSS3的2D/3D转换、过渡、动画,讲到Canvas 2D图形绘制,再到SVG,最后到WebGL。 坐标系:左上点是坐标原点(0,0),x轴正方向向右,y轴正方向向下&…

STL——查找算法

算法简介: find ——//查找元素find_if ——//按条件查找元素adjacent_find ——//查找相邻重复元素binary_search ——//二分查找法count ——//统计元素个数count_if ——//按条件统计元素个数 1.find 函数原型: find(iterator beg, iterator end,…

(学习打卡1)重学Java设计模式之设计模式介绍

前言:听说有本很牛的关于Java设计模式的书——重学Java设计模式,然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧,本文主要记录笔者的学习笔记和心得。 打卡!打卡! 设计模式介绍 一、设计模式是什么? …

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测

资源下载: https://download.csdn.net/download/vvoennvv/88682033 一,概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法,用于预测时间序列数据的趋势和未来值。 在使用这种方法之前,需要将时间序…

Linux:apache优化(4)—— 隐藏版本号

运行环境 yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre gcc make zlib-devel 源码包配置 ./configure --prefix/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enabl…