本项目的github地址
本项目最上层是提供一个使用BingGPT的web接口,仅供学习,如有侵权请联系作者。
本项目所有的配置放在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"
# 2023.03.02新增
CREATIVE = "cdxtone=Creative"
BALANCE = "cdxtone=Balanced"
PRECISE = "cdxtone=Precise"
REQUEST_DICT = {"creative": CREATIVE, "balance": BALANCE, "precise": PRECISE}
DEFAULT_MODE = BALANCE
# 支持bing最新出的创造力模式 平衡模式和精确模式
# 配置性常量,项目配置类更改, 可更改可无需更改
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 的请求头,具体操作
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是正常响应码,其他各码均需深入查看项目理解,不再赘述具体错误码