微信公众号访问 ChatGPT
ChatGPT 目前热度非常高,作为一款自动应答 AI 机器人,从大家使用后的反馈情况看,其所能提供的服务范围极其广泛,聊天、写代码、写小说、查错误、分类、翻译等等似乎无所不能;只要给它提需求,基本上都可以获得还比较靠谱的答案,功能无比强大。本篇文章介绍如何使用 Python 实现在微信中访问 ChatGPT。
一、注册账号
到 OpenAI 的官网注册一个账号,注册完了需要通过电话激活一下账号,目前不提供国区电话的激活方式,但可以使用虚拟电话来激活,网上有很多教程可以参考。
二、创建 OpenAI API KEY
外部应用访问 ChatGPT 的服务需要调用 OpenAI API,这时需要用到 API KEY,这个API KEY 在账号注册完成后就可以创建了。
创建完成后把 API KEY 保存到一个文件中,后面会用到。需要说明的是 OpenAI API 使用是收费的,初始会有 18$ 的额度,根据调用 API 时使用的具体服务来扣费,比如选择不同的模型。已花费的详细数据可以查询。
三、安装 OpenAI Python库
$pip install openai
四、配置微信公众号平台
五、UWSGI 服务配置
详细步骤请参考这篇文章的描述。
六、Python 服务端代码实现
对从微信公众号平台发过来的消息类型进行判断,如果是文本消息同时消息内容的头部有 AI# 三个字符,则调用 OpenAI API 访问 ChatGPT 服务,再把服务的返回结果发送回微信公众号平台并显示给微信客户端。
程序中使用的 openai.api_key 就是在第二步创建的,另外这里用到了OpenAI GPT-3 的模型“text-davinci-003”。详细的模型介绍请参考官网的说明。
handle.py
from utils import check_signature
import web
from wechatpy import parse_message
from wechatpy.replies import TextReply
from wechatpy.replies import ImageReply
from wechatpy.replies import ArticlesReply
from wechatpy import create_reply
import openai
openai.api_key = "sk-..."
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "欢迎来到客飞翱的公众号"
echostr = data.echostr
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
token = "验证服务器配置时定义的token"
isok = check_signature(token, signature, timestamp, nonce)
print ("handle/GET func: timestamp, signature: ", timestamp, signature)
if isok==1:
return echostr
else:
return ""
except Exception as Argument:
return Argument
def POST(self):
try:
data = web.data()
print ("Handle Post webdata is ", data)
msg = parse_message(data)
if msg.type == 'text' and msg.content.lstrip().startswith("AI#"):
inputStr = msg.content.split("#", 1)[1]
completion = openai.Completion.create(
model="text-davinci-003",
prompt=inputStr,
max_tokens=100,
temperature=0.5)
fast_reply = create_reply(completion.choices[0].text, message=msg)
return fast_reply.render()
except Exception as Argument:
return Argument
index.py
import sys
import web
from handle import Handle
sys.path.append('/home/user/webpy')
urls = (
'/weixin', 'Handle',
)
app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
application = app.wsgifunc()