撸chatgpt3.5 api backend-api 对接wxbot

功能是实现 web  转api 对接wxbot用,

直接上代码,

1.获取wss url

def get_register_websocket():# 请求头url = "https://chat.openai.com/backend-api/register-websocket"payload = {}headers = {'Authorization': 'Bearer eyJhbGxxxxxxxxxxxxxxxxxP89g','User-Agent': 'PostmanRuntime/7.36.3','Cookie':'__cf_bm=IH7tNQ0qLZkExG1S.9bR8UWdTyUJnvwLVW1hWWAZnjs-1709515826-1.0.1.1-NpxvrgB8g61jflrQqxxxxxxxxxx4w9.McqlfewwIgDg; __cflb=0H28vVfFxgNcKEuU2yRkHrTNV; _cfuvid=VBhrtMcQ4dxRz1xNPv4WWk1.c-1709461045475-0.0.1.1-604800000'}response = requests.request("POST", url, headers=headers, data=payload, allow_redirects=False)# 将文本内容转换为Python字典/列表try:json_data = json.loads(response.text)except json.JSONDecodeError:print("无法将响应内容解析为JSON格式")else:return json_data['wss_url']

返回信息

2.监听wss

 

import asyncio
import websockets
import base64
import json
import os
from urllib.parse import urlparse, parse_qs
import requests
os.environ["http_proxy"] = "http://127.0.0.1:1080"
os.environ["https_proxy"] = "http://127.0.0.1:1080"def get_register_websocket():# 请求头url = "https://chat.openai.com/backend-api/register-websocket"payload = {}headers = {'Authorization': 'Bearer eyJ***********9g','User-Agent': 'PostmanRuntime/7.36.3','Cookie':'__cf_bm=IH****9515826-1.0.1.1-NpxvrgB8g61jflrQqvaxwnF*******2M1bSfmWkqmJpuyy4w9.McqlfewwIgDg; __cflb=0H28vVfF4aAyg2*yRkHrTNV; _cfuvid=VBhrtMcQ4d***iIs1nWA1Rz1xNPv4WWk1.c-1709461045475-0.0.1.1-604800000'}response = requests.request("POST", url, headers=headers, data=payload, allow_redirects=False)# 将文本内容转换为Python字典/列表try:json_data = json.loads(response.text)except json.JSONDecodeError:print("无法将响应内容解析为JSON格式")else:return json_data['wss_url']async def listen_to_websocket(url, access_token):headers = {'Authorization': f'Bearer {access_token}'}final_message = ""  # 初始化空字符串用于累积信息async with websockets.connect(url, extra_headers=headers) as websocket:while True:try:message = await websocket.recv()# 解析消息为JSONmessage_data = json.loads(message)# 提取并解码body字段body_encoded = message_data.get("body", "")body_decoded = base64.b64decode(body_encoded).decode('utf-8')# 移除前缀"data: ",然后解析JSONmessage_data_json = json.loads(body_decoded[6:])# 提取partsparts = message_data_json["message"]["content"]["parts"][0]# 这里不再直接打印parts,而是更新final_messagefinal_message = parts  # 更新最后一条消息except websockets.exceptions.ConnectionClosedOK:print("Connection closed successfully.")#breakexcept Exception as e:print(f"Error occurred: {e}")break# 循环结束后,打印最后一次更新的信息print(final_message)if __name__ == "__main__":url = get_register_websocket()print(url)parsed_url = urlparse(get_register_websocket())query_params = parse_qs(parsed_url.query)# 提取 access_token 的值access_token_value = query_params['access_token'][0]asyncio.get_event_loop().run_until_complete(listen_to_websocket(get_register_websocket(), access_token_value))

3.发送问题给gpt

