智能聊天机器人的实现
ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码、改论文、讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型打造一个智能机器人,可以在与好友对话中给出意想不到的回应,而且再也不用担心女朋友影响我们打游戏工作了。
本项目是基于ChatGPT的聊天机器人,通过OpenAI接口生成对话内容,使用itchat实现消息的接收和自动回复。
简介已实现特性文本对话:接收私聊及群组中的消息,使用ChatGPT生成回复内容,完成自动回复规则定制化:支持私聊中按指定规则触发自动回复,支持对群组设置自动回复白名单多账号:支持多账号同时运行图片生成:支持根据描述生成图片,并自动发送至个人聊天或群聊Github地址:https://github.com/zhayujie/chatgpt-on-wechat
更新日志2023.02.09:扫码登录存在封号风险,请谨慎使用,参考#58
2022.12.19:引入itchat-uos替换itchat,解决由于不能登录网页版而无法使用的问题,且解决Python3.9的兼容问题
2022.12.18:支持根据描述生成图片并发送,openai版本需大于0.25.0
2022.12.17:原来的方案是从ChatGPT页面获取session_token,使用revChatGPT直接访问web接口,但随着ChatGPT接入Cloudflare人机验证,这一方案难以在服务器顺利运行。所以目前使用的方案是调用OpenAI官方提供的API,回复质量上基本接近于ChatGPT的内容,劣势是暂不支持有上下文记忆的对话,优势是稳定性和响应速度较好。
快速开始准备1.OpenAI账号注册前往OpenAI注册页面创建账号,参考这篇教程可以通过虚拟手机号来接收验证码。创建完账号则前往API管理页面创建一个APIKey并保存下来,后面需要在项目中配置这个key。
项目中使用的对话模型是davinci,计费方式是每1k字(包含请求和回复)消耗$0.02,图片生成是每张消耗$0.016,账号创建有免费的$18额度,使用完可以更换邮箱重新注册。
2.运行环境支持Linux、MacOS、Windows系统(可在Linux服务器上长期运行),同时要求安装有Python(版本需在3.7.1~3.9.X之间,Linux环境建议使用3.7.X)。
1.克隆项目代码:
gitclonehttps://github.com/zhayujie/chatgpt-on-wechatcdchatgpt-on-wechat/2.安装所需核心依赖:
pip3installitchat-uos==1.5.0.dev0pip3installopenai==0.25.0配置配置文件的模板在根目录的config-template.json中,需复制该模板创建最终生效的config.json文件:
cpconfig-template.jsonconfig.json然后在config.json中填入自定义配置,各配置项含义如下:
#config.json文件内容示例{"open_ai_api_key":"YOURAPIKEY"#填入上面创建的OpenAIAPIKEY"single_chat_prefix":["bot","@bot"],#私聊时文本需要包含该前缀才能触发机器人回复"single_chat_reply_prefix":"[bot]",#私聊时自动回复的前缀,用于区分真人"group_chat_prefix":["@bot"],#群聊时包含该前缀则会触发机器人回复"group_name_white_list":["ChatGPT测试群","ChatGPT测试群2"],#开启自动回复的群名称列表"image_create_prefix":["画","看","找"]#开启图片回复的前缀}配置说明:
个人聊天中,需要以“bot”或“@bot”为开头的内容触发机器人,对应配置中的single_chat_prefix;机器人回复的内容会以“[bot]”作为前缀,以区分真人,对应的配置为single_chat_reply_prefix群组聊天中,群名称需配置在group_name_white_list中才能开启群聊自动回复,默认只要被@就会触发机器人自动回复,另外群聊天中只要检测到以“@bot”开头的内容,同样会自动回复,这对应配置group_chat_prefix对于图像生成,在满足个人或群组触发条件外,还需要额外的关键词,对应配置image_create_prefix关于OpenAI对话及图片接口的参数配置(内容自由度、回复字数限制、图片大小等),可以参考对话接口和图像接口文档直接在代码botopenaiopen_ai_bot.py中进行调整。运行1.如果是开发机本地调试,直接在项目根目录下执行:
python3app.py终端输出二维码后,进行扫码,当输出“Startautoreplying”时表示自动回复程序已经成功运行了(注意:用于登录的账号需要在支付处已完成实名认证)。扫码登录后你的账号就成为机器人了,可以在手机端通过配置的关键词触发自动回复(任意好友发送消息给你,或是自己发消息给好友),参考#142。
2.如果是服务器部署,则使用nohup命令在后台运行:
touchnohup.out#首次运行需要新建日志文件nohuppython3app.py&tail-fnohup.out#后台运行程序并输出日志扫码登录后程序即可运行于服务器后台,此时可通过ctrl+c关闭日志,不会影响后台程序的运行。使用ps-ef|grepapp.py|grep-vgrep命令可查看运行于后台的进程,如果想要重新启动程序可以先kill掉对应的进程。日志关闭后如果想要再次打开只需输入tail-fnohup.out。
注:如果扫码后手机提示登录验证需要等待5s,而终端的二维码再次刷新并提示Logintimeout,reloadingQRcode,此时需参考此issue修改一行代码即可解决。
常见问题FAQs:https://github.com/zhayujie/chatgpt-on-wechat/wiki/FAQs
联系欢迎提交PR、Issues,以及Star支持一下。程序运行遇到问题优先查看常见问题列表,其次前往Issues中搜索,没有相似问题则创建Issue。
文章链接:https://zhayujie.com/chatgpt-on-wechat.htmlGithub仓库:https://github.com/zhayujie/chatgpt-on-wechat