OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

news2024/12/25 23:49:09

文章大部分来自:https://lucent.blog

原文博客地址:https://blog.ideaopen.cn

最近火热全文的ChatGPT,被很多人玩出了花,我们在Github上可以看到几个常见的逆向SDK包,这一篇我将以学习的方式来写这一篇文章。

这些SDK不仅仅可以用于开发机器人,还可以自由的开发你所想要的效果,如你所想,他是一个工具包,帮你chuanchuan构建一个ChatGPT服务和会话。

最近OpenAi给他套上了一个CloudflareCDN服务,这个服务会去拦截非真机请求,现在已经可以破解了。

寻找合适的逆向SDK

原作者用的是这个。

整个包的文件并不是很多,喜欢Python的可以去看看,我这个Java看不太懂。

实践开始-实践篇第一

代码中使用到的revChatGPT依赖源码库:
https://github.com/acheong08/ChatGPT

我们的Python版本,需要>=3.8,然后pip直接升级到最新版本。

下面代码的目的是与ChatGPT官方接口进行交互,注意安装一下里面用到的依赖
chat-gpt-qbot.py:

import flask, json
from flask import request
from revChatGPT.revChatGPT import Chatbot
config = {
    "session_token": "换成你自己的token"
}
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)
chatbot = Chatbot(config, conversation_id=None)
def chat(msg):
    message = chatbot.get_chat_response(msg)['message']
    print(message)
    return message
@server.route('/chat', methods=['post'])
def chatapi():
    requestJson = request.get_data()
    if requestJson is None or requestJson == "" or requestJson == {}:
        resu = {'code': 1, 'msg': '请求内容不能为空'}
        return json.dumps(resu, ensure_ascii=False)
    data = json.loads(requestJson)
    print(data)
    try:
        msg = chat(data['msg'])
    except Exception as error:
        print("接口报错")
        resu = {'code': 1, 'msg': '请求异常: ' + str(error)}
        return json.dumps(resu, ensure_ascii=False)
    else:
        resu = {'code': 0, 'data': msg}
        return json.dumps(resu, ensure_ascii=False)
if __name__ == '__main__':
    server.run(port=7777, host='0.0.0.0')

我们导入我们的逆向包。

from revChatGPT.revChatGPT import Chatbot

这是逆向包里面的源码,用于初始化一个服务,我们刚刚的类中调用了这个包。

然后去创建抛出这个服务的接口,方便被调用。

我们只要运行上面的代码就可以在7777端口直接与ChatGPT进行交互了。
我们使用接口工具测试一下,结果如下图,可以看到,接口正常工作并从ChatGPT得到了对话结果。

其中消息体:

{
  "msg": "你会数学吗"
}

消息体是我们自定义的内容,你可以自己增加字段对接口进行功能扩展
本例子中的msg就是我们的发言内容
而接口返回的:

{
    "code": 0, 
    "data": "是的,我会数学。我是一个大型语言模型,我可以回答各种问题,包括数学问题。你有什么数学问题需要我帮助你解决吗?"
}

这也是我们自己定义的,当code=0时代表与ChatGPT交互成功,此时dataChatGPT反馈给我们的对话内容。而当code=1时说明出现了错误,此时没有data,但在msg中返回了错误信息。

到这里我们就拥有了一个可以和ChatGPT交互到接口,通过这个接口,我们就能与ChatGPT进行对话

既然进行对话,那就需要一个输入框和一个按钮,你可以做一个网页来调用这个接口,这很简单,我们不在这里赘述了。

我们真正要做的是一个QQ机器人,其原理就是让QQ机器人监听到消息,并通过我们的接口把消息转发给ChatGPT,然后再把ChatGPT返回的对话内容发送给QQ用户,这样一个可以对话的机器人就做好了,具体做法,下文继续讲解。

实践继续-实践篇第二

上文我们实现了一个接口,用代码成功获取到了ChatGPT的对话内容,下面我们将继续完善QQ机器人相关逻辑,注意看代码中的注释。

为了更方便的将优化后(接入QQ机器人)的代码,与之前的代码比较,我开启一个本地比较,并收起了没有变动的代码。

机器人的交互实现逻辑,这个你可能会看不懂,因为我们是使用了一个机器人框架,那其实我们不要局限自己的思想,我们可以尝试自己修改使用其他机器人框架,比如云仔机器人,逻辑去自己实现。

我们使用的是go-cqhttp

go-cqhttp帮助中心

所以说,这一写更改,你得去了解这个go-cqhttp你才能看懂,不过我们要灵活学习,我们只需要了解思路便可,然后去官方文档找使用方法。

此时,这些代码已经拥有了处理好友请求、拉群请求、回复消息的功能。

可以看到,相对于上个文章,我们增加了很多代码,并且都加了注释

当然,这些代码看不懂没关系,可以照着我的文章改一下对应的地方,直接用。

大家来原创作者Q群玩儿,我也在里面:206867743

