Skip to content

ptonlix/officialaccount-chatgpt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Officialaccount-ChatGPT

English | 简体中文

微信公众号体验ChatGPT

Go OpenAI Redis WechatSDK license

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。同时也引起无数网友沉迷与ChatGPT聊天,成为大家讨论的火爆话题。

01.前言

大家好,我是baird~

去年12月份大火的ChatGPT,让人印象深刻,尤其是不在像之前的AI客服那样答非所问。只要你提问合理,它回答的问题基本上就是你想要的答案。比如,通过ChatGPT可以让你写代码更轻松,加以引导,它就能为你写出一段符合要求的函数代码,你修改一下就能达到质量要求。

目前网上体验ChatGPT的方式主要有两种

  1. 直接官网体验 ChatGPT官网
    这种体验效果较好,但需要梯子访问
  2. API访问
    通过比如微信机器人或微信公众号等作为前端入口,后台调用openai的API接口返回数据。 这种体验稍差,但在国内每个人都体验无需梯子。

独乐乐不如众乐乐,为了让更多人能快速体验到ChatGPT,我选择第二种方式,做一个简单的开发,共享出来让大家访问。

对于微信机器人的方式,网上已有很多教程,这里我直接选择微信公众号的方式进行开发。(有公众号开发需求的朋友可以重点关注)

直接官网体验参考地址 体验教程
微信机器人开发参考 参考地址

02.准备阶段

准备OpenAI账号

  1. 自己注册 直接上链接供大家参考 注册参考地址
  2. 万能淘宝 淘宝直接搜ChatGPT账号,9.9带回家

自己注册会遇到手机验证码验证问题,淘宝也有此服务,但为了省时间,我直接选择了购买账号。

获取API KEY

登陆账号则前往 API管理页面 创建一个 API Key 并保存下来,后面需要在项目中配置这个key。

WX20230131-090207@2x.png

账号创建有免费的 $18 额度,使用完可以更换邮箱重新注册。目前体验期是到4月1日截止,没来得及体验的朋友尽快体验噢~🚗

WX20230131-090155@2x.png

微信公众号

微信公众平台上注册或使用测试公众号

03.开发阶段

流程框架

frame.png

  1. 根据微信公众号开发规范,我们需要开发一个后台服务,这个服务需要提供一个统一API接口,微信公众号会去调用这个API接口,将用户信息转发到该服务。
  2. 后台服务将用户消息再包装,调用OpenAI的API接口,该接口则返回ChatGPT回复的信息,该服务再返回给用户。

整体流程比较简单,主要关注的点是微信公众号开发流程,需要验证AppSecret等信息,详情可参考微信开发文档

软件框架

这里我采用 Go语言进行开发,使用Beego+WechatSDK快速开发

Beego: https://github.com/beego/beego
Go Wechat SDK: https://github.com/silenceper/wechat

后台服务流程图如下:

software.png

开发细节

  • 主要处理逻辑如下,这里有个问题需要注意。微信公众号回复的超时时间是5s,而访问OpenAI的API处理时间往往是超过5秒的,这里需要用到异步处理。获取用户的openid,调用微信API再把信息返回给该用户
func (o *OfficialaccountController) AnyHandle() {

	// 传入request和responseWriter
	offAccService := services.NewOfficialAccountService(&wechatConfig.WxConf)
	server := offAccService.OA.GetServer(o.Ctx.Request, o.Ctx.Output.Context.ResponseWriter)
	//设置接收消息的处理方法
	server.SetMessageHandler(offAccService.Handle)
	//处理消息接收以及回复
	err := server.Serve()
	if err != nil {
		fmt.Println(err)
		return
	}
	offAccService.OpenId = server.GetOpenID() //获取openid
	//发送回复的消息
	server.Send()
	go offAccService.SendSyncMessage()
}
  • 配置文件说明,这里主要说明一下OpenAI的API接口配置
    gptmodel 选择哪个模型,默认可以参考text-davinci-003这个模型即可
    gptmaxtoken 最大输入的字符数,默认最大为2048。输入越长,收费越高,具体参考OpenAI的API文档
    gpttemperature 数据范围在0~1 数据越高代表回答的随机性越大,感兴趣的朋友可以自行调整体验
  • Redis redisaddr中默认配置redis是docker network中Redis容器的别名
#chatgpt
gptkey = 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
gptmodel =  "text-davinci-003"
gptmaxtoken = 1024
gpttemperature = 0.7

#redis
redisaddr = redis:6379  
  • 微信公众号调试时,使用内网穿透软件能方便在本地进行调试
    这里我推荐一款我在用的免费软件netapp,大家可以自行查阅

04.部署运行

项目部署采用容器部署,命令如下

# 生成镜像
docker build -t ptonlix/officialaccount-chatgpt:v1.8 -f Dockerfile .

# 或者直接从docker hub下载
docker pull  ptonlix/officialaccount-chatgpt:v1.8 

# 生成网络
docker network create test-network

# 运行Redis Redis可以自行部署,修改app.conf中配置项即可
docker pull redis

docker run -p 6379:6379 --name redis \
--network test-network \
--network-alias redis \
-v /e/Docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /e/Docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes 

# 运行容器
docker run -itd -p 8080:8080 --network test-network --restart always -v /root/officialaccount/conf:/app/conf ptonlix/officialaccount-chatgpt:v1.8

# 查看日志
docker logs -f 6b05e1c81380

05.体验环境

附上我自己的公众号,关注后直接输入即可体验ChatGPT,欢迎大家体验
欢迎大家加我个人微信,讨论ChatGPT问题和更多的实际应用

创作不易,目前都是使用个人账户,您可以使用一杯咖啡的钱支持我,后续提供给大家更好的体验!感谢支持!

06.后续

目前该项目只是一个Demo,还有很多可以优化的地方。比如,通过识别特定前缀判断是访问ChatGPT的请求,避免所有请求都访问,这块需要结合业务去考虑。
最后希望能给大家一点启发和帮助,感谢阅读。

2023.2.14更新:
目前看大家的问题和公众号的使用情况,大家比较热情但问题比较多。
本周我会开始对该项目进行更新迭代优化。

  1. 修复一些日志不全问题 ✔️
  2. 优化公众号展示效果 ✔️
  3. 增加失败重试机制✔️

2023.2.18更新:

  1. 支持联系上下文 ✔️

后续计划,主要能减少API请求次数:

  1. 缓存优化,保留热点请求 🕐
  2. 热点请求语意匹配分析 🕐

欢迎大家加我个人微信,人多我会组一个群,大家可以一起讨论ChatGPT,有机会可以一起做些事情。
感谢大家支持!

07.免责声明

The code is for demo and testing only. 代码仅用于演示和测试。

⚠️ ⚠️ ⚠️ 请勿将本系统代码用于商业用途!

仿冒或冒用ChatGPT、OpenAI名义开展经营活动,可能构成《商标法》、《反不正当竞争法》下的一系列侵权行为; 以之牟利造成消费者损失的,可能产生《商标法》、《反不正当竞争法》、《消费者权益保护法》下的民事或行政责任,情节严重并造成重大损失的,还有可能构成刑事犯罪; 如果提供这种跨境经营服务存在私自搭建国际信道的情形,还有可能违反《网络安全法》、《刑法》的相关规定,承担行政责任或构成刑事犯罪。

SPONSORED BY