import requests
import json
import os
import uuid
import asyncio
import websockets
import base64
import json
import os
os.environ["http_proxy"] = "http://127.0.0.1:1080"
os.environ["https_proxy"] = "http://127.0.0.1:1080"
url = "https://chat.openai.com/backend-api/conversation"def askgpt(prompt, conversation_id=None):# 基本请求结构message_structure = {"id": str(uuid.uuid4()),"author": {"role": "user"},"content": {"content_type": "text", "parts": [prompt]},"metadata": {}}# 初始化请求payloadpayload = {"action": "next","messages": [message_structure],"model": "text-davinci-002-render-sha","timezone_offset_min": -480,"suggestions": [],"history_and_training_disabled": False,"conversation_mode": {"kind": "primary_assistant"},"force_paragen": False,"force_rate_limit": False}# 根据是否提供conversation_id调整payloadif conversation_id:payload["conversation_id"] = conversation_idpayload["parent_message_id"] = str(uuid.uuid4())  # 假设每次调用都有新的parent_message_id# 特定于长对话的字段payload["websocket_request_id"] = "5e3e28e1-5943-4fce-ae81-8cc0710e61c0"else:payload["parent_message_id"] = str(uuid.uuid4())  # 第一次对话的parent_message_id# 请求头headers = {'Authorization': 'Bearer eyJhb********************P89g','User-Agent': 'PostmanRuntime/7.36.3','Content-Type': 'application/json','Cookie':'__cf_bm=IH7tNQ0qLZkExG1S.9bR8UWdTyUJnvwLVW1hWWAZnjs-1709515826-1.0.1.1-NpxvrgB8g61jflr*********wIgDg; __cflb=0H28*V; _cfuvid=VBhrtMcQ4d******WWk1.c-1709461045475-0.0.1.1-604800000'}response = requests.post( url, headers=headers, json=payload, allow_redirects=False)print(response.text)conversation_id = None # conversation ID here #conversation_id = str(uuid.uuid4())
#askgpt("10+1",conversation_id)
askgpt("你的模型","4af92768-50c4-425b-b63e-35e3eaede0ce")

在监听窗口可以获取到gpt3.5回答的广播信息 

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

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

相关文章

docker的网络配置

文章目录 1、网络模式1.1、bridge模式(默认模式)1.2、host模式 2、bridge模式3、自定义网络 1、网络模式 Docker在创建容器时有四种网络模式:bridge/host/container/none,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用…

案例介绍:汽车维修系统的信息抽取技术与数据治理应用(开源)

一、引言 在当今汽车产业的快速发展中,软件已经成为提升车辆性能、安全性和用户体验的关键因素。从车载操作系统到智能驾驶辅助系统,软件技术的进步正在重塑我们对汽车的传统认知。我有幸参与了一个创新项目,该项目专注于开发和集成先进的汽…

关于 svg path 路径坐标 精度误差问题

<svg width"2838.739990" height"2482.179932" viewBox"0 0 2838.74 2482.18" fill"none" xmlns"http://www.w3.org/2000/svg" xmlns:xlink"http://www.w3.org/1999/xlink"><path id"矢量 12"…

原理篇-- 定时任务xxl-job-服务端(admin)项目启动过程--JobRegistryHelper 初始化 (4)

文章目录 前言一、JobRegistryHelper 作用&#xff1a;二、JobRegistryHelper 源码介绍&#xff1a;2.1 初始化start() 方法&#xff1a;2.1.1 registryOrRemoveThreadPool 执行器注册和移除&#xff1a;2.1.2 registryMonitorThread 执行器注册监控线程&#xff1a; 2.2 toSto…

折线图实现柱状阴影背景的demo

这个是一个由官网的基础折线图实现的流程&#xff0c;将涉及到的知识点附上个人浅薄的见解&#xff0c;源码在最后&#xff0c;需要的可自取。 折线图 成果展示代码注解参数backgroundColordataZoomlegendtitlexAxisyAxisgridseries 源码 成果展示 官网的基础折线图&#xff…

猫耳语音下载(mediadown)

猫耳语音下载(mediadown) 一、介绍 猫耳语音下载,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。 二、下载地址 下载:猫耳语音下载(mediadown) 百度网盘下载:猫耳语音下载(mediadown) 三、安装教程 将下载的文件解压到D:\xibinhui,D:\Pr…

Unity RectTransform·屏幕坐标转换

RectTransform转屏幕坐标 分两种情况 Canvas渲染模式为Overlay时&#xff0c;使用此方式 public Rect GetScreenCoordinatesOfCorners(RectTransform rt) {var worldCorners new Vector3[4];rt.GetWorldCorners(worldCorners);var result new Rect(worldCorners[0].x,world…

