本文最后更新于 2023年3月3日 上午
这里会记录一些尝试做个能够进行交流的机器人的笔记
1 QQ对话机器人 安装Mirai 通过Mirai来收发QQ消息,安装前需要弄java环境,我是WIN11直接winget
1 winget install Microsoft.OpenJDK.17
下载MCL 并且解压,找个好位置,之后通过终端执行里面的命令。 或者MCL Installer Auto Release
1 2 ./mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin./mcl -u
输入自动登录的账号密码
然后Ctrl+C退出mcl
可对配置文件进行修改mcl-2.1.0\config\net.mamoe.mirai-api-http\setting.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 adapters: - http - ws debug: false enableVerify: true verifyKey: 123456 singleMode: false cacheSize: 4096 adapterSettings: http: host: '0.0.0.0' port: 12345 cors: [* ] ws: host: '0.0.0.0' port: 12346 reservedSyncId: -1
之后再运行mcl
这时候会让你验证,弹个这个出来
手机打开开发者模式,打开USB调试,插上电脑,然后电脑和手机都打开谷歌浏览器,电脑浏览器输入地址chrome://inspect/#devices显示如下界面
在几个标签中随便点击一个inspect,弹出新窗体,就是同步了手机浏览器,右边会自动打开网络调试
将mcl弹窗出来的那个地址复制到这里,然后手动进行验证,完成后再网络消息中找到个叫cap_union_new_verify的消息,点开后再preview中找到ticket,复制粘贴到mcl的弹窗中,回车。之后就显示登录成功Bot login successful 这时候给QQ发个消息,控制台也能看见了
conda下安装graia-ariadne 创建个新环境
1 2 3 conda create -n robot python=3 .10 activate robotpip install graia-ariadne
自动回答示例 test.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 from creart import createfrom graia.ariadne.app import Ariadnefrom graia.ariadne.connection.config import ( HttpClientConfig, WebsocketClientConfig, config, )from graia.ariadne.event.message import GroupMessagefrom graia.ariadne.message.chain import MessageChainfrom graia.ariadne.model import Groupfrom graia.broadcast import Broadcastfrom graia.ariadne.entry import Ariadne, Friend, MessageChain, config app = Ariadne( config( 3507824822 , "123456" , HttpClientConfig(host="http://localhost:12345" ), WebsocketClientConfig(host="http://localhost:12346" ), ) )@app.broadcast.receiver("FriendMessage" ) async def friend_message_listener (app: Ariadne, friend: Friend,msg: MessageChain ): if msg.display == "你好" : await app.send_message( friend, MessageChain(f"你说 {msg.display} ,我说滚" ), )@app.broadcast.receiver("GroupMessage" ) async def Group_message_listener (app: Ariadne, group: Group,msg: MessageChain ): if msg.display == "你好" : await app.send_message( group, MessageChain(f"你说 {msg.display} ,我说滚" ), ) Ariadne.launch_blocking()
再conda的robot环境下执行,然后发个消息
各种问题 在mcl运行报错 估计是plugins文件夹里面有重复插件,全部删掉重新./mcl -u,下面是错误消息
1 2 2022 -12 -15 16 :00 :56 E/main : Failed to init MiraiConsole. net.mamoe .mirai .console .plugin .loader .PluginLoadException : Exception while enabling net.mamoe .mirai-api-http
执行Ariadne是报链接错误 首先检测一下端口和verifyKey是否匹配,然后尝试换个端口
1 graia .amnesia.builtins.aiohttp:connection_manage:231 - 404 , message='Invalid response status', url=URL('http://localhost:8080 /all ?qq=3507824822 &verifyKey=12345 ')
Mirai登录时:当前网络不稳定,登录失败
删除 bots/…/ 下全部文件
保持机器人账号手机端QQ登录
在手机端QQ 设置/账号安全/登陆设备管理 中将历史设备删除
Mirai登录时:当前QQ版本 过低 1 vim ./config/Console /AutoLogin.yml
修改:
删除bots,重新滑块登录,其他登录问题可见这里 ,如果登录被限制可以尝试等待1日。
openAI对话模型 官网 ,需要梯子,账号注册还屏蔽了很多梯子,并且需要国外手机号,可以使用虚拟号 搞定。 建立好账号后在这里获取API 密钥 ,之后就不需要梯子了。
这个API是openAI的,和chatgpt的区别是,chatgpt是一个固定的模型,而openAI的API是一个通用的API,选择模型执行功能。chatgpt它没有开发API,但是有逆向工程,等之后我去玩玩了在写,不过听说泄密的模型也不是真正的chatgpt,text-chat-davinci-002-20221122是一个早期的版本。
3月3日更新:官网已经给出了类似chatgpt的模型turbo,详细使用可见官网文档 ,关于openai之后应该会在写一文,就不在这儿缝补了
直接请求方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import requests api_key = 'sk-xxx' response = requests.post( 'https://api.openai.com/v1/completions' , headers = { 'Content-Type' : 'application/json' , 'Authorization' : f'Bearer {api_key} ' }, json = { 'model' : 'text-davinci-003' , 'prompt' : '你好' , 'temperature' : 0.4 , 'max_tokens' : 300 , 'n' : 2 , stop : ['a' , 'b' ] } ) json = response.json()print (json['choices' ][0 ]['text' ])
openai官方的python库 1 2 3 4 5 6 7 8 import openai openai.api_key = f'sk-xxx' response = openai.Completion .create ( engine = 'text-davinci-003' , prompt = '你好' , temperature = 0.7 , max_tokens = 300 ) response['choices' ] [0] ['text' ]
acheong08的chatgpt反向工程 2.13补充:鉴于这东西日新月异,以下很可能过时了,还是以下方逆向工程的仓库为准吧 2.21补充:下文的确过时了,懒得改,可以参考 我用它的方案对接chatgpt和bingchat的机器人仓库 ,因为我会自己用,所有肯定会更新到能用的版本
官网 ,需要梯子,就是上面的openAI开发的,注册后可以直接网页端玩。以下是使用逆向工程 进行。 工程文档中有官方API和网站版两种方式,前者是用泄露的模型,调用chatgtp的官方接口进行的,完全没有任何限制,但是收费,每个账号有免费额度,也可以用用
网站版方式实际上就是模拟了网站访问,所以它和网站有相同的限制,即每小时通话次数限制和相应速度慢等问题。不过它是完全不要钱的并且觉得是真真实实的chatgpt。麻烦就是运行环境的梯子要没被它给屏蔽了
这东西迟早要收费,和github copilot一样。所有以下实现摇摇欲坠,不知道那天就不能用咯~
Official API方式 1 export GPT_ENGINE ="text-davinci-003"
仓库提供的示例 直接使用提供的示例,还是去OPENAI 负责api-key
OfficialChatGPT命令有三个参数,–api_key就是填写注册后的key,–stream输出是如同打字一般逐个吐出来还是等待接收完成后全部显示。–temperature表示回答的随机程度,越大越随机,越小越不随机,但是如果为0则会选取最大概率的回答。
进入问答后有如下几个参数
1 2 3 4 5 6 7 8 9 !help - Display this message !rollback - Rollback chat history !reset - Reset chat history !prompt - Show current prompt !save_c <conversation_name> - Save history to a conversation 保存对话记录 !load_c <conversation_name> - Load history from a conversation 加载对话记录 !save_f <file_name> - Save all conversations to a file 保存对话记录到文件 !load_f <file_name> - Load all conversations from a file 加载对话记录到文件 !exit - Quit chat 退出聊天会话
浓缩 先假定已经具备能对微信、QQ电报啥的进行收发的功能,那么只需要要写的部分就只有传入消息,得到结果,传出消息,以下就是个简单示例
1 2 3 4 from revChatGPT import Officialdef liteAI (inputText ): response = chatbot.ask(inputText, temperature=0.5 ) return response["choices" ][0 ]["text" ]
结合前面的对接到QQ上,效果如下:
用着用着可能会遇到这个问题
1 InvalidRequestError: That model does not exist
也可能遇到这个问题:
1 The server is overloaded or not ready yet.
简而言之,摇摇欲坠,毕竟用的泄露出来的接口,不知道啥时候就没了
ChatGPT网站版 这种方式内在其实就是用你的openai的账号密码登录了那个chatgpt试用网站来对话。 先自己直接登录chatgpt 试用一下,能上去在尝试用这个方式了。
启用 在revChatGPT文件夹下添加配置文件config.json
1 2 3 4 { "email" : "<your email>" , "password" : "your password" }
然后执行:
参考