手把手教你接入ChatGpt微信聊天机器人

2023-07-15 13:59:41 浏览数 (1)

聊天机器人一直是人工智能领域最令人着迷的应用之一。现在,借助OpenAI的ChatGPT模型,我们可以创建一个非常强大的聊天机器人,只用几行代码就可以用Python来接入它!本文会介绍接入公众号或者个人微信的方法

✨ 前提条件

1.python开发环境(python3.8)

2.需要在OpenAI的网站上获取API Key。注册OpenAI账号后,进入Dashboard,在API Keys选项卡中可以找到自己的API Key。自行百度,也加入我的知识星球看详细教程,在文章最下方,完全免费。

✨ 接入公众号

这样可以更加灵活地控制聊天机器人的行为和输出,而不受第三方库的限制。同时,这种方式也可以方便地集成到您的其他 Python 项目中,从而实现更多的自动化任务

1.我们需要先安装 openai 和 wechatpy 这两个库

2.接下来,我们需要先获取公众号的 appid 和 appsecret,并且设置好接口的访问权限。在微信公众平台后台,我们需要进行以下操作

a.在 “开发 -> 基本配置” 页面获取 appid 和 appsecretb.在 “开发 -> 接口权限” 页面,启用 “消息管理权限” 和 “网页服务权限”

3.接下来,我们就可以开始编写代码了。我们需要先实现一个函数,用于发送消息到公众号:

代码语言:javascript复制
  from wechatpy import WeChatClient
  appid = "YOUR_APP_ID"
  appsecret = "YOUR_APP_SECRET"
  def send_message_to_wechat(access_token, openid, content):
      client = WeChatClient(appid, appsecret, access_token)
      client.message.send_text(openid, content)

在函数中,我们使用 WeChatClient 类初始化了一个客户端,并且使用 message.send_text 方法发送了一条文本消息到指定用户的 openid。

4.接下来,我们需要调用 OpenAI GPT API 来生成回复的文本内容。我们可以实现一个函数,用于调用 OpenAI GPT API:

代码语言:javascript复制
  import openai
  import json

  def generate_response(api_key, prompt):
      openai.api_key = api_key
      response = openai.Completion.create(engine="text-davinci-002", prompt=prompt, max_tokens=128, n=1,stop=None,temperature=0.7)
      return response.choices[0].text

在函数中,我们使用 openai.Completion.create 方法调用了 OpenAI GPT API,生成回复的文本内容。在调用时,我们需要传递 API 密钥和调用参数,例如使用的 GPT 引擎、输入的文本提示、最大 token 数、生成的样本数等。

5.最后,我们可以编写一个主函数,用于从微信服务器接收消息,调用 OpenAI GPT API 生成回复,然后将回复发送回用户。整体代码如下:

代码语言:javascript复制
  import openai
  from flask import request
  from wechatpy import parse_message
  from wechatpy.utils import check_signature
  from wechatpy import WeChatClient
  from wechatpy.exceptions import InvalidSignatureException

  appid = "your_wechat_appid"
  appsecret = "your_wechat_appsecret"
  token = "your_wechat_token"
  api_key = "your_openai_api_key"
  access_token = "your_wechat_access_token"
  openid = "your_wechat_openid"

  def send_message_to_wechat(access_token, openid, content):
      client = WeChatClient(appid, appsecret, access_token)
      client.message.send_text(openid, content)

  def generate_response(api_key, prompt):
      openai.api_key = api_key
      response = openai.Completion.create(engine="text-davinci-002", prompt=prompt, max_tokens=128, n=1,stop=None,temperature=0.7)
      return response.choices[0].text

  def main():
      while True:
          try:
              signature = request.args.get("signature", "")
              timestamp = request.args.get("timestamp", "")
              nonce = request.args.get("nonce", "")
              echo_str = request.args.get("echostr", "")
              check_signature(token, signature, timestamp, nonce)
              if request.method == "GET":
                  return echo_str
              else:
                  msg = parse_message(request.data)
                  if msg.type == "text":
                      prompt = msg.content
                      response_text = generate_response(api_key, prompt)
                      send_message_to_wechat(access_token, openid, response_text)
                  else:
                      send_message_to_wechat(access_token, openid, "Sorry, I can only reply text")
          except InvalidSignatureException as e:
              return e

✨ 接入个人微信

在之前的内容中,我们用itchat很容易的讲图灵机器人api接入了我们的个人微信。实现代码很简单,简单回顾一下:

代码语言:javascript复制
 import itchat
 import requests

 # 上传获得消息内容到图灵机器人
 # api_key里面填你在图灵机器人里面获得的机器人的apiKey,可以为多个

 class wechatRobot:
     api_key = ['your_api_key']
     flag = 0

     success_code = [100000, 200000]
     error_code = [40001]
 
     def setApikey(self, api_key):
         wechatRobot.api_key = api_key
         return wechatRobot

     @staticmethod
     def getMessage(msg):
         apiURL = 'https://www.tuling123.com/openapi/api'
         data = {'key': wechatRobot.api_key[wechatRobot.flag],
                 'info': msg,
                 'userid': 'yancy'
                 }
         r = requests.post(apiURL, data=data).json()
         rst = r.get('text')
         print('答text:'   str(r))
         if r.get('url'):
             rst = r.get('text')   "n"   r.get('url')
         return {'code': r.get('code'), 'data': rst}

     # 监听个人微信聊天
     @staticmethod
     @itchat.msg_register(itchat.content.TEXT)
     def return_message(msg):
         try:
             print('问:'   msg['Text'])
         except Exception as e:
             print(e)
         return wechatRobot.getMessage(msg['Text'])


 # 监听微信群聊天
 # @itchat.msg_register([itchat.content.TEXT],isGroupChat=True)
 # def return_message(msg):
 #   print('问:' msg['Text'])
 #   return getMessage(msg['Text'])

 if __name__ == '__main__':
     wechatRobot()
     itchat.auto_login(hotReload=True)
     itchat.run()

现在我们尝试将它接入openai

1.我们需要先安装 openai 和 itchat 这两个库

2.在Python代码中导入itchat库,并使用itchat.auto_login()函数登录自己的微信账号

代码语言:javascript复制
  import itchat

  itchat.auto_login()

3.编写函数,将itchat收到的文本消息作为OpenAI的输入,调用OpenAI的API生成回复。 4.将OpenAI生成的回复通过itchat发送到个人微信账号上。实现代码如下:

代码语言:javascript复制
  import openai
  import itchat
 
  # 配置 openai
  openai.api_key = "YOUR_API_KEY"
 
  # 配置 itchat
  itchat.auto_login(hotReload=True)
  
  # 创建微信好友聊天窗口
  friend = itchat.search_friends(name="FRIEND_NAME")[0]
  friend_username = friend["UserName"]
 
  # 监听微信消息,收到消息时自动回复
  @itchat.msg_register(itchat.content.TEXT)
  def reply_to_message(msg):
      # 从微信消息获取用户输入
      user_input = msg["Text"]
 
      # 使用 openai 进行文本生成
      model_engine = "text-davinci-002"
      prompt = "我想问"   user_input   ",答案是什么?"
      response = openai.Completion.create(
          engine=model_engine,
          prompt=prompt,
          max_tokens=100,
          n=1,
          stop=None,
          temperature=0.7,
      )
      answer = response.choices[0].text
 
      # 将 openai 返回的答案回复给用户
      itchat.send_msg(answer, friend_username)

  # 开始监听微信消息
  itchat.run()

✨补充:

•对python有兴趣的小伙伴可以加入我的知识星球,最近将分享很多关于ChatGpt的有趣知识。

0 人点赞