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

这篇具有很好参考价值的文章主要介绍了python中使用websocket调用、获取、保存大模型API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

安装:

pip install websocket
pip install websocket-client


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

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

1.1 第一种使用create_connection链接

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

import time
from websocket import create_connection

url = 'wss://i.cg.net/wi/ws'
while True:  # 一直链接,直到连接上就退出循环
    time.sleep(2)
    try:
        ws = create_connection(url)
        print(ws)
        break
    except 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 websocket


def 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_open
    ws.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 json

import pandas as pd
import websocket

df = 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" errors
    df = df.append(msg, ignore_index=True)


def on_error(ws, error):
    print(error)


def on_close(ws):
    print("### closed ###")


def on_open(ws):
    return


if __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 = False

    def callback(self, result):
        with self.cond:
            self.queue.append(result)
            self.cond.notify()  # Wake up the generator.

    def __iter__(self):
        return self

    def __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 = True
            self.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.appid
    ws.domain = self.domain

    # Initialize the CallbackToIterator
    ws.iterator = CallbackToIterator()

    # Start the WebSocket connection in a separate thread
    thread.start_new_thread(
        ws.run_forever, (), {"sslopt": {"cert_reqs": ssl.CERT_NONE}}
    )

    # Iterate over the CallbackToIterator instance
    answer = ""
    total_tokens = 0
    for 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 += content
            if status == 2:
                ws.iterator.finish()  # Finish the iterator when the status is 2
                ws.close()
            yield answer, total_tokens

截取了部分代码,这里先是定义ws.iterator = CallbackToIterator()然后通过迭代从for message in ws.iterator:拿出数据,看上去也是可行的文章来源地址https://www.toymoban.com/news/detail-784636.html

到了这里,关于python中使用websocket调用、获取、保存大模型API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python使用 YOLO_NAS_S 模型进行目标检测并保存预测到的主体图片

    使用 YOLO_NAS_S 模型进行目标检测,并保存预测到的主体图片 安装包: 安装所需的库和框架。确保已经安装了 OpenCV、PyTorch 和 torchvision 下载 YOLO_NAS_S 模型的权重文件,并加载模型 进行图像预处理。对于每张输入图像,需要将其转换为模型可接受的格式,并进行归一化处理 使

    2024年02月10日
    浏览(49)
  • 如何申请文心一言&文心千帆大模型API调用资格、获取access_token,并使用SpringBoot接入文心一言API

    前段时间,百度文心一言文心千帆大模型开放了API调用的测试,接下来,教大家申请测试资格并接入文心千帆大模型的API。 右上角点击注册,内容如实填写并完成实名认证。  注册与认证详细内容不再赘述。 进入文心一言文心千帆大模型介绍页,点击申请体验 会进入填写问

    2024年02月15日
    浏览(47)
  • Python调用讯飞星火大模型v3 api接口使用教程

            这里我们可以获取星火免费赠送的200万个token使用和测试,获取方法如下:         打卡网站讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 ,登录用户点击免费使用                 点击购买首次应该会让创建一个应用, 如下图,按要求内容随意填写

    2024年02月05日
    浏览(48)
  • Stable Diffusion WebUI使用python调用WD 1.4标签器(tagger),获取并处理标签tag权重

    Stable Diffusion为秋叶大佬的绘世2.2.4 webUI api后台:http://127.0.0.1:7860/docs

    2024年02月12日
    浏览(38)
  • OpenCV python(一):安装 && 获取、显示、保存图像

    opencv-python是包含了基本使用函数的opencv库,而opencv-contrib-python则是包含了其他一些图像处理算法函数的opencv扩展库。 同时按下win和R键,并输入打开 cmd ,使用如下pip命令安装opencv-python。 要注意的是安装opencv-contrib-python需要与opencv-python版本保持一致,可在下述命令后面加上

    2024年02月05日
    浏览(35)
  • Python获取豆丁文档数据内容, 保存word文档

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8 pycharm 模块使用: requests -- pip install requests re base64 docx -- pip install python-docx 第三方模块安装方法: win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源) 准备工作 在

    2024年02月13日
    浏览(57)
  • 利用resnet50模型实现车牌识别(Python代码,.ipynb和.py两种文件保存都有,可以使用jupyter或pycharm运行)

    1.代码的主要流程如下: 导入所需的库和模块。 对数据集进行可视化,随机选择一些图像进行展示。 加载图像数据集,并将图像和标签存储在数组中。 对标签进行独热编码。 划分训练集和测试集。 使用图像数据增强技术增加训练数据的多样性。 定义一些评估指标的函数。

    2024年02月05日
    浏览(60)
  • Python — 获取电脑串口数据并保存到txt文件

    打开设备管理器,双击端口设备,点击端口设置,这里面的参数需要与下面代码中的参数保持一致。 注意事项: 1、设置匹配的波特率; 2、设置对应的串口号; 以下是一段Python代码,可以读取 Windows 电脑上串口的数据并将其保存到一个文本文件中: 请注意, 上述代码中的

    2024年02月11日
    浏览(43)
  • Python爬虫:Python+WebSocket获取体育实时赛事数据

    苦于websocket的能跑的案例太少了,还没开始就要什么逆向,一来就是拦路虎,太折磨人了,无意间看了一个类似的文章并学习更新了,感谢大佬,对websocket有了一个新的认识。 python版本: 目标网站:http://m.611.com/ 1、打开开发者工具(Ctrl+Shift+I)启用浏览器仿真器 2、触摸启用

    2023年04月13日
    浏览(49)
  • 【项目实战】如何使用Postman调用WebSocket程序

    项目中需要使用WebSocket进行通信,开发完了WebSocket接口,总得测试吧,以下是Postman调用WebSocket程序的方法。 最近都在用ApiFox做接口调用,但是目前版本的ApiFox(2.2.26)竟然不支持调用WebSocket程序。好吧,只能另外找一个支持调用的工具, 那就是强大的Postman啦。 Postman v8.5以

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包