几个月前,ChatGPT引发了一场人工智能革命,国外的大厂已经拉开了新一轮的军备竞赛,国内也有阿里、百度等企业纷纷跟进。ChatGPT的热度持续火爆,先有微软的Bing集成该技术,后有谷歌机器人Bard,热度一直在延续。。在北京时间的3月2日凌晨,OpenAI又扔出一颗重磅的炸弹,ChatGPT的官方API正式对外开放。
我也是在昨天下午才关注到这个消息,OpenAI 宣布开放 API,开发人员可将 ChatGPT 集成到自己的产品中。于是立刻试了一下,发现 https://api.openai.com 国内可以直连,这是否意味着国内的类ai产品将会如雨后春笋一般的涌现?我喜出望外,就想着将该接口集成到我的公众号里面。
然而正当我对未来充满期待的时候,我得到了两个消息:
一个是该接口是收费的,按照token收费,价格是0.002刀/1000token(官方说法,1000token约750个英文单词)。 一盆冷水浇下来,当我一筹莫展时候,发现官方有提供免费的额度,18刀/三个月的试用,本着不用白不用的原则,我还是上了。我觉得OpenAI官方的这一个收费制度,一点都不Open。吐槽归吐槽,也能在一定程度上理解,目前决定先用着看看,后续收费的事情,后续再说吧,是否需要付费该接口,可能需要进一步研究一下。
还有一个消息,是非官方公布的。就是这个ChatGPT接口刚公布出来十个小时后,突然不能访问了,经过反复检查确认,最终遗憾的发现,是被防火长城给封堵了,不得不感叹这个速度还是很快的,看来郭嘉的态度也是很明确的,这一点不好评价。
以上这两个困难并不能阻挡我前进的步伐,出于学术研究的目的,我还是花费几个小时将该官方的接口集成到了自己的公众号里面,有同样出于学术研究目的的朋友,可以关注一下我的公众号 麻瓜分享 ,发送消息给后台 可以获得ChatGPT的答复。
接下来我分享一下我是如果一步步实现的。
首先,我使用的技术是.NET Core,版本是6.0。使用到了CI/CD(持续集成,持续交付)的开发方法。我前面有介绍过(网站介绍)。这次得益于不断的巩固学习,才能在实战中,快速上手,快速将新的技术应用到产品上。
废话不多说,步骤如下
一,需要在公众号上面接入开发者。
接入微信公众平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
也不难弄,具体可以查看官方的 接入概述 。
二,接入完成后,后台服务器就可以接受到用户发送的消息,具体的接口可以参考 官方文档 。
从简介中可看到,如果是直接回复用户消息,需要做出快速响应。微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。使用过网页版ChatGPT的朋友应该都知道,在15s以内回答完问题,是非常理想情况下的状态,大多数时候一个问题可能会花费几十秒甚至上分钟。微信恐怕等不了那么久,这时候就会服务器故障的提示。幸好的是相比于网页版,API接口速度快很多,一般15s以内就可以完成回复。
另外微信还提供了客服消息,可以在服务器无法快速做出应答的时候,异步处理该请求,然后在48h以内调用客服接口回复用户,这个接口提供了更多的可能性,不过暂时用不上,下次更新的时候可能会考虑加进来。
三,接下来是将用户的请求转发给ChatGPT的API 官方文档 。
虽然接口内容不多,读起来也简单清晰,但我还是使用了非官方SDK(C#版本),安装了Betalgo.OpenAI.GPT3包,配置上ApiKey之后,就可以直接使用了。chat的接口,与text completion的接口单词请求不同,他是上下文连贯的,就是说你发送了第一个问题后,在第二个问题提问的时候,还需要将第一个问题捎带上,这样子才能形成一个会话。
四,部署测试
在本地单元测试完成后,上传到git,然后一键部署到服务器,再在公众号上面进行测试。定位问题,留下日志,然后修改代码,提交部署。如此反复。
中途遇到的问题:
问题一:5秒内未应答(感觉有时候不足5s),微信重推信息
重复推送的消息MsgId是固定的,所以可以根据该Id来确定消息唯一性,将第一条消息的问题,同时也将ChatGPT的回复缓存起,后续再收到相同信息时,直接回复缓存的答案。这样子就能避免重复请求ChatGPT,造成不必要的钱财消耗。后期也可能采用上面所说的,通过客服消息回复用户的方式。
问题二:token统计的问题
在我第一次集成text completion接口的时候,有一个请求参数max_tokens,我一开始填2048,然后报错,说token超过长度,这个max_tokens是答案的合计。如果不填或者忽略该字段,我使用的SDK又会给一个很小的值,导致回复的答案被截断。所以我采用了SDK中提供的动态计算问题的token的方式,然后将答案的token+问题的token<=2048。
问题三:API接口费用统计的问题
查看了官网的统计页面,用了两天,好像这个价钱也还在接受范围以内。
问题四:如何保持上下文连贯性
前面也稍微提到过,调用接口的时候,需要保留之前的会话,需要将之前的问题也保留下来,在下次新的问题的时候,一起加入在list中请求接口。
问题五:如何访问ChatGPT的官方API
这个有两种方式,一种是租一台国外的服务器运行该接口的代码,我使用的是挂载VPN的形式。科学上网的话大家可以在网上翻翻教程。
问题六:是否考虑过使用网页版的接口
暂时来看,网页版接口虽然是免费,但是响应速度也比较慢,毕竟未受到官方支持,稳定性不敢保证。目前官方接口还在免费阶段,暂时先用着。
其实整个集成的过程不复杂,昨天晚上我下班后开始弄,在0:00的时候终于顺利完成,不耽误工作,不耽误睡觉。有困难,克服困难以后,真的很有成就感的。