[Nonebot2]chatgpt

前言

今天我要教大家的是 如何实现nonebot之Gpt接入

准备

1.获取开发者key

获取key的地址:这里你们自行了解,有些原因不能展示

如图所示,我已经创建好一个key了,大家也可以点击Create new secret key按钮来创建一个新的key,注意,千万不要泄露自己的key哦

开始

1.找接口

之前我原本是想要教大家去对接官方接口的,但是想到大部分同学可能不会“魔法”,如果没有“魔法”体验感会大打折扣,所以我们就要借助其他大佬帮助我们完成这个过程

在网上冲浪的时候,我发现了这个GPT3.5 (cutim.top)

可以看到这个网站是需要我们提供key的,我这里浅浅解释一下本次程序的主要思路

整体思路大概就是这样

到这里,大家应该都有key了吧,我们打开刚才的网站,按F12打开开发者调试工具

在这里我们可以看到请求的api地址: http://gpt.cutim.top/question

我们可以看到他是post请求

那么我们打开源分析,不难看出数据就是json格式,且有两个参数,一个key,一个question

既然我们已经找到接口了,那么下一步就是重头戏——写代码了

2.快乐的敲代码

from nonebot import on_keyword
from nonebot.typing import T_State
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Bot, Message
import httpx
import json'''
实现qq群聊调用chatgpt
write by 萌新源 at 2023/3/5
'''
chatgpt = on_keyword({"#gpt"})@chatgpt.handle()
async def yy(bot: Bot, event: GroupMessageEvent, state: T_State):get_msg = str(event.message).strip()  # 获取用户发送的链接user_question = get_msg.strip("#gpt")msg_id = event.message_id  # 获取消息iduser_id = event.user_idfile_name = "chatgpt.json"try:with open(file_name, "r", encoding="UTF-8") as f:person_data = json.load(f)  # 读取数据try:user_data = person_data[str(user_id)]except KeyError:user_data = ""form_data = {'key': '填写你自己的key','question': user_data + f"----{user_question}"}async with httpx.AsyncClient() as client:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}url = f"http://gpt.cutim.top/question"data = await client.post(url=url, headers=headers, json=form_data, timeout=None)  # 请求数据response = data.json()try:# 规避内容获取失败res_ai = str(response['content'])try:user_data = person_data[str(user_id)] + f"----{user_question}"question = user_data + f'\n{res_ai}'person_data[str(user_id)] = questionexcept KeyError:person_data[str(user_id)] = f'----{user_question}'with open(file_name, "w", encoding="UTF-8") as f:json.dump(person_data, f, ensure_ascii=False)ai_res = str(response['content']).strip("\n")except KeyError:# 重置会话person_data[user_id] = ""with open(file_name, "w", encoding="UTF-8") as f:json.dump(person_data, f, ensure_ascii=False)ai_res = '很抱歉,内容获取失败,可能是您的会话历史已达到上限,请更换您的提问方式或再试一次'except FileNotFoundError:with open(file_name, "w", encoding="UTF-8") as f:json.dump({user_id: f'----{user_question}'}, f, ensure_ascii=False)form_data = {'key': '填写你自己的key', 'question': user_question}async with httpx.AsyncClient() as client:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}url = f"http://gpt.cutim.top/question"data = await client.post(url=url, headers=headers, json=form_data, timeout=None)  # 请求数据response = data.json()ai_res = str(response['content']).strip("\n")res = f"[CQ:reply,id={msg_id}]{ai_res}"await chatgpt.send(Message(res))

这里我也是直接上全部代码

接下来我挑一些我认为比较有研究价值的代码出来讲讲

    try:with open(file_name, "r", encoding="UTF-8") as f: #①person_data = json.load(f)  # 读取数据try:user_data = person_data[str(user_id)]except KeyError:user_data = ""form_data = {'key': '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','question': user_data + f"----{user_question}"}

比如这一段,在①这个地方,我读取了一个用来储存用户会话的json文件,那么可能有人会问了,为什么要读取这样一个文件呢?或者说这个文件有什么作用?

