写点什么

微信 + ChatGPT = 自己的智能助手 | 社区征文

作者:IT蜗壳-Tango
  • 2023-03-02
    江苏
  • 本文字数:3352 字

    阅读完需:约 11 分钟

微信 + ChatGPT = 自己的智能助手 | 社区征文

大家好,我是 Tango,目前就职于一家日企从事测试开发工作。


在过去很长一段时间到处都充斥着 ChatGPT 的新闻,也相信有很多小伙伴也注册,并体验了,这里简单的和大家再介绍一下 ChatGPT。

什么是 ChatGPT

ChatGPT 是一种大型的语言模型,用于对自然语言输入进行建模和预测。


它是基于 OpenAI 的 GPT-3 架构进行构建的,并经过训练,以便能够回答人类的问题并进行自然对话。通常,这种技术被用于实现聊天机器人或人工智能助手,它们能够通过文本或语音与人类交流。


和以往帮我们实现简单服务的客服机器人不一样,ChatGPT 可以和用户进行多轮对话,经过“预先训练+微调”后,OpenAI 通过监督学习不断训练出现在模型,通过设计好的奖励机制由人类培训员不断筛选,最终得到质量最好的那一个回复。于是,有趣好玩的 ChatGPT 便诞生了。

如果我有了 ChatGPT,能做些什么?

我之前在体验它的时候,尝试过咨询他日常问题,比如一些专有名词的解释,也体验过让它给我一份代码示例,还体验过用它来翻译。基本上把它当成一个搜索工具来用也是很不错的体验。那么,如果将它和我们平时办公,生活都离不开的微信结合在一起会产生什么样的火花呢?也行你已经看到周围的朋友,同事已经在这么用了,那么今天,就和我一起将 ChatGPT 和微信结合起来,搭建一个简单的问答机器人吧。

前提准备

既然要用到 ChatGPT,那肯定要先注册它,又有政策原因,我这里就不过多的介绍了,大家可以去网上搜一下有很多介绍的。


除了 ChatGPT,我们还要 Node 以及 Python 环境,如果你不知道怎么安装这两个环境,可以留言给我,后面我再单独出一篇文章介绍。

构建思路介绍

我们首先拿到 ChatGPT 的 API 接口,这个官方已经提供了。然后利用 Wechaty 这个开源项目让 ChatGPT 和微信之间进行通讯。是不是已经有小伙伴嘴里嘟囔着,Python 已经无法操作微信了啊,web 接口已经不能用了!的确是这样的,但是由于一款国产的操作系统的出现(UOS),事情出现了转机。


UOS:UOS 由深度操作系统为基础,经过定制而来的产品。考虑到后者是基于 Linux 的国产操作系统的一员,UOS 应该拥有相同的定位。

https://baike.baidu.com/item/统信UOS/56200316?fr=aladdin


微信在 USO 上据大佬介绍说,是 web 版本的微信套了一个外壳,同时修改了数据传输的的请求头。那么我们便可以利用只一点重新使用 web 版本的微信(登录成功后,其实显示的是 PC 端登录的。)


这样服务端(ChatGPT)和客户端(微信)就可以通过 Python 来链接了,从而实现微信自动回复的功能。话不多说,我们开始动手实践一下吧。

安装 wechaty 这个库

官方网站:介绍 - Wechaty (gitbook.io)


我这里安装的是 Node 17.0.1 的版本。在确认本地电脑 node 环境搭建好之后,我们打开任意命令行终端,Windows:cmd,Mac,Linux:terminal 工具


npm install -g wechaty wechaty-puppet-wechat
复制代码



安装完成后,我们需要设置一些环境变量,在设置环境变量前,我们还需要准备一个独一无二的 Token,通常可以使用 Python 的 uuid 库来生成。这个 token 我们要记住后面需要用到 9c577ae4-e040-46d5-82bb-0b34592c8360


python -c "import uuid;print (uuid.uuid4 ()); "
复制代码



环境变量设置 Windows 版本:


set  WECHATY_PUPPET_WECHAT_PUPPETEER_UOS=trueset  WECHATY_PUPPET_SERVICE_TOKEN="9c577ae4-e040-46d5-82bb-0b34592c8360"set  WECHATY_PUPPET="wechaty-puppet-wechat"set  WECHATY_LOG="verbose"set  WECHATY_PUPPET_SERVER_PORT="8080"set  WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER=true
复制代码


Mac,Linux 版本


export  WECHATY_PUPPET_WECHAT_PUPPETEER_UOS=trueexport  WECHATY_PUPPET_SERVICE_TOKEN="9c577ae4-e040-46d5-82bb-0b34592c8360"export  WECHATY_PUPPET="wechaty-puppet-wechat"export  WECHATY_LOG="verbose"export  WECHATY_PUPPET_SERVER_PORT="8080"export  WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER=true
复制代码


WECHATY_PUPPET_SERVICE_TOKEN 用的就是我们上面 uuid 生成的那串字符串


启动 wechaty 网关服务 Windows 版本:


wechaty gateway --token %WECHATY_PUPPET_SERVICE_TOKEN% --port %WECHATY_PUPPET_SERVER_PORT%  --puppet wechaty-puppet-wechat
复制代码