实践继续-实践篇第三

前两个文章我们已经解决了和ChatGPT通信的问题和QQ处理消息的问题,现在我们就需要处理如何监听QQ消息了。

在一次次的更新和遇到的问题中,原创作者和逆向包的很多作者都更新了很多内容,我们看看原创作者的更新记录:

2022-12-12 23:52
  • 增加一个Windows专用版本,只能在Windows电脑或服务器上使用,可以自动获取cloudflare Cookie
2022-12-12 12:38 更新内容
  • 增加CloudFlare配置,更新依赖,暂不支持账号密码,暂不知道CloudFlare配置多久需要更换一次,现在好像必须要翻墙了
2022-12-10 17:42 更新内容
  • 增加账号密码支持,可以不使用token,直接使用账号密码
2022-12-10 00:23 更新内容
  • 将每个QQ私聊区分,每个人私聊机器人都是一个独立的会话
  • 将每个QQ群区分,每个QQ群是一个独立的会话
  • 增加回复字数限制,超过限制转换成图片回复(见配置文件)
  • 如果想要重置会话,对机器人发送:重置会话

简介

监听QQ消息并不需要我们写代码,因为市面上已经有很多开源QQ机器人框架,在这里我们使用go-cqhttp
官方文档: go-cqhttp
如果您感兴趣的话,可以阅读一下官方文档,如果不想看,直接看我的文章即可。

前提条件

  • 您需要准备一个QQ号,不要使用自己大号
  • 您需要准备一个OpenAi的账号,用来获取Token
  • 一台服务器(可选,如果您想让机器人7x24小时在线的话,请准备一台,1核1G足以,外服最好)

注意:OpenAi(ChatGPT)的注册方式B站有一堆视频,随便参考一个就行。

不会注册也可以看看我博客的文章:一文教你快速注册OpenAi(ChatGPT)

(旧版本)机器人搭建教程我也是写过了:使用OpenGPT(ChatGPT)搭建 QQ 机器人

但是!注意,先前说过,现在的ChatGPT套了一个CFCDN,会拦截人机交互请求。

那我们现在,除了需要获取OpenAisession-token,还需要获取cf_clearance

同时,我们还需要获取user-agent

前往控制台的网络标签里面查看,如果是空白,你发一句消息就可以。

复制之后写到配置文件中,也就是py/config.js文件。

目前原创作者打包了两个版本,一个Linux的,麻烦在于cfCDN交互令牌会在2H内失效,我们需要手动获取并更新,麻烦。

另一个是window版本,已经实现自动获取CloudflareCookie

配置指南

这个版本只能在Windows上使用,Windows电脑或服务器都行。

依然只支持token。

系统会自动打开谷歌浏览器获取Cloufflare相关Cookie,第一次运行时可能需要手动验证,请注意点一下。

注意,脚本它只能打开Google浏览器,没配置其他浏览器。

其他描述

那在作者最新版本的代码里面,也是新增了一部分功能。

自行研究。

然后很多逆向包作者也在想一个完美解决的办法,我们慢慢等待吧!

然后,请看看这句话:

尾述

写着一篇,我基本上是去看原创作者的代码和逆向包的代码,我是一个业余的Python,但是我觉得,很多东西是可以去尝试的,通原理而致用,当你学会整个思路,那你也可以自己写一个自己的机器人,自己去配置去设计交互逻辑。

比如可以新增一个Markdown渲染器+代码高亮,将长文本以图片方式展示(虽然已经存在了),又比如,绑定一个不被拦截的域名,过长文本直接生成一个临时链接,点开查看,刚好通过网页渲染后,美观度高很多。

小简绝得,有兴趣有时间,都可以试试,下篇再见。

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

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

相关文章

NeurIPS 2022 | 浙大与SEA AI Lab提出高表现力可泛化语音合成

