01.前言
ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。同时也引起无数网友沉迷与ChatGPT聊天,成为大家讨论的火爆话题。
大家好,我是baird~
去年12月份大火的ChatGPT,让人印象深刻,尤其是不在像之前的AI客服那样答非所问。只要你提问合理,它回答的问题基本上就是你想要的答案。比如,通过ChatGPT可以让你写代码更轻松,加以引导,它就能为你写出一段符合要求的函数代码,你修改一下就能达到质量要求。
目前网上体验ChatGPT的方式主要有两种
- 直接官网体验 ChatGPT官网
这种体验效果较好,但需要梯子访问 - API访问
通过比如微信机器人或微信公众号等作为前端入口,后台调用openai的API接口返回数据。 这种体验稍差,但在国内每个人都体验无需梯子。
独乐乐不如众乐乐,为了让更多人能快速体验到ChatGPT,我选择第二种方式,做一个简单的开发,共享出来让大家访问。
对于微信机器人的方式,网上已有很多教程,这里我直接选择微信公众号的方式进行开发。(有公众号开发需求的朋友可以重点关注)
02.准备阶段
准备OpenAI账号
- 自己注册 直接上链接供大家参考 注册参考地址
- 万能淘宝 淘宝直接搜ChatGPT账号,9.9带回家
自己注册会遇到手机验证码验证问题,淘宝也有此服务,但为了省时间,我直接选择了购买账号。
获取API KEY
登陆账号则前往 API管理页面 创建一个 API Key 并保存下来,后面需要在项目中配置这个key。
账号创建有免费的 $18 额度,使用完可以更换邮箱重新注册。目前体验期是到4月1日截止,没来得及体验的朋友尽快体验噢~🚗
微信公众号
微信公众平台上注册或使用测试公众号
03.开发阶段
流程框架
- 根据微信公众号开发规范,我们需要开发一个后台服务,这个服务需要提供一个统一API接口,微信公众号会去调用这个API接口,将用户信息转发到该服务。
- 后台服务将用户消息再包装,调用OpenAI的API接口,该接口则返回ChatGPT回复的信息,该服务再返回给用户。
整体流程比较简单,主要关注的点是微信公众号开发流程,需要验证AppSecret等信息,详情可参考微信开发文档
软件框架
这里我采用 Go语言进行开发,使用Beego+WechatSDK快速开发
Beego: github.com/beego/beego
Go Wechat SDK: github.com/silenceper/…
后台服务流程图如下:
开发细节
- 主要处理逻辑如下,这里有个问题需要注意。微信公众号回复的超时时间是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 数据越高代表回答的随机性越大,感兴趣的朋友可以自行调整体验
#chatgpt
gptkey = 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
gptmodel = "text-davinci-003"
gptmaxtoken = 1024
gpttemperature = 0.7
- 微信公众号调试时,使用内网穿透软件能方便在本地进行调试
这里我推荐一款我在用的免费软件netapp,大家可以自行查阅
04.项目地址
Github: officialaccount-chatgpt
项目地址上有我自己的公众号,欢迎大家体验
05.后续
目前该项目只是一个Demo,还有很多可以优化的地方。比如,通过识别特定前缀判断是访问ChatGPT的请求,避免所有请求都访问,这块需要结合业务去考虑。
最后希望能给大家一点启发和帮助,感谢阅读。