BingGPT 国内中转
本项目的github地址
本项目最上层是提供一个使用BingGPT的web接口,仅供学习,如有侵权请联系作者。
预先准备:
- 一个可以访问bingGPT的外网服务器(可在tencent cloud 选购)
- 一个在已经注册new_bing_list的账号
使用:
- 使用requirements 下载相关包
- 将template.py中的相关模板数据替换成你自己的参数,详见下面的详细使用说明A.配置项
- 运行web_interface.py 访问HTTP API接口
详细使用说明:
配置
本项目所有的配置放在template.py中,详细参数如下
# 下面这五个常量 为访问过程中的常量 建议不更改
CREATE_CHAT_URL = "https://www.bing.com/turing/conversation/create"
UNAUTHORIZED = "UnauthorizedRequest"
END_SET = ""
WAKE_CONNECTION = '''{"type":6}'''
CHAT_URL = "wss://sydney.bing.com/sydney/ChatHub"
# 配置性常量,项目配置类更改, 可更改可无需更改
ROUND_LIMIT = 6 # 目前bing限制每轮对话只有6次, 可跟随微软最新政策自行更改, 需保证小于微软最新的限制数
ROUND_LIMIT_TIME = 300 # 每轮对话进行一个限时,五分钟后必定刷新为新对话,可自定义,如果没理解也可直接使用无需更改
GET_TRACE_ID = “https://www.bing.com/search?q=AI-Cha” # 微软的对话的traceId跟随每次搜索的EVent_ID, 此网址可更改为搜索任意内容的网址
CHAT_HEADER # websocket 浏览器的请求头,可不更改(我已删减为最少参数)
# 最好更改、不更改可能会出错
CONVERSATION_HEADER # 浏览器的请求头, 建议从自己的浏览器上直接复制粘贴即可
ARGUMENT_TEMPLATE # 需将参数中的location 和location hints 删除,删除后如下/更换为自己的参数
'''
ARGUMENT_TEMPLATE = '''
{
"arguments": [{
"source": "cib",
"optionsSets": ["nlu_direct_response_filter", "deepleo", "disable_emoji_spoken_text", "responsible_ai_policy_235", "enablemm", "dlislog", "dloffstream", "dv3sugg", "harmonyv3"],
"allowedMessageTypes": ["Chat", "InternalSearchQuery", "InternalSearchResult", "InternalLoaderMessage", "RenderCardRequest", "AdsQuery", "SemanticSerp"],
"sliceIds": ["0113dllog", "216dloffstream"],
"traceId": "63f86e96298d41c09aa2cfcac34d728a",
"isStartOfSession": false,
"message": {
"locale": "zh-CN",
"market": "zh-CN",
"region": "US",
"timestamp": "2023-02-24T16:00:24+08:00",
"author": "user",
"inputMethod": "Keyboard",
"text": "那这些招式都叫什么名字呢",
"messageType": "Chat"
},
"conversationSignature": "EM8oXvBUfD7Ipl/Ptl27ywhKlYMytXvP2g1O7Bfg/iw=",
"participant": {
"id": "914798459437187"
},
"conversationId": "51D|BingProd|B47307D0C3A2964D246D56BD2AB34C900EA1051628C7AB4DFDFF99DA8929E39F"
}],
"invocationId": "1",
"target": "chat",
"type": 4
}
'''
'''
更换方法:
-
CONVERSATION_HEADER:替换成你的浏览器访问bing.com 的请求头,具体操作
-
打开浏览器(Edge/ Firefox/Chrome)f12 打开开发工具, 选择网络,
-
访问https://www.bing.com 不要访问重定向回cn的网站,使用相关插件如X_Forward_For等设置,相关内容在Bilibili上有相关使用方法
-
抓取network中www.bing.com包, 单机, 直接复制整个请求头
-
-
ARGUMENT_TEMPLATE: 抓取bing 连天过程中的chathub 包,把请求的数据直接粘贴下来替换即可,不会的话直接替换为上面代码块中的参数
Mail:
本项目支持mail 提醒,当cookie过期或今日提问次数达到上限(笔者使用时是100句)或项目发生Exception时可以发送邮件提醒
mail 代码与配置均在mail_remain.py中,如不想使用或不会设置将文件中的USE_MAIL = False
使用前置需要发送邮箱开启smtp协议,详情请自行搜索具体邮件如qq或网易开启smtp协议的方法,不赘述
MAIL_CONF = {
"self_mail": "", # 开启smtp邮箱的邮箱号码
"self_smtp_key": "", # 申请smtp时给的key(有些邮箱可能为自己的密码)
"self_pop_key": "", # 在本项目暂时不用pop3,无需填写
"mail_type": {
"qq": "smtp.qq.com",
"126": "smtp.126.com",
},
"receiver": "" # 设定你想接收通知的邮箱
}
Cookie
bing的登录是使用Cookie, Cookie通上面抓取到的CONVERSATION_HEADER中的cookie值。但为保证cookie可由我们更方便的更新,将cookie的获取方式变为从本地读取文件,详见create_conversation.py 中的build cookie函数(都本地文件)
Cookie文件e.g. cookie.txt (自定义命名即可)
cookie: SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=A0802B17DEFE442D85B85A23E49377A5&dmnchg=1; …
运行原理
本项目考虑服务器性能和开发成本没有搞登录,取而代之的时请求中带上你预存的cookie文件名的转码,转码函数在web_interface中的file_name_trans_key函数。此函数在整个项目中没有调用,仅用于给使用者提供一个cookie文件名转码接口。
此转码算法为简单的字符串变化,如想换成更安全的算法直接替换key_trans_file函数即可
本项目没有Exception处理,取而代之的使用了error.py中的错误码描述问题,其中12是正常响应码,其他各码均需深入查看项目理解,不再赘述具体错误码
运行
- 下载python >= 3.8版本 运行pip install -r requirements.txt 下载相关包
- 完成上述配置阅读和编辑后, 运行 python web_interface.py运行
- 请求时访问 http://你的Ip:你的端口/key/cookie文件名转码?question=你的问题