将ChatGPT接入微信实现智能回复
ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码、改论文、讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在与好友对话中给出意想不到的回应,而且再也不用担心女朋友影响我们 打游戏 工作了。
本项目是基于ChatGPT的微信聊天机器人,通过 OpenAI 接口生成对话内容,使用 itchat 实现微信消息的接收和自动回复。
简介
已实现特性
- 文本对话: 接收私聊及群组中的微信消息,使用ChatGPT生成回复内容,完成自动回复
- 规则定制化: 支持私聊中按指定规则触发自动回复,支持对群组设置自动回复白名单
- 多账号: 支持多微信账号同时运行
- 图片生成: 支持根据描述生成图片,并自动发送至个人聊天或群聊
Github地址:https://github.com/zhayujie/chatgpt-on-wechat
更新日志
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管理页面 创建一个 API Key 并保存下来,后面需要在项目中配置这个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.克隆项目代码:
git clone https://github.com/zhayujie/chatgpt-on-wechat
cd chatgpt-on-wechat/
2.安装所需核心依赖:
pip3 install itchat-uos==1.5.0.dev0
pip3 install openai==0.25.0
配置
配置文件的模板在根目录的config-template.json中,需复制该模板创建最终生效的 config.json 文件:
cp config-template.json config.json
然后在config.json中填入自定义配置,各配置项含义如下:
# config.json文件内容示例
{
"open_ai_api_key": "YOUR API KEY" # 填入上面创建的 OpenAI API KEY
"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对话及图片接口的参数配置(内容自由度、回复字数限制、图片大小等),可以参考 对话接口 和 图像接口 文档直接在 代码
bot\openai\open_ai_bot.py中进行调整。
运行
1.如果是开发机本地调试,直接在项目根目录下执行:
python3 app.py
终端输出二维码后,使用微信进行扫码,当输出 "Start auto replying" 时表示自动回复程序已经成功运行了(注意:用于登录的微信需要在支付处已完成实名认证)。
2.如果是服务器部署,则使用nohup命令在后台运行:
touch nohup.out # 首次运行需要新建日志文件
nohup python3 app.py & tail -f nohup.out # 后台运行程序并输出日志
同样在扫码后程序即可成功运行于服务器后台。
链接:https://zhayujie.com/chatgpt-on-wechat.html
将ChatGPT接入微信实现智能回复的更多相关文章
- 微信开发笔记(一)通过.net如何实现接入微信
微信公众平台,给个人.企业和组织提供业务服务与用户管理能力的全新服务平台.现在基本上每个地方都可以看到微信存在,动不动就是让你扫一下加下微信. 经常遇到这样情况,“到一家餐馆吃饭,拿了个号,前台服务引 ...
- [.NET] 使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复
使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复 目录 一.前提 二.基本配置信息简析 三.配置服务器地址(URL) 四.请求处理 一.前提 先申请微信公众号的授权,找到或配置 ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- Unity接入微信登录 微信分享 微信支付 支付宝SDK
你将会学到的unity集成SDK游戏中接入微信支付与支付宝支付游戏中接入微信登录与微信分享 目录 mp4格式,大小2.2GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop13 ...
- 新手指南:顶象验证码如何接入微信小程序?
自2017年小程序发布以来,经过4年的快速发展,小程序已然成为企业互联网布局不可或缺的一环.无论是互联网企业还是拥抱互联网的传统企业,无论是服务导向型企业还是产品导向型企业,小程序都为用户提供了一种轻 ...
- .net做一个基于ChatGpt的微信机器人吧~[全教程]
最近这个ChatGPT很火啊,看了B站上很多视频,自己非常手痒,高低自己得整一个啊,很多人都是把ChatGPT和微信结合在一起,正巧我是Wechaty框架的.net sdk贡献者,这不是一应俱全了吗? ...
- 如何用Azure Web App Services接入微信公众号
注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...
- 在Web应用中接入微信支付的流程之极简清晰版
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- 微信公众平台回复链接可以直接访问,但不能是锚文字链接<a>标签
最近在学习微信公众平台开发,由于编辑模式和开发模式不可同时开启,在开发模式下如果访客发送关键字过来暂时无法实现关键词自动回复,客服人员先用链接网址直接回复订阅用户,但请注意不能是文字链接,即<a ...
- 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...
随机推荐
- AWK用法全解
一.awk介绍 awk是Linux自带的一个逐行扫描的文本处理工具,支持正则表达式.循环控制.条件判断.格式化输出.AWK自身带有一些变量,可以在书写脚本时调用. 二.基本语法格式 2.1.在shel ...
- k8s service访问偶发超时问题
问题现象 在某个集群节点上的服务访问service服务:端口,会出现偶发timeout的问题,集群有的节点不会出现访问timeout的问题 问题处理 查看bridge-nf-call-iptables ...
- 速看!新版SpringAI的2个致命问题
无论是使用最新正式版的 Spring AI,还是最新正式版 Spring AI Alibaba,在实现自定义 MCP 服务器端和客户端的时候,一定要注意这两个问题,不然你会发现你的 MCP 服务器端能 ...
- vue.js快速入门(三)~组件入门~
组件系统是vue的一个重要的概念.他可以让我们使用独立的,可复用的小组件来构建大的复杂的应用,任何应用都可以看作是组件树.组件可以看做是自定义的Html代码.可扩展的html,封装可重用的html. ...
- 3.Java Spring框架源码分析-AOP-AnnotationAwareAspectJAutoProxyCreator是在什么时候起作用的
目录 1. 继续研究BeanPostProcessor的postProcessBeforeInstantiation和postProcessAfterInitialization 2. 创建其他单实例 ...
- mac安装java
下载jdk 点击此处下载. . 下载需要登陆,如果不想登陆,可以下载我阿里网盘资源. 安装jdk 按照提示操作即可. 配置环境变量 其实这个时候,打开终端,输入java -version,已经可以看到 ...
- 前端开发系列036-基础篇之call && apply
本文介绍JavaScript 中的 call .apply 和 bind 方法的基本使用,使用注意点以及常见的使用场景等,并简单介绍这些方法的实现原理提供对应的源码. call && ...
- Codeforces Round #682 (Div. 2) ABC 题解
A. Specific Tastes of Andre 题意:构造一个长度为n且任意子串和整除其长度的序列. 思路:n个1就行. view code #include<iostream> ...
- 【记录】解决TortoiseGit报错:git did not exit cleanly (exit code 128)
公司新的项目的gitlab地址发过来后,我重新用新的地址拉取代码,怎么都拉不下来: 每次都是提示git did not exit cleanly (exit code 128): 检查了一遍自己的权限 ...
- 一文说清楚ETL与Kafka如何实现集成
ETL与Kafka为何需要集成? 随着企业对实时流数据的处理要求越来越高,很多企业都把实时流数(日志.实时CDC采集数据.设备数据-)先推入到kafka中,再通过ETL对kafka中的数据进行消费通过 ...