撸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.hqwc.cn/news/509258.html

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

相关文章

扑克牌翻牌记忆小游戏源码

源码由HTMLCSSJS组成,双击html文件可以本地运行效果,也可以上传到服务器里面 效果预览 下载地址 https://www.qqmu.com/2296.html

《Trustzone/TEE/安全-实践版》介绍

第一章:课程说明和准备 课程介绍和说明 资料准备 为什么使用qemu_v8环境? 为什么选择香橙派开发板? optee qemu_v8环境展示 香橙派optee环境展示 第二章:Qemu环境搭建 ubuntu20.04的安装(virtualboxubuntu20.04) 搭建optee qem…

本地如何配置支付宝模拟支付场景并结合内网穿透实现公网环境调试开发?

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候,往往沙箱环境部署在本地,局限性大,在沙箱环境…

spring cloud 之 Netflix Eureka

1、Eureka 简介 Eureka是Spring Cloud Netflix 微服务套件中的一个服务发现组件,本质上是一个基于REST的服务,主要用于AWS云来定位服务以实现中间层服务的负载均衡和故障转移,它的设计理念就是“注册中心”。 你可以认为它是一个存储服务地址信息的大本…

[Gitlab CI] 自动取消旧流水线

提交Commit触发新流水线 当某一分支开启Merge Request后只要提交一次commit就会自动创建一个新的流水线,此时之前的Pipeline不会被取消,经过下面的设置后可以实现自动取消旧流水线的功能。 ❗️通过提交(commit)触发的同一分支流…

B端:系统是否高端大气,全看工作台页面(海量案例图)

hello,我是贝格前端工场,之前提过一个B端界面优化的办法,其中一条就是要重视工作台页面,后来在多次的项目实践中验证了这个方法,本文讲清楚为什么工作台页面决定了整个系统的风格基调,欢迎评论交流&#xf…

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目,然后发现好几个页面都是列表页,重复写table和column也是觉得累,学习的项目列表页不算多,要是公司项目就不一样了,所以就想着自己封装一个table组件,免去大量重复工作和co…

【图像版权】论文阅读:CRMW 图像隐写术+压缩算法

不可见水印 前言背景介绍ai大模型水印生成产物不可见水印CRMW 在保护深度神经网络模型知识产权方面与现有防御机制有何不同?使用图像隐写术和压缩算法为神经网络模型生成水印数据集有哪些优势?特征一致性训练如何发挥作用,将水印数据集嵌入到…

winform 输出运行设备的mac地址

winform定制一个代码段 输出运行设备的mac码此方法获取的是运行设备上的物理网卡的MAC地址,并不包括虚拟网卡或无线网卡的MAC地址。当设备具有多个网卡时,它只返回第一个正常运行的网卡的MAC地址。如果未找到任何网卡,则返回"未找到MAC地…

python钉钉机器人加签

代码 import requests import json import time import hmac import hashlib import base64 import urllib.parsedef get_url(access_token, secret):t,s get_sign(secret)webhook_url fhttps://oapi.dingtalk.com/robot/send?access_token{access_token}&timestamp{t}…

OneDrive教育版迁移记录

背景 微软再次削减教育版优惠的OneDrive容量,从原先的5T直接砍到100G/人,同时对每个学校保留总共100TB的共享存储容量。 右键Onedrive图标——设置——存储容量可见 100GB对于重度用户显然是不够使用的,为此笔者改换Microsoft Office365家庭…

爬虫实战——麻省理工学院新闻

文章目录 发现宝藏一、 目标二、 浅析三、获取所有模块四、请求处理模块、版面、文章1. 分析切换页面的参数传递2. 获取共有多少页标签并遍历版面3.解析版面并保存版面信息4. 解析文章列表和文章5. 清洗文章6. 保存文章图片 五、完整代码六、效果展示 发现宝藏 前些天发现了一…