语音合成旨在根据文本合成特定说话人的语音。先进语音合成模型展示了强大的生成能力,无论是生成高水平的细节还是其生成的多样性,都让人印象深刻。个性化语音生成需求的增加对语音合成模型提出了挑战,尤其是在域外(OOD; Out-Of-Di…

[附源码]Node.js计算机毕业设计大悦城电竞赛事管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

CV-对比学习-模型:MoCo/SimCLR/BYOL/SimSiam

很多大佬认为,深度学习的本质就是做两件事情:Representation Learning(表示学习)和 Inductive Bias Learning(归纳偏好学习)。在表示学习方面,如果直接对语义进行监督学习,虽然表现很…

海泰隐私计算能力助力实现数据“可用不可见”

一、 数据孤岛阻碍数据发展 当今时代,信息技术日新月异,人类文明正经历从信息科技(IT)时代向数据科技(DT)时代的飞速变革。数据作为基础性战略资源的地位日益凸显。然而,数据孤岛问题突出。出于对数据安全的传统保护&…

单商户商城系统功能拆解45—应用中心—积分商城

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

pikachu靶场-2 跨站脚本漏洞(xss)

跨站脚本漏洞(xss) Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; XSS漏洞一直被评估…

Kubernetes二进制多节点集群部署

多Maser集群架构的了解 Kubernetes作为容器集群系统,通过健康检查重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失效状态自动在其他Node拉起Pod,实现了应用层的高可用…

羧基聚乙二醇叠氮 COOH-PEG-N3/Azide的结构式

叠氮化物与炔烃之间的反应能够使羧酸PEG有效缀合到目标分子或材料上,并且产率很高。 所得羧酸可与胺,羟基和其他基团反应。 叠氮化物和羧酸之间的PEG接头具有良好的水溶性,较小的位阻和增强的稳定性。 产品名称 羧基聚乙二醇叠氮 COOH-PEG…

css div等块元素设置display:inline-block存在间隙问题

我们给块元素例如div设置display:inline-block&#xff0c;会发现元素之间存在空隙。如下图。 <div class"contain"><div id"box1"></div><div id"box2"></div><div id"box3"></div> <…

Simulink自动化-Matlab脚本自动生成Autosar RTE S/R接口及mapping

文章目录前言设计Excel模板Input/Output属性Sender/Receiver属性Matlab脚本自动创建Input/Output接口自动创建RTE Sender/Receiver port实现效果Excel设置运行新建Input与Output运行创建RTE Port及Mapping总结前言 在之前的一篇文章中&#xff0c;介绍了Autosar Parameter Por…

内网隧道各类协议方法

正+反(了解即可) 正向代理:已控服务器监听端口,通过这个端口形成一个正向的隧道,由代理机器代替主机去访问内网目标。但是内网入口一般处于DMZ区域有防火墙拦截,无法直接进入内网环境。 反向代理:由内网主机主动交出权限到代理机器,然后本地去连接形成反向代理。例如…

吉林优美姿文化:抖音账号怎么做垂直?

其实现在抖音限流看起来是一件很平常的事情&#xff0c;那么在我们抖音运营中&#xff0c;如果出现一些不合规的行为或者怎么样的&#xff0c;都会导致限流&#xff0c;严重的可能还会被限流&#xff0c;那么这时候怎么办呢&#xff1f;跟着吉林优美姿小编来一起看看吧&#xf…

MySql索引简单知识点及事务的分析

目录 索引 什么是MySql索引&#xff1f; 索引的易忽略点 基本操作&#xff1a; 查看索引 创建索引 删除索引 索引在MySql中的数据结构 事务 使用方法 事务的核心特性 隔离性 隔离的常见问题 ***MySql四个隔离级别 &#x1f4cc;————本章重点————&#x1f…

微软艰难的2022安全年回顾

©网络研究院 这些是管理员需要了解的 2022 年以来最重要的漏洞和修复。 我们即将结束 2022 年的安全年。只有时间会告诉我们 2023 年会发生什么&#xff0c;但对于 Microsoft 网络的 IT 和安全管理员来说&#xff0c;2022 年是混合攻击、本地 Exchange Server 缺陷和需要…

【Python】向量叉积和凸包 | 引射线法 | 葛立恒扫描法

猛戳&#xff01;跟哥们一起玩蛇啊 &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a;这个系列似乎反响不错&#xff0c; 所以我继续水下去 &#xff08;bushi&#xff09;。本篇博客是关于经典的 Cross Product and Convex Hull &#xff08;向量叉…

最大正方形问题

最大正方形问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;最大正方形问题 CSDN&#xff1a;最大正方形问题 题目描述 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 题目链接见&am…

数字式压力闭环放大器|比例溢流阀闭环控制器

控制不同带压力反馈信号输入&#xff08;0~10V或4~20mA&#xff09;比例压力阀、比例溢流阀、比例节流阀、比例插装阀&#xff0c;带位置反馈信号输入比例流量阀等。斜坡上升和下降时间独立调整(0.05~10 s)。10V参考电压输出外部电位器控制。最大驱动电流 0.4~3A&#xff0c;最…

4个月高效学习,我是如何从手工测试做到测试开发的?

向上的路很难走&#xff0c;但一旦踏上去&#xff0c;每一步都算数&#xff01; 为什么必须转型为测试开发&#xff1f; 不懂开发的手工测试是新时代“文盲” 在移动互联网和大数据时代&#xff0c;为满足市场和业务需求&#xff0c;互联网应用既要实现产品功能快速迭代&…

java字符串中常用的10个方法

文章目录前言一、字符串的构造1.使用常量进行直接赋值构造2.使用new String对象3.使用字符数组进行构造二、字符串的比较1.比较2.equals方法比较3. compareTo方法比较4.compareToIgnoreCase(String str)方法三、字符串的查找1.charAt(int index)方法2.indexOf(String str)方法四…

网络流量分析帮助企业提升OA应用性能(二)

需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 信息部已对企业领导定义了独立的组&#xff0c;本次要主动分析领导们的使用体验快慢。如果OA系统…