当前位置: 首页 > news >正文

python中使用websocket调用、获取、保存大模型API

笔者最近在测试星火大模型的时候,他们是使用websocket 来建立对话,而且星火大模型开放的测试代码,质量上不咋地(20231030记录),还需要对websocket有一定的了解,才适合自己微调。

安装:

pip install websocket
pip install websocket-client

文章目录

  • 1 常见的websocket获取数据的方法
    • 1.1 第一种使用create_connection链接
    • 1.2 第二种:WebSocketApp + run_forever的方式
  • 2 针对`run_forever`内容保存
    • 2.1 通过定义global变量来保存内容
    • 2.2 通过`CallbackToIterator()`来返回


1 常见的websocket获取数据的方法

参考【python: websocket获取实时数据的几种常见链接方式】常见的两种。

1.1 第一种使用create_connection链接

需要pip install websocket-client (此方法不建议使用,链接不稳定,容易断,并且连接很耗时)

import time
from websocket import create_connectionurl = 'wss://i.cg.net/wi/ws'
while True:  # 一直链接,直到连接上就退出循环time.sleep(2)try:ws = create_connection(url)print(ws)breakexcept Exception as e:print('连接异常:', e)continue
while True:  # 连接上,退出第一个循环之后,此循环用于一直获取数据ws.send('{"event":"subscribe", "channel":"btc_usdt.ticker"}')response = ws.recv()print(response)

1.2 第二种:WebSocketApp + run_forever的方式

import websocketdef on_message(ws, message):  # 服务器有数据更新时,主动推送过来的数据print(message)def on_error(ws, error):  # 程序报错时,就会触发on_error事件print(error)def on_close(ws):print("Connection closed ……")def on_open(ws):  # 连接到服务器之后就会触发on_open事件,这里用于send数据req = '{"event":"subscribe", "channel":"btc_usdt.deep"}'print(req)ws.send(req)if __name__ == "__main__":websocket.enableTrace(True)ws = websocket.WebSocketApp("wss://i.cg.net/wi/ws",on_message=on_message,on_error=on_error,on_close=on_close)ws.on_open = on_openws.run_forever(ping_timeout=30)

第二种方式里面,run_forever其实是流式返回内容,大概可以看,流式输出的样例:


{"code":0,"sid":"5ebc0d6833b54909b4a51fbe75a5051a","status":0}
### error: 'content'{"code":0,"fileRefer":"{\"43816997a7a44a299d0bfb7c360c5838\":[2,0,1]}","sid":"5ebc0d6833b54909b4a51fbe75a5051a","status":99}
### error: 'content'{"code":0,"content":"橘","sid":"5ebc0d6833b54909b4a51fbe75a5051a","status":1}橘{"code":0,"content":"子。","sid":"5ebc0d6833b54909b4a51fbe75a5051a","status":1}子。{"code":0,"content":"","sid":"5ebc0d6833b54909b4a51fbe75a5051a","status":2}
### closed ###

那么run_forever流式输出,正常的内容如何保存呢,进入下一章


2 针对run_forever内容保存

2.1 通过定义global变量来保存内容

参考【将Websocket数据保存到Pandas】
来看一下,文中的案例:

import jsonimport pandas as pd
import websocketdf = pd.DataFrame(columns=['foreignNotional', 'grossValue', 'homeNotional', 'price', 'side','size', 'symbol', 'tickDirection', 'timestamp', 'trdMatchID'])def on_message(ws, message):msg = json.loads(message)print(msg)global df# `ignore_index=True` has to be provided, otherwise you'll get# "Can only append a Series if ignore_index=True or if the Series has a name" errorsdf = df.append(msg, ignore_index=True)def on_error(ws, error):print(error)def on_close(ws):print("### closed ###")def on_open(ws):returnif __name__ == "__main__":ws = websocket.WebSocketApp("wss://www.bitmex.com/realtime?subscribe=trade:XBTUSD",on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close)ws.run_forever()

其中global df是在定义全局变量df,可以在函数中把流式数据拿出来,还是很不错的

