【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT

之前我们已经打通了Python微信公众号和服务器之间的数据流通路,可以添加我们自己的业务了。
如果还没有打通环境的同学,请参考我的【微信公众号开发】专栏,或下面系列文章:
【超详细!超多图!】Python微信公众号开发(1)
【超详细!】Python微信公众号开发(2)
【超详细!超多图!】【代码管理】服务器代码上传Github

本篇文章将小试牛刀,将时下爆火的OpenAI GPT大模型能力接入进来,完成公众号内与用户的自动对话。

题外话:ChatGPT与OpenAI的关系与区别
因为我注意到好多人都分不清ChatGPT和OpenAI,遂解释下:

  • OpenAI是个公司,它有GPT系列大模型及对外开发的接口
  • ChatGPT是个对话软件,底层是调用的OpenAI的GPT系列大模型
  • 开发者想自己实现对话软件功能,是去仿照ChatGPT,需要调用OpenAI的API接口

文章目录

    • 0. OpenAI 环境
      • 0.1 OpenAI Key的获取
        • 0.1.1 原生OpenAI Key的获取
        • 0.1.2 使用国内代理
    • 1. 你的第一个OpenAI程序
    • 2. OpenAI接入公众号,与用户对话

0. OpenAI 环境

接入OpenAI,是通过调用OpenAI API的方式。在这之前,你首先需要一个OpenAI的Key。

0.1 OpenAI Key的获取

由于众所周知的原因,OpenAI是不对国内用户正式开放的。所以如果你想使用ChatGPT或调用OpenAI的接口,要么搭梯子,要么使用国内代理。

如果想先免费体验一下ChatGPT的功能,可以点这里去体验ChatGPT3.5,这里去体验ChatGPT4

0.1.1 原生OpenAI Key的获取

这种方式就是搭梯子,去OpenAI官方注册账号,申请Key。网上教程很多,也很详细,但是也很繁琐。尤其是注册账号需要国外的手机号、需要特定的邮箱,这两个限制就堵死了绝大多数人的路。如果你想通过此种方式获取,本文不作详细教程,你可以参考以下文章:

  • ChatGPT账号注册指南
  • 开通OpenAI 官方的 API
0.1.2 使用国内代理

做OpenAI国内代理的很多,我这里使用的是DevAGI。别问为什么,也是被别人推荐的,也没有过其它的… DevAGI用起来比较简单,它提供给你一个虚拟的API key,支持原生OpenAI的API,用起来和原生的没区别。
(1)注册DevAGI账号

  • 去DevAGI官网注册

(2)登录后,点击“获取key”
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第1张图片
(3)应该能看到你的Key了,首次注册应该会赠送一定的免费次数,用多了之后可能就需要花钱了… 没办法,毕竟人家代理服务器也需要成本(自己搭梯子也要花钱,还不稳定…)。​如果你有更好的方式,欢迎私信或评论告诉我,我也很想知道有没有白嫖的方式,毕竟比较穷…
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第2张图片

1. 你的第一个OpenAI程序

有了key,让我们来真正开始自己的第一个OpenAI程序!
(1)确保你已经有了Python环境可用,我这里直接在之前的服务器中写代码。

(2)打开VSCode —> 远程打开刚才创建的“文件夹”,不会远程的请参考这篇文章:【新人必会】远程开发可视化 - VSCode篇

(3)在项目文件夹里,创建一个名为 .env 的文件
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第3张图片

(4)在.env文件中输入下列信息:

  • 如果你是原生的OpenAI API Key,有科学上网的方法,则在.env文件中写:
    OPENAI_API_KEY="sk-xxx"   # <-------- 你的原生 OpenAI API Key
    
  • 如果你是用我上面说的DevAGI平台的虚拟API Key,则在.env文件中写:
    OPENAI_API_KEY="sk-xxx"   # <-------- 你的原生 OpenAI API Key
    OPENAI_BASE_URL="https://api.fe8.cn/v1" # 注意:一个字母都不要错
    

.env文件的作用就是配置一些Key或URL或一些环境变量,在程序运行时通过 load_dotenv 加载。这样也避免了将一些重要的信息暴露在代码中。

(5)安装OpenAI相关库

pip install python-dotenv openai

注意我这里安装到的openai版本为1.6.1,openai的接口在<1.0和>1.0的版本中有很大变化。
在这里插入图片描述

(6)新建一个文件名为"openai_test.py",填入以下代码:

from openai import OpenAI
# 加载 .env 到环境变量
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-3.5-turbo-1106",
    messages=[
        {
            "role": "user",
            "content": "你是谁?"
        }
    ],
)

print(response.choices[0].message.content)

(7)运行程序,结果如下说明运行成功。
在这里插入图片描述

以上这段代码的意思就是调用OpenAI的接口,发送“你是谁?”,然后收到回复“我是一个AI助手,能为您提供帮助和回答您的问题。有什么我可以帮到您的吗?”

如果你遇到下面的错误:
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第4张图片
说明你的原生OpenAI Key没有科学上网,无法链接OpenAI网络。或者你的DevAGI的.env文件中的虚拟Key和Base没有配置对。请仔细检查。

2. OpenAI接入公众号,与用户对话

上面我们的OpenAI API已经成功调用了,接下来只需要将用户的对话内容传入就可以了。

(1)将上面OpenAI的调用封装成函数

from openai import OpenAI
# 加载 .env 到环境变量
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = OpenAI()

###### 这里封装成函数 #######
def get_chat_completion(prompt, model = "gpt-3.5-turbo-1106"):
    messages = [{
        "role": "user",
        "content": prompt
    }]
    
    response = client.chat.completions.create(
        model = "gpt-3.5-turbo-1106",
        messages=messages
    )

    return response.choices[0].message.content

(2)在用户发送消息过来时,调用以上接口获取大模型生成结果,然后将结果封装成回复xml格式

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask, request, make_response
...... # 请参照之前教程
from openai_test import openai_test

...... # 请参照之前教程
    
@app.route('/wechatai', methods=['GET', 'POST'])
def wechatai():
    if request.method == 'GET':
        return verify_wechat(request)
    else:
        # 处理POST请求
        print("user request data: ", request.data)
        printXML(request.data)
        # 解析用户信息
        user_message_content, from_user_name, to_user_name = getUserMessageContentFromXML(request.data)
        print("user message content: ", user_message_content)
        
        # 调用OpenAI接口生成回复内容 # <---------- 这里接入!!!
        response_content = openai_test.get_chat_completion(user_message_content)
        print("response content: ", response_content)
        
        # 生成回复信息并返回
        return generate_response_xml(from_user_name, to_user_name, response_content)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

(3)运行程序,测试一下,已经可以愉快的对话了
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第5张图片
至此,我们将OpenAI大模型基础对话能力接入了微信公众号中,实现了简单的与用户对话的功能。
功能比较简单,就是用户发一句话,大模型回一句话。没有记忆能力和上下文关联能力等。但是原理已经走通了。


从今天开始,持续学习,开始搞事情。踩坑不易,欢迎关注我,围观我!
【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT_第6张图片

有任何问题,欢迎+vx:jasper_8017,我也是个小白,想与志同道合的朋友一起讨论,共同进步!

你可能感兴趣的:(大模型,微信公众号开发,python,python,微信,gpt,chatgpt,笔记,经验分享,微信开放平台)