公众号接入chatGPT的详细教程 附Python源码
作者:攻城狮杰森 发布时间:2021-09-10 04:48:31
标签:公众号,chatGPT
前置准备
一个域名
一台服务器
一个公众号
域名配置
在你的域名服务商新建二级域名并绑定服务器主机IP
服务器配置
上传下面的python文件到你的服务器,并修改代码段中相应位置代码(token、api-key、port)
import time
from flask import Flask,make_response,request
import openai
from flask import Flask, request
from flask_caching import Cache
import xml.etree.cElementTree as ET
import hashlib
import requests
import re
import os
cnt = 0
my_wx_token = "" # 自定义字母和数字组合即可,后续需要填入公众号后台
my_gpt_key = "" # 这里填写你在OpenAI后台创建的API-KEY
my_switch_chatgpt = True
app = Flask(__name__)
env_dist = os.environ
cache = Cache(app, config={'CACHE_TYPE': 'simple', "CACHE_DEFAULT_TIMEOUT": 30})
@app.route('/',methods=['GET','POST'])
def wechat():
if request.method == 'GET':
signature = request.args.get("signature", "")
timestamp= request.args.get("timestamp", "")
nonce= request.args.get("nonce", "")
echostr= request.args.get("echostr", "")
print(signature, timestamp, nonce, echostr)
token=my_wx_token
data =[token, timestamp, nonce]
data.sort()
temp = ''.join(data)
sha1 = hashlib.sha1(temp.encode('utf-8'))
hashcode=sha1.hexdigest()
print(hashcode)
if hashcode == signature:
print("wechat commit check OK")
return echostr
else:
print("GET error input msg")
return "error-return\r\n"
else:
xmlData = ET.fromstring(request.stream.read())
msg_type = xmlData.find('MsgType').text
if msg_type == 'text':
ToUserName = xmlData.find('ToUserName').text
FromUserName = xmlData.find('FromUserName').text
CreateTime = xmlData.find('CreateTime').text
print(ToUserName)
print(FromUserName)
print(CreateTime)
global cnt
cnt += 1
print('-------> ' + str(cnt))
return generate_response_xml(FromUserName, ToUserName, xmlData.find('Content').text)
def text_reply(FromUserName, ToUserName, output_content):
reply = '''
<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>
'''
response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), output_content))
response.content_type = 'application/xml'
return response
def generate_response_xml(FromUserName, ToUserName, input_content):
output_content = generate_response(input_content)
return text_reply(FromUserName, ToUserName, output_content)
outofsevice_txt = "抱歉,<a href=\"https://mp.weixin.qq.com/s/0LN37YiERJgMyvIDpzRcAQ\">攻城狮杰森的ChatGPT服务助手</a>正在维护中,暂时无法预估维护持续时间,请明天再来尝试吧。"
@cache.memoize(timeout=60)
def generate_response(prompt):
if not my_switch_chatgpt:
return outofsevice_txt
openai.api_key = my_gpt_key
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0.0,
presence_penalty=0.0,
)
message = response.choices[0].text
print(message)
ans = message.strip()
return ans
if __name__ == '__main__':
app.run(host='0.0.0.0', port=xxxx, debug=True)#开放xxxx端口
使用宝塔是比较快捷的配置方式,安装宝塔面板后,进入软件商店,安装下面两个插件
打开 python 项目管理器 ,简单配置下我们要启动的项目
启动后映射项目域名,顶级域和二级域都可以,比如我这里填入的是 chatgpt.coder-jason.cn
公众号配置
进入公众号后台,找到设置与开发,进入基本配置,由于我这里已经配置好了,这里仅演示下怎么添加启用
点击添加配置
token 值就是在上述代码段中填入的值,自定义字母和数字组合即可
点击提交后,如果服务器中的项目启动无误,则会提示 token校验成功
接下来就可以回到公众号和 chatGPT 愉快的交流啦~
来源:https://cloud.tencent.com/developer/article/2218457


猜你喜欢
- 题目大意问 太阳神有一牛群,由白、黑、花、棕四种颜色的公、母牛组成,其间关系如下,求每种牛的个数。公牛中,白牛多于棕牛,二者之差为
- 前言转眼间已经参与过我厂好几个小程序的开发了,下面本妹子将开发中的那些注意点和各位小伙伴们分享下,妥妥的干货一枚。一、WXML不要换行写,有
- asp.net和php哪个更好?在.net之前,微软的是ASP。在微软的大力推广下,其看起来还是很有前途的。但现在,微软想推广asp.net
- 1、使用+加号+加号是将两个list列表相加,返回一个新的列表对象,会消耗额外的内存。#!/usr/bin/env python# -*-
- 最近没有项目做,闲来无事写了一个小demo,特此分享到脚本之家平台,供大家参考下,本文写的不好还请各位大侠见谅!功能及方法逻辑都注释在代码中
- 一、全局阈值原图:整幅图采用一个阈值,与图片的每一个像素灰度进行比较,重新赋值;1.效果图2.源码import cv2import matp
- 随着网络的发展,人们通过各种方式使用它。今天,网络购物,跟朋友或者不认识的人聊天,管理银行账户,以及一些日常应用,共享照片或视频,等等。事实
- 最近在学习Python的时候遇到一个知识点,在此记录下来可变参数会自动填充前面的同名默认参数比如下面这个函数def add_student(
- 一、self的位置是出现在哪里?首先,self是在类的方法中的,在调用此方法时,不用给self赋值,Python会自动给他赋值,而且这个值就
- NVIDIA驱动安装与更新首先查看电脑的显卡版本,步骤为:此电脑右击–>管理–>设备管理
- PDOStatement::columnCountPDOStatement::columnCount — 返回结果集中的列数。(PHP 5
- Python字典设置默认值我们都知道,在 Python 的字典里边,如果 key 不存在的话,通过 key 去取值是会报错的。>>
- 前言在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成。当我准备再新增一个 % 取模的运算符时,会发现
- 最近的答题赢钱很火爆,我也参与了几次,有些题目确实很难答,但是10秒钟的时间根本不够百度的,所以写了个辅助挂,这样可以出现题目时自动百度,这
- 如下:re.split(pattern, string, [maxsplit], [flags])pattern:表示模式字符串,由要匹配的
- Tensor.to(device)和model.to(device)的区别区别所在使用GPU训练的时候,需要将Module对象和Tensor
- 1、python中__name__是什么意思?很多python的初学者可能都会遇到一个问题:__name__是什么意思?在刚开始学习pyth
- 使用pip安装Django时报错,先是:C:\Users\admin>pip install django Collecting dj
- msxml3.dll 错误 '80004005'未指定的错误/Project/lijiang_071017/include/
- 背景:由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫。由于当前系统是单数据库系统原因,能优化的地方也尽力优化了但是数据库瓶颈还是严重