其实在早期版本没有会话文件的时候,经过群友的测试,我发现了一个小问题,那就是对话不连续,比如说我要跟gpt玩成语接龙,但是会话是不连续的呀,于是我就找到了用一个文件储存用户会话的方法,文件结构大概是这样

就是把每个人的会话数据分别储存起来,这样对话就有了连续性

连续性问题是解决了,但是又产生了一个新的问题——会话太长,gpt不知道怎么回答或者说是无法正常获取内容,那又怎么办,于是我想到了下面的方法来解决这个问题

try:# 规避内容获取失败res_ai = str(response['content'])try:user_data = person_data[str(user_id)] + f"----{user_question}"question = user_data + f'\n{res_ai}'person_data[str(user_id)] = questionexcept KeyError:person_data[str(user_id)] = f'----{user_question}'with open(file_name, "w", encoding="UTF-8") as f:json.dump(person_data, f, ensure_ascii=False)ai_res = str(response['content']).strip("\n")
except KeyError:# 重置会话person_data[user_id] = ""with open(file_name, "w", encoding="UTF-8") as f:json.dump(person_data, f, ensure_ascii=False)ai_res = '很抱歉,内容获取失败,可能是您的会话历史已达到上限,请更换您的提问方式或再试一次'

可以看到,我这里写了个try语句,当获取内容失败的时候就把会话清空,并且返回一个提示信息给用户,好让用户重新提问

以上就是我认为需要讲解的代码部分了,相信大家是可以看懂我的思路的,哦对,记得替换key

结尾

恭喜大家,看完本文章相信大家已经能够接入gpt了,那么如果本文章对您有帮助,能否留下您的精彩评论和点赞?要不再来个关注(不要脸)?谢谢啦

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

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

相关文章

冰橙GPT chatGPT开放接口使用说明

冰橙GPT稳定提供API接口服务 定时有人进行问题排查处理 1小时内问题响应 接入了腾讯云的内容安全检测 有任何疑问请加入QQ交流群:310872519 1.请求地址:https://gpt.bcwhkj.cn/api/v2.Gptliu/search 2.请求方式: POST 3.bo…

QQ接入

转载请标明:转载自【小枫栏目】,博文链接:http://blog.csdn.net/rexuefengye/article/details/9833851 简介 本文档主要介绍接入QQ平台的一些内容,便于查阅和使用。 第一步:搭建QQSDK 1.下载对应的 SDK, 将sdk这个目录添加到工程中&#xff…

各大APP注册时发送短信验证码是怎么实现的?

回答这个问题可以从多个角度来回答,比如商务角度和技术角度,为了快速清晰的让广大的读者了解这个过程,本文我们从商务角度来深入分析。 实现原理 现各大APP发送短信的服务一般是由第三方短信服务商提供的,他们整合了移动&#xff…

【日常记录】接入短信发送功能,为实现完整的注册功能做准备

接入阿里短信发送接口: 1、直接去阿里云【云市场】搜索【短信】随便选一个试用测试就行 打开后有相应的api说明 调用地址以及请求参数,可以自己去postman调试或者使用自带的【调试工具:去调试】。 注意:使用postman进行调试时&#xff0c…

手机短信注册验证与登录功能

文章目录 一、前言二、准备工作三、发布短信1、基本测试发布①可-使用测试模板进行调试②测试结果③注意,可能会调试失败,是因为没有余额。进入首页点击头像>进入余额充值;一条大概4分钱④创建SpringBoot项目demo 2、可自定义模板&#xf…

使用短信登录和注册的流程

现在各个网站普遍使用的登录认证方式是使用短信认证登录,并且在用户与服务器交互的过程中这部分功能需要被多次调用,所以在项目中不可避免地要包括这一部分,学习之后,在此记录其流程: 实现短信认证登录可以有两种方式…

基于DeepSpeed训练ChatGPT

基于DeepSpeed训练ChatGPT 最少只需一张32G GPU,自己也可以训练一个ChatGPT! 最近微软发布了一个基于DeepSpeed的训练优化框架来完成ChatGPT类模型的训练,博主对其进行了研究并通过此博文分享相关技术细节。 一、配置预览 1、开源仓库&…

