基于ChatGPT的微信聊天机器人:V-ger 2.0

基于itchat+ChatGPT实现简单的聊天与咨询功能,其他功能待丰富

230206更新:在Github中发现了一个类似的项目,更推荐参考chatgpt-on-wechat项目

230209更新:亲测使用itchat存在封号风险,本项目暂时不推荐继续使用 = =

231013更新:Windows平台可考虑使用wechat-gptbot项目,封号风险较低;或者考虑其他平台实现的聊天机器人,比如bot-on-anything项目就支持公众号、QQ、Telegram、Gmail、飞书、钉钉等场景

1 安装itchat-uos

项目地址:https://github.com/why2lyj/ItChat-UOS

安装后测试:

import itchat
from itchat.content import TEXT

@itchat.msg_register(TEXT)
def text_reply(msg):
    return msg.text

itchat.auto_login(enableCmdQR=2,hotReload=True)
itchat.run()

2022年12月6日 亲测可用

注意事项:

  • 所用微信号必须完成实名认证
  • 注意本项目使用的是ItChat的UOS版
  • linux系统可能存在扫码登录超时的问题

2 注册ChatGPT

网站主页:https://chat.openai.com/chat

注册前提:

  • 具备海外网络的访问能力(注意香港地区的IP不行)
  • 拥有海外手机号接收验证码(可使用第三方付费接码网站)
  • 注册流程和其他网站是类似的,注册成功后即可在线体验聊天功能

注意事项:

  • 建议使用账号密码的方式注册,而不是第三方账号快捷注册(比如Google)
  • 部分地区暂未开放注册权限,此时需要考虑切换到其他地区的海外VPN。切换后注意在WEB页面的地址栏执行以下命令以手动清除地理信息:
javascript:window.localStorage.removeItem(Object.keys(window.localStorage).find(i=>i.startsWith('@@auth0spajs')))

3 配置ChatGPT的接口

目前官方的API接口是付费的(新用户可能发放一些免费用额),本人更推荐第三方开发的API项目:ChatGPT 230202可正常使用PyChatGPT(已失效)

3.1 获取登录信息

其中ChatGPT更为简单且受欢迎,而PyChatGPT的功能更为丰富。本文暂时先以ChatGPT为主展开聊天机器人的demo。

ChatGPT的登录:

  • 支持账号密码(需要配置在线解析验证码的付费密钥2CAPTCHA_API_KEY)、Session Token Authentication(需要手动定期更新,简单但是麻烦)、微软账密(暂未尝试过,似乎是最近新增的)
  • 由于国内直接进行账号密码登录涉及VPN的代理问题,所以代理不方便的情况下可直接使用的Session Token Authentication(有稳定代理的推荐第一种),缺点是时间长了会过期
  • 在登录后的界面中通过F12打开web开发者工具,进入Application标签下的Cookies子标签,复制键名为__Secure-next-auth.session-token对应的值,记为session_token
  • (221227)更新后的版本,需要安装Chrome或者Chromium,如果需要在linux无桌面环境下运行,可能需要配置Xvfb实现有头浏览器的模拟

3.2 配置开发环境

3.3 直接调用API(Browserless)

利用chatgpt旧版本的漏洞(已失效),具体可参考wiki

3.3.1 Chrome+ChromeDriver+Xvfb

方法1:使用已配置好的docker镜像(推荐)

注意:在使用镜像启动ChatGPT项目的过程中,本人发现不能使用远程ssh的方式,也不建议在启动时使用参数-d隐藏终端(容器结束,使用ctrl + Pctrl + Q退出而不终止容器运行) 。此两种情况可能引发报错,原因暂未定位~

方法2:Ubuntu环境下配置Chrome+ChromeDriver+Xvfb:

# 1.添加google-chrome 源
wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/

# 2.添加 google 公钥 
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - 
# 可能存在报错 gnupg, gnupg2 and gnupg1 do not seem to be installed
# 报错的处理方法:apt-get install -y gnupg

# 3.更新源 并安装 google-chrome 稳定版
apt-get update
apt-get install google-chrome-stable=109.0.5414.74
google-chrome-stable -version # 确定google-chrome 版本
# Google Chrome 108.0.5359.124

# 4.安装配置chrome-driver
wget  https://npm.taobao.org/mirrors/chromedriver/108.0.5359.71/chromedriver_linux64.zip # 注意版本对应
unzip chromedriver_linux64.zip # 解压文件
mv chromedriver /usr/bin/chromedriver

# 5.安装xvfb
apt install xvfb

# 6.更改软链接
#将原来的google启动链接链接到
/usr/bin/chrome ln -s /etc/alternatives/google-chrome /usr/bin/chrome 
#移除/usr/bin/google-chrome软链接 
rm -rf /usr/bin/google-chrome 
#设置xvfb-chrome脚本为新的启动链接 
ln -s /usr/bin/xvfb-chrome /usr/bin/google-chrome

参考:ubuntu18.04服务器下配置爬虚拟界面谷歌浏览器有头模式 xvfb+chromedriver+google-chrome

4 聊天机器人demo

import itchat
from itchat.content import TEXT
from revChatGPT.revChatGPT import Chatbot


{
#    "email": "<YOUR_EMAIL>",
#    "password": "<YOUR_PASSWORD>"
    "session_token": "<YOUR_TOKEN>",
}

chatbot = Chatbot(config, conversation_id=None, parent_id=None)

@itchat.msg_register(TEXT)
def text_reply(msg):
    try:
        chatbot_resp = chatbot.ask(msg.Content, conversation_id=None, parent_id=None)
        return chatbot_resp['message']
    except Exception as e:
        try:
            chatbot.refresh_session() # You need to log in on the first run
            return chatbot.ask(msg.Content, conversation_id=None, parent_id=None)['message']
        except:
            return f'请你再问一遍,我脑瓜子不好使'

itchat.auto_login(enableCmdQR=2,hotReload=True)
itchat.run()

5 效果展示

效果小结:

  • 理解和表达能力很强,具备一定连续对话的能力
  • 有很强的安全防线,回避较为敏感的话题
  • 尤其擅长知识问题和常识科普的归纳表述
  • 存在缺陷的回答可以根据反馈灵活修正,存在自我进化的可能
  • 没太有”立场“的概念,答案容易受到言语诱导
  • 部分回答在网络上存在雷同,不排除过拟合的可能
  • 面对连续对话后的话题转换,容易受到之前的话题的影响

6 其他细节补充

  1. 关于微信账号:不建议使用自己的常用账号测试,存在黑号的风险。对于移动用户,本人推荐和多号服务,可为手机号额外注册虚拟副卡。每月费用为5元。

  2. 关于海外VPN:注册和登录时是必要的,程序执行时可以不用代理。但是体感会导致回答问题存在较大的延迟波动。

  3. 对于旧版本聊天机器人感兴趣的可参阅:第一代V-ger回顾

往年同期文章