Manomotion 实现AR手势互动-解决手势无效的问题

之前就玩过 Manomotion &#xff0c;现在有新需求&#xff0c;重新接入发现不能用了&#xff0c;不管什么办法&#xff0c;都识别不了手势&#xff0c;我记得当初是直接调用就可以的。 经过研究发现&#xff0c;新版本SDK改了写法。下边就写一下新版本的调用&#xff0c;并且实…

好书推荐 《Excel函数与公式应用大全for Excel 365 Excel 2021》

一.基本介绍 1.什么是 Excel? Excel 是微软公司开发的一款电子表格软件&#xff0c;是 Microsoft Office 套件的一部分。它被广泛用于数据处理、分析、可视化和管理等方面。Excel 提供了丰富的功能&#xff0c;使用户能够创建、编辑、存储和分享各种类型的数据表格。 2.Exc…

Golang Channel 详细原理和使用技巧

1.简介 Channel(一般简写为 chan) 管道提供了一种机制:它在两个并发执行的协程之间进行同步&#xff0c;并通过传递与该管道元素类型相符的值来进行通信,它是Golang在语言层面提供的goroutine间的通信方式.通过Channel在不同的 goroutine中交换数据&#xff0c;在goroutine之间…

代码随想录Day66 | 图的DFS与BFS

代码随想录Day66 | 图的DFS与BFS DFS797.所有可能的路径无向图和有向图的处理 BFS200.岛屿数量 DFS 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 状态 本质上就是回溯算法。 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本节点所连接的…

Qt textBrowser的Html相关

Qt textBrowser的Html相关 Qt textBrowser的Html相关 Qt textBrowser的Html相关 一开始就想要一个简单的功能&#xff0c;点一下按钮&#xff0c;添加的文字居中显示&#xff0c;再点一下按钮&#xff0c;添加的文字变更颜色居右显示。 但是&#xff1a; ui->textEdit-&g…

WordPress免费的远程图片本地化下载插件nicen-localize-image

nicen-localize-image&#xff08;可在wordpress插件市场搜索下载&#xff09;&#xff0c;是一款用于本地化文章外部图片的插件&#xff0c;支持如下功能&#xff1a; 文章发布前通过编辑器插件本地化 文章手动发布时自动本地化 文章定时发布时自动本地化 针对已发布的文章…

基于机器学习的密码强度检测

项目简介 利用机器学习对提供的数据集预测用户输入的密码是否为弱密码。 原始数据集只包含关于弱密码的信息&#xff0c;并没有包含强密码的数据或分类器&#xff0c;这意味着模型无法学习到强密码的规律!!! 我之所以这样设计这个示例&#xff0c;其目的是为了向你展示模型的…

AI蠕虫病毒威胁升级,揭示AI安全新危机

一组研究人员成功研发出首个能够通过电子邮件客户端窃取数据、传播恶意软件以及向他人发送垃圾邮件的AI蠕虫&#xff0c;并在使用流行的大规模语言模型&#xff08;LLMs&#xff09;的测试环境中展示了其按设计功能运作的能力。基于他们的研究成果&#xff0c;研究人员向生成式…

用pyinstaller打包python代码为exe可执行文件并在其他电脑运行的方法

本文介绍基于Python语言中的pyinstaller模块&#xff0c;将写好的.py格式的Python代码及其所用到的所有第三方库打包&#xff0c;生成.exe格式的可执行文件&#xff0c;从而方便地在其他环境、其他电脑中直接执行这一可执行文件的方法。 有时&#xff0c;我们希望将自己电脑上的…

基于springboot的助农管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1研究背…

【网站项目】219一中体育馆管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

pywin32,一个超强的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - pywin32。 Github地址&#xff1a;https://github.com/mhammond/pywin32 在Python的世界里&#xff0c;有许多优秀的第三方库可以帮助开发者更轻松地处理各种任务。其中&a…

【性能】后台与黑屏

目录 现象观察 调整应用的电池策略 现象观察 切换到后台&#xff0c; 一个心跳期间&#xff0c;就会发close socket 直接黑屏&#xff0c;没有收到任何消息&#xff0c;直接到onclose,然后有离线触发 也到时间。 调整应用的电池策略 修改成“无限制”后&#xff0c;就不会断…