GPT-3 1750亿参数少样本无需微调,网友:「调参侠」都没的当了

2020-06-02 12:01:04 OpenAI最强预训练语言模型GPT-3周四发表在预印本 arXiv 上,1750亿参数! GPT系列的预训练语言模型一直是大力出奇迹的典型代表,但是一代和二代在偏重理解的自然语言处理任务中表现欠佳,逊色于BERT家族。 GPT(Generative …

如何利用ChatGPT辅助优化刷题性能

根据土著刷题共建群里的一个小伙伴反馈,刷题会出现切题卡顿的情况,有时会出现滑不动的情况。 定位问题 为了定位切题卡顿问题的具体原因,测试了高低端手机📱、切换2G、3G、4G低网络状态等各种影响切题的现实情况,经过借…

ChatGPT使用进阶,你一定要知道的应用技巧

鉴于ChatGPT的巨大能力,深入学习ChatGPT使用技巧势在必行。作为伴随着ChatGPT等大语言模型(LLM)出现的还有一个新的工程领域:提示工程(Prompt Engineering)。 提示工程(Prompt Engineering&…

ChatGPT结合本地数据_llamaindex

1 功能 大模型学习的主要是通用数据,而用户可能需要让ChatGPT在本地的知识库中寻找答案。 普通用户不太可能训练大模型;由于本地数据格式丰富,内容烦多,且考虑到使用成本和token大小限制,也不可能在每次提问时都将所有…

上海亚商投顾:沪指震荡上行 大消费板块全线走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日震荡反弹,沪指全天低开高走,深成指、创业板指均涨超1%。工程机械板块集体大涨…

上海亚商投顾:沪指四连阳重回3300点 中字头个股再发力

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 大小指数今日走势分化,沪指低开后震荡反弹,创业板指盘中跌超1%。中字头个股再度发力&#…

上海亚商投顾:沪指低开高走 国产芯片板块掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日低开高走,深成指尾盘涨近1%,科创50指数大涨超2%。芯片板块掀涨停潮&#xff0…

上海亚商投顾:三大指数集体调整 消费板块逆市活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日集体调整,沪指全天弱势震荡,创业板指盘中跌超1%。旅游、食品、乳业等大消费板…

互联网晚报 | 爱奇艺回应因限制投屏被起诉事件;“鱼跃医疗”回应被罚270万元;2022年全国城市GDP十强全部出炉...

爱奇艺:已收到关于投屏清晰度变更应诉通知,会认真审慎对待 据信号财经报道:近日,爱奇艺因为“限制投屏”一事连上多个热搜。据现代快报消息,广东一名用户因此将爱奇艺告上法庭,北京市互联网法院已于1月29日…

AIGC能否助力三六零实现“戴维斯双击”?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 4月21日,有着“网络安全巨头”光环的三六零发布了2022年财报。 数据显示,2022年,三六零实现收入95.21亿,同比下降12.54%,连续四年下滑;净利润-22.04亿&…

研报精选230528

目录 【行业230528华金证券】传媒行业深度研究:AIGC最新应用与场景研究 【行业230528国海证券】电动船舶行业深度报告:绿色智能大势已至,驶向电化百亿蓝海 【行业230528华西证券】纺织服装行业周报:5月增长放缓无碍中长期出清逻辑…

五月&六月券商金工精选

✦研报目录✦ ✦简述✦ 按发布时间排序 海通证券 通往绝对收益之路(八):“固收”产品股票端的量化解决方案 发布日期:2023-05-05 关键词:固收、股票、量化策略 主要内容:本研报研究了优秀的“固收”产品…

港联证券|龙头齐聚,本周7股将申购!今年第三高价新股也要来了?

随着2023年上半年收官,券商金股组合上半年收益率也已“交卷”。 券商中国记者梳理发现,在沪深300指数今年上半年微跌的背景下,六成券商金股组合今年以来取得了正收益,还有10家券商的组合收益率超过10%。 香港港联证券有限公司&am…