当前位置: 首页 > 后端技术 > Python

OpenAi【ChatGPT】使用Python连接OpenAiAPi实现智能QQ机器人-学习详解

时间:2023-03-25 22:01:31 Python

大部分文章来自:https://lucent.blog我的博客地址:https://blog.ideaopen.cn最近很火的全文ChatGPT被很多人玩过。我们在Github上可以看到几个常见的逆向SDK包。我将以学习的方式写这篇文章。这些SDK不仅可以用来开发机器人,还可以自由开发你想要的效果。可以想象,它是一个帮助川川建立ChatGPT服务和会话的工具包。最近,OpenAi为他安装了CloudflareCDN服务。这个服务会拦截非真机请求,现在可以破解了。原作者以此寻找合适的逆向工程SDK。整个包里面的文件不多。喜欢Python的可以去看看。我不太了解Java。实践开始——实践篇第一段代码使用的revChatGPT依赖源码库:https://github.com/acheong08/...我们的Python版本需要>=3.8,然后pip直接升级到最新版本。以下代码的目的是与ChatGPT官方接口进行交互,注意安装chat-gpt-qbot.py中使用的依赖:"替换为你自己的token"}#创建一个服务,将当前的python文件当作一个服务(msg)['message']print(message)returnmessage@server.route('/chat',methods=['post'])defchatapi():requestJson=request.get_data()如果requestJson为None或requestJson==""orrequestJson=={}:resu={'code':1,'msg':'请求内容不能为空'}returnjson.dumps(resu,ensure_ascii=False)data=json.loads(requestJson)print(data)try:msg=chat(data['msg'])exceptExceptionaserror:print("Interfaceerror")resu={'code':1,'msg':'请求异常:'+str(错误)}返回json.dumps(resu,ensure_ascii=False)else:resu={'code':0,'data':msg}returnjson.dumps(resu,ensure_ascii=False)if__name__=='__main__':server.run(port=7777,host='0.0.0.0')我们导入我们的反向包fromrevChatGPT.revChatGPTimportChatbot这是反向包中的源码,用来初始化一个服务。我们只是在课堂上调用了这个包。然后创建一个抛出这个服务的接口,这样调用起来就方便了。我们只要运行上面的代码,就可以直接和7777端口的ChatGPT进行交互了。我们使用界面工具进行测试,结果如下图所示,可以看到界面正常,对话结果从ChatGPT获得。其中,消息体:{"msg":"Doyouknowmath?"}消息体是我们自定义的内容,可以添加字段来扩展接口的功能。在这个例子中,msg是我们演讲的内容,接口返回:{"code":0,"data":"是的,我会做数学,我是一个大语言模型,我可以回答各种问题问题,包括数学题。你有什么数学题我可以帮你解决吗?”}这个也是我们自己定义的。当code=0时,表示与ChatGPT交互成功。这个时候data就是ChatGPT反馈给我们的对话内容。而当code=1时,表示有错误,此时没有数据,但是在msg中返回错误信息。这里我们有一个可以与ChatGPT交互的界面。通过这个接口,我们可以和ChatGPT进行对话。现在我们需要一个输入框和一个对话按钮,你可以做一个网页来调用这个接口。很简单,这里不再赘述。我们真正想做的是一个QQ机器人。原理是让QQ机器人监听消息,通过我们的接口将消息转发给ChatGPT,再将ChatGPT返回的对话内容发送给QQ用户。这样一个会说话的机器人就可以了,下面会讲解具体的方法。练习继续——练习Part2上面我们实现了一个接口,用代码成功获取了ChatGPT的聊天内容。接下来我们会继续完善QQ机器人相关的逻辑,注意代码中的注释。为了更方便的对比优化后的代码(连接QQ机器人)和之前的代码,我开了一个本地对比,把没有改动的代码放了。机器人的交互逻辑你可能看不懂,因为我们用的是机器人框架,所以其实我们不应该限制自己的思路,我们可以尝试修改使用其他机器人框架,比如云在机器人,逻辑去自己完成。我们正在使用go-cqhttp。go-cqhttpHelpCenter那么,这个写法改,你得先了解这个go-cqhttp才能看懂,不过我们要灵活学习,只需要看懂idea,然后去官方文档找使用方法。至此,这些代码已经具备了处理好友请求、拉群请求、回复消息的功能。可以看到,相比上一篇文章,我们增加了很多代码,也增加了注释。当然,看不懂这些代码也没关系。大家可以根据我的文章修改相应的地方,直接使用即可。大家来原作者Q群玩,我也在里面:206867743练习继续-练习第三章前两篇我们解决了与ChatGPT通信的问题和QQ处理消息的问题。现在我们需要处理如何监听QQ消息。在反复的更新和遇到的问题中,原作者和逆向包的多位作者更新了很多内容。来看看原作者的更新记录:2022-12-1223:52增加一个Windows专用版本,只能在Windows电脑或服务器上使用,并且可以自动获取cloudflarecookies翻墙2022-12-1017:42更新内容增加账号密码支持,不用token直接使用账号密码即可2022-12-1000:23更新内容区分各个QQ私聊,每个私聊机器人都是独立的session来区分各个QQ群。每个QQ群都是一个独立的会话。增加回复字数限制,超过限制会转为图片回复(见配置文件)。如果要重置session,给机器人发送:reset设置session介绍监听QQ消息不需要我们写代码,因为市面上已经有很多开源的QQ机器人框架,这里我们使用go-cqhttp官方文档:go-cqhttp有兴趣的可以看官方文档,如果不想看直接看我的文章。前提条件你需要准备一个QQ账号,不要用自己的账号。需要准备一个OpenAi账号获取Token和一台服务器(可选,如果想让机器人7x24小时在线,请准备一个,1核1G就够了,国外服务器最好)注:OpenAi(ChatGPT)注册methodB站有一堆视频,随便参考一个。如果不知道如何注册,也可以看看我的博文:本文教你快速注册OpenAi(ChatGPT)(旧版)机器人搭建教程。我也写过:使用OpenGPT(ChatGPT)搭建QQ机器人但是!注意,前面说了,现在的ChatGPT有一个CF的CDN,会拦截人机交互请求。现在,除了获取OpenAi的session-token外,我们还需要获取cf_clearance。同时,我们还需要获取user-agent。去控制台的网络选项卡查看,如果是空白,就可以发送消息了。复制后写入配置文件,即py/config.js文件。目前原作者打包了两个版本,一个是linux的,麻烦的是cf的CDN交互token会在2H内过期,需要我们手动获取更新,比较麻烦。另一种是window版本,实现了CloudflareCookie的自动获取。此版本的配置指南仅适用于Windows,无论是WindowsPC还是服务器。仍然只支持token。系统会自动打开谷歌浏览器获取与克洛弗莱尔相关的cookies。首次运行时可能需要人工验证。请点击它。注意脚本只能打开谷歌浏览器,没有配置其他浏览器。其他说明在笔者最新版本的代码中,并增加了一些功能。做你自己的研究。那么很多逆向包作者也在想着一个完美的解决方案,我们慢慢等吧!那么请大家看一下这句话:最后写了一篇文章,基本上看了原作者的代码和逆向包的代码,我是个Python业余爱好者,但是我觉得有很多东西可以尝试一下,套用原理,当你了解了整个思路,那么你也可以自己写一个机器人,自己配置和设计交互逻辑。比如可以加一个Markdown渲染器+代码高亮,把长文本显示成图片(虽然已经存在)。又比如,绑定一个没有被屏蔽的域名,太长的文字直接生成一个临时链接,点击打开查看,就通过网页渲染出来,美观度高很多。小健厉害了如果你有兴趣,有时间,可以试试。下篇文章见。