Mac,Linxu 版本:


wechaty gateway --token $WECHATY_PUPPET_SERVICE_TOKEN --port $WECHATY_PUPPET_SERVER_PORT --puppet wechaty-puppet-wechat
复制代码


启动好之后,我们会看到一个 URL,点击这个 URL 后会看到一个微信登录的二维码,但是我们不用去扫它,后面我们的 Python 项目也会显示一个二维,我们扫描那个就好了。看到这个只是代表代表我们的服务启动好了,切记我们整个项目运行过程中,这个窗口都不要关闭!



创建 Python 项目

在服务启动好之后,我们先创建一个简单的 Python 项目,看看通讯是否正常。


首先我们为了隔离环境先创建一个新的虚拟环境,比如就叫 ChatGPT 好了。


python -m venv ChatGPT
复制代码


注意,一定要在一个自己比较熟悉的目录下面创建,要不然将来就找不到这个虚拟环境了,当然,如果用 conda 来创建就不要考虑这个事情了。


然后我们激活环境,并开始安装 Python 版本的 wechaty, 如果速度太慢可以用国内的镜像。


pip install wechaty
复制代码



如果你看到如下报错,可以先将 pip 升级为最新的版本然后再次安装即可




接下来我们按照官网文档写一个简单的 Demo


from wechaty import Wechaty, Messageimport asyncio, os
os.environ["WECHATY_PUPPET_SERVICE_ENDPOINT"] = "127.0.0.1:8080"os.environ["WECHATY_PUPPET_SERVICE_TOKEN"] ="9c577ae4-e040-46d5-82bb-0b34592c8360" # 之前uuid生成的token
os.environ["WECHATY_PUPPET_WECHAT_PUPPETEER_UOS"] = "true"
bot = Wechaty()
class MyBot(Wechaty): async def on_message(self, msg: Message) -> None: text = msg.text() if text == "你好。": res = "hello。" await msg.say(res)
asyncio.run(MyBot().start())
复制代码


然后用 python 运行这个脚本,会看到一个二维码,扫描登录即可



这里可以看到有两个微信昵称:


IT 蜗壳:是我的一个微信号,发送了【你好。】


图灵测试:是刚刚扫码登录的微信号,回复了【hello。】

接入 ChatGPT



首先我们需要创建一个 api key


申请链接:Account API Keys - OpenAI API



将 key 复制下来,后面我们会用到


我们需要安装一下 openai 的库


pip install openai
复制代码


然后根据官方的 API 文档我们可以写如下脚本测试一下:


import openai
# Apply the API keyopenai.api_key = "刚刚申请的KEY"
# Define the text promptprompt = "今天礼拜几? "
# Generate completions using the APIcompletions = openai.Completion.create( engine="text-davinci-002", prompt=prompt, max_tokens=100, n=1, stop=None, temperature=0.5,)
# Extract the message from the API responsemessage = completions.choices[0].textprint(message)
复制代码


然后运行这个脚本看看效果:



接下来的事情就简单了,我们只需要将这两个脚本合并在一起就完成了一个基于 ChatGPT 的聊天机器人


from wechaty import Wechaty, Messageimport asyncio, osimport openai
openai.api_key = "openapi的key"os.environ["WECHATY_PUPPET_SERVICE_ENDPOINT"] = "127.0.0.1:8080"os.environ["WECHATY_PUPPET_SERVICE_TOKEN"] ="9c577ae4-e040-46d5-82bb-0b34592c8360" # 之前uuid生成的token
os.environ["WECHATY_PUPPET_WECHAT_PUPPETEER_UOS"] = "true"
bot = Wechaty()
class MyBot(Wechaty): async def on_message(self, msg: Message) -> None: text = msg.text() if text.startswith("#"): completions = openai.Completion.create( engine="text-davinci-002", prompt=text, max_tokens=100, n=1, stop=None, temperature=0.5, ) message = completions.choices[0].text await msg.say(message)
asyncio.run(MyBot().start())
复制代码




结束语

由于篇幅有限,我们这里只是把各个关键技术点和大家分享一下,具体的业务场景的设计大家可以自行动手操作,欢迎大家在评论区发表自己的看法,如果遇到问题也欢迎在评论区留言,如果本文对你有所帮助,欢迎转发给你的朋友。我们下期见

发布于: 2023-03-02阅读数: 373
用户头像

一个日语专业的程序猿。 2017-09-10 加入

【坐标】无锡 【软件技能】Java,C#,Python 【爱好】炉石传说 【称号】InfoQ年度人气作者,Intel OpenVINO领航者联盟成员 【B站】https://space.bilibili.com/397260706/ 【个人站】www.it-worker.club

评论 (2 条评论)

发布
用户头像
我正想弄这个,你就把教程给弄出来了。~
2023-03-02 11:06 · 广东
回复
用户头像
给牛哥点赞
2023-03-02 09:48 · 江苏
回复
没有更多了
微信 + ChatGPT = 自己的智能助手 | 社区征文_ChatGPT_IT蜗壳-Tango_InfoQ写作社区