2.2 通过CallbackToIterator()来返回

在开源项目中ChuanhuChatGPT,看到了使用的方式spark.py,个人还没有尝试,只是贴在这里。

贴一下这个函数:

class CallbackToIterator:def __init__(self):self.queue = deque()self.cond = Condition()self.finished = Falsedef callback(self, result):with self.cond:self.queue.append(result)self.cond.notify()  # Wake up the generator.def __iter__(self):return selfdef __next__(self):with self.cond:# Wait for a value to be added to the queue.while not self.queue and not self.finished:self.cond.wait()if not self.queue:raise StopIteration()return self.queue.popleft()def finish(self):with self.cond:self.finished = Trueself.cond.notify()  # Wake up the generator if it's waiting.# 主函数截取
def get_answer_stream_iter(self):wsParam = Ws_Param(self.appid, self.api_key, self.api_secret, self.spark_url)websocket.enableTrace(False)wsUrl = wsParam.create_url()ws = websocket.WebSocketApp(wsUrl,on_message=self.on_message,on_error=self.on_error,on_close=self.on_close,on_open=self.on_open,)ws.appid = self.appidws.domain = self.domain# Initialize the CallbackToIteratorws.iterator = CallbackToIterator()# Start the WebSocket connection in a separate threadthread.start_new_thread(ws.run_forever, (), {"sslopt": {"cert_reqs": ssl.CERT_NONE}})# Iterate over the CallbackToIterator instanceanswer = ""total_tokens = 0for message in ws.iterator:data = json.loads(message)code = data["header"]["code"]if code != 0:ws.close()raise Exception(f"请求错误: {code}, {data}")else:choices = data["payload"]["choices"]status = choices["status"]content = choices["text"][0]["content"]if "usage" in data["payload"]:total_tokens = data["payload"]["usage"]["text"]["total_tokens"]answer += contentif status == 2:ws.iterator.finish()  # Finish the iterator when the status is 2ws.close()yield answer, total_tokens

截取了部分代码,这里先是定义ws.iterator = CallbackToIterator()然后通过迭代从for message in ws.iterator:拿出数据,看上去也是可行的

相关文章:

python中使用websocket调用、获取、保存大模型API

笔者最近在测试星火大模型的时候,他们是使用websocket 来建立对话,而且星火大模型开放的测试代码,质量上不咋地(20231030记录),还需要对websocket有一定的了解,才适合自己微调。 安装&#xff…...

Linux的账号管理

本章的学习感觉如果不做系统管理员,作为简单了解就可以了 前面介绍了,用户,组,other三个角色, 每个用户创建都会有uid与之对应,创建的用户基本信息在一下两个文件中,也是我们要介绍的内容&…...

优优嗨聚集团:医保新政来袭,乙类OTC、保健品或将退出医保舞台,影响几何?

近日,国家医保局发布征求意见稿,拟将乙类OTC(非处方药)和保健品从医保目录中移除。这一政策一旦实施,无疑将对广大参保人员和相关企业产生深远影响。本文将为您详细解析这一政策可能带来的影响,以及如何应对…...

ubuntu安装pandora-gpt

因为pandora要3.7以上的版本,推荐MINICANDA, 1,在清华镜像网站上下载miniconda3安装的脚本文件 sudo wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh2,给.sh文件添加x执…...

PHP校验身份证号是否正确

用PHP语言实现校验身份证号的算法,供参考 /*** 校验身份证号是否正确* param $idcard 身份证号* return bool true正确*/public static function validateIDCard($idcard) {if(empty($idcard)){return false;}if (!preg_match(/(^\d{15}$)|(^\d{17}([0-9]|X|x)$)/,$…...

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

类和对象中(运算符重载补充) 类和对象下(初始化列表) 一.运算符重载补充:1.流插入运算符:1.考虑到隐含的参数指针:2.进行优化!2-1:解决办法:友元2-2&#xff…...

D. Doremy‘s Connecting Plan Codeforces Round 906 (Div. 2)

Problem - D - Codeforces 题目大意:有一个长度为n的数组a,同时有一个n个点的图,编号与数组的编号对应,初始没有边,如果当前连通块的中a[i]的和某一个点a[j]>连通块的一个点i*某一个点j*c,那么就可以连…...

Prometheus+Grafana

一、Prometheus 获取配置文件 docker run -d -p 9090:9090 --name prometheus prom/prometheusmkdir -p /app/prometheusdocker cp prometheus:/etc/prometheus/prometheus.yml /app/prometheus/prometheus.yml停止并删除旧的容器,重新启动 docker run -d --name…...

CoCa论文笔记

摘要 计算机视觉任务中,探索大规模预训练基础模型具有重要意义,因为这些模型可以可以极快地迁移到下游任务中。本文提出的CoCa(Contrastive Captioner),一个极简设计,结合对比损失和captioning损失预训练一…...

uniapp 微信小程ios端键盘弹起后导致页面无法滚动

项目业务逻辑和出现的问题整理 新增页面 用户可以主动添加输入文本框 添加多了就会导致当前页面出现滚动条,这就导致ios端滚动页面的时候去点击输入框键盘抬起再关闭的时候去滚动页面发现页面滚动不了(偶尔出现),经过多次测试发现是键盘抬起的时候 主动向上滑动 100%出现这种问…...

三维模型优势在哪里?如何提升产品自身商业价值?

不少企业、商家都开始使用VR全景展示来宣传推广自己的产品、活动等,虽说VR全景的沉浸式体验,相比于图片、视频而言有着无法取代的优势,但是也不能忘了VR全景另一个大优势,那就是丰富多样的互动性。3D模型展示让产品展示和体验不再…...

WheatA 轻量级生态数据软件

无论是在工作还是上学期间,大家想要做一个科研项目或者市场调查时,往往需要大量的数据用于分析总结,这时获得优质的数据就显得额外重要,数据的优劣往往决定了项目结果的好坏。数据来源的主要渠道主要有两种:无非是去数…...

2127. 参加会议的最多员工数 : 啥是内向/外向基环树(拓扑排序)

题目描述 这是 LeetCode 上的 「2127. 参加会议的最多员工数」 ,难度为 「困难」。 Tag : 「拓扑排序」、「内向基环树」、「图」 一个公司准备组织一场会议,邀请名单上有 n 位员工。 公司准备了一张圆形的桌子,可以坐下任意数目的员工。 员工…...

Qt入门日记1

目录 1.Qt简介和案例 2.第一个Qt程序 3.学会查看帮助文档 4.创建一个按钮 5.对象树简介 6.Qt的坐标系 7. 信号和槽 7.1自定义信号和槽 7.2信号连接信号 7.3拓展 7.4Qt4版本以前的connect 1.Qt简介和案例 Qt是一个跨平台的C图形用户界面应用程序框架(就是一个库吧…...

SpringBoot_第七章(读写分离)

这里列举了三种读写分离实现方案,分别是如下三种 1&#xff1a;MybatisPlus&#xff08;读写分离&#xff09; 1.1&#xff1a;首先创建三个数据库1主2从 表名是user表 1.2&#xff1a;代码实例 1&#xff1a;导入pom <!--MybatisPlus的jar 3.0基于jdk8--><depend…...

linux下mysql-8.2.0集群部署(python版本要在2.7以上)

目录 一、三台主机准备工作 1、mysql官方下载地址&#xff1a;https://dev.mysql.com/downloads/ 2、修改/etc/hosts 3、关闭防火墙 二、三台主机安装mysql-8.2.0 1、解压 2、下载相应配置 3、初始化mysql&#xff0c;启动myslq&#xff0c;设置开机自启 4、查看初始密…...

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1&#xff1a; (卷积层(可选)池化层) * N全连接层 *…...

Spring Boot面向切面加注解

一.项目pom.xml文件引入切面依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>二.定义注解类 import java.lang.annotation.*;/*** desc 错误日志注解* au…...

uniapp小程序授权统一处理

1.使用 1.将工具代码引入到utils中 const authorize (scope, isOne false, isMust false) > {if (!scope || !authorizeObj[scope]) {return console.error(请传输需要获取权限的 scope&#xff0c;详见,https://uniapp.dcloud.net.cn/api/other/authorize.html#scope-…...

光学仿真|优化汽车内部照明体验

当我们谈论优化人类感知的内部照明时&#xff0c;我们实际上指的是两个重点领域&#xff1a;安全性和驾驶员体验。如果内部照明可以提供尽可能最佳的体验&#xff0c;驾驶员则能够更好地应对颇具挑战性或意外的驾驶状况&#xff0c;并且减轻疲劳感。除了功能优势外&#xff0c;…...

OBS直播教程:OBS多路推流在哪里设置?如何安装?OBS多路推流教程

OBS直播教程&#xff1a;OBS多路推流在哪里设置&#xff1f;如何安装&#xff1f;OBS多路推流教程 具体如何下载&#xff1f;如何安装&#xff1f;如何使用&#xff1f;我写了一个保姆级教程&#xff0c;请往下看&#xff0c;步骤很详细的&#xff0c;你一定看得懂 第一步&…...

【Midjourney颗粒感控制白皮书】:基于1278组V6.1→V6.2渲染样本的统计建模,颗粒强度与--chaos关联性达r=0.93

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney颗粒感控制白皮书导论 颗粒感&#xff08;Grain&#xff09;是Midjourney图像生成中影响画面质感、胶片氛围与艺术真实性的关键隐式参数。它并非独立命令&#xff0c;而是深度耦合于 --sty…...

Burp Suite渗透测试工作流:从环境搭建到报告生成

1. 这不是“学个工具”&#xff0c;而是一套可复用的渗透工作流很多人点开“Burp Suite 入门”类教程&#xff0c;心里想的是&#xff1a;“装个插件、抓个包、改个参数&#xff0c;不就完事了&#xff1f;”——结果三天后连 repeater 怎么发 POST 请求都得翻笔记。我带过二十…...

Taotoken用量看板与成本管理,让团队模型开销一目了然

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板与成本管理&#xff0c;让团队模型开销一目了然 当团队开始将多个大语言模型应用于不同业务场景时&#xff0c;一…...

告别手动打字:87种语言视频字幕5分钟本地提取全攻略

告别手动打字&#xff1a;87种语言视频字幕5分钟本地提取全攻略 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字幕内容提…...

一多操作系统的生命体架构与当前主流开发语言的区别

这套架构与当前主流开发语言的区别&#xff0c;本质上就是**“造物主”与“工匠”**的区别。 目前的编程语言&#xff08;无论是 C、Java 还是 Python&#xff09;都是在教计算机**“怎么做”&#xff08;How&#xff09;&#xff0c;而一多 OS 的生物学构架是在告诉系统“要什…...

垂直领域搜索效果提升300%的关键路径,如何用DeepSeek精准捕获代码、论文、API三类技术语义?

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek垂直技术搜索的范式革命 传统通用搜索引擎在处理深度技术查询时&#xff0c;常面临语义漂移、上下文断裂与领域知识缺失三大瓶颈。DeepSeek垂直技术搜索通过融合代码理解、文档结构建模与多粒度技术实…...

对比直接使用官方API,通过Taotoken调用在成本控制上的感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用官方API&#xff0c;通过Taotoken调用在成本控制上的感受 1. 从分散采购到统一账单 在直接使用各家模型厂商的官方AP…...

5分钟完成Windows 11终极优化:开源神器Win11Debloat完全指南

5分钟完成Windows 11终极优化&#xff1a;开源神器Win11Debloat完全指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

告别抢票焦虑:大麦网双端自动抢票系统深度解析与实战指南

告别抢票焦虑&#xff1a;大麦网双端自动抢票系统深度解析与实战指南 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾在心仪演出的开票瞬间…...