赞
踩
chatGPT(全名:Chat Generative Pre-trained Transformer)是由OpenAI公司推出的一款聊天机器人程序,既其公司下的一款聊天机器人产品,于2022年11月30日发布,该程序于同年的12月13日加入了接入校验cf认证,因此本次调研主要针对与chatGPT同源的InstructGPT(text-davinci-003)进行接入,这也是目前国内市场上接入所谓chatGPT的企业所接入的实际语言模型,具体chatGPT与InstructGPT的区别可以参照openAI官方于Reddit上的回复内容(原文地址),总结下来实际上chatGPT相当于时使用InstructGPT相关的数据模型通过微调而衍生的产品,而InstructGPT则是用于API层面的对接,通过阅读官方文档也可得出该结论([文档地址](Models - OpenAI API)),同时openAI所提供的数据模型是非常强大的,本次我们只针对文本模型做探讨。
由于目前OpenAI并未对中国大陆进行地区支持,因此该网站的账号申请需要特殊网络环境,以及真实可用的境外手机号,具体申请步骤在此不做赘述,可参考下文中的申请流程。
1.登录上文注册好的账号,进入控制台页面,界面展示如下:
2.点击个人头像,展开后点击查看appkey,操作图如下:
3.进入后点击创建令牌,即可获取到对应令牌,获取到后建议保存到本地,只显示一次,也可以后续重新创建,操作图如下:
获取到对应token后建议保存,后续调用api时均使用该token进行调用
前言中有提到该公司对于文字的问答均有对应的数据模型,目前官网支持GPT-3的文本模型有以下几种,具体区别可参考官网中的解释,个人建议在不考虑实际业务的场景下使用最新的即可,因为就数据模型而言越新的数据模型,其模型的功能经过长期的机器学习以及版本迭代肯定是更为完善的,并且其所使用的训练数据也更为庞大及具有时效性,当然具体的使用还需结合业务场景选择最优解,下表为目前文档中给到的文本模型情况,及个人对各个模型的梳理:
LATEST MODEL(型号) | DESCRIPTION(描述) | MAX REQUEST(最大请求量) | TRAINING DATA(数据训练截至日期) | 个人分析 |
---|---|---|---|---|
text-davinci-003 | Most capable GPT-3 model. Can do any task the other models can do, often with higher quality, longer output and better instruction-following. Also supports inserting completions within text. | 4,000 tokens | Up to Jun 2021 | 目前最新的数据模型,与当下所说的chatGPT为衍生关系,更符合人类惯有的思维逻辑,但由于数据的庞大导致速度略慢,在不要求性能的情况下可进行选择。 |
text-curie-001 | Very capable, but faster and lower cost than Davinci. | 2,048 tokens | Up to Oct 2019 | 较上文中的模型而言,训练数据存在过时的情况,单相较于上文中庞大的数据集,他的反应速度相对快一些,并且较成本而言相对低廉 |
text-babbage-001 | Capable of straightforward tasks, very fast, and lower cost. | 2,048 tokens | Up to Oct 2019 | 同上(比较对象为curie) |
text-ada-001 | text-ada-001Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.2,048 tokensUp to Oct 2019 | 2,048 tokens | 2,048 tokens | 同上(比较对象为babbage) |
上文只是粗略的对各个模型做了相应的描述,具体区别请参考[官方文档](模型 - OpenAI API),也可使用官方推出的模型处理比较工具获取模型的比较结果,模型比较工具
下文是针对这三种模型接口调用费用描述图:
针对费用情况,新注册的帐号享用前三个月十八美元免费额度,可在控制台进行查看,查看方式如下图:
经过上述操作后,我们可获取到对应的token,目前便可直接进行接口的调用,具体的参数可参考以下文档,再次便不进行一一列举。
DEMO代码:
HttpClient httpClient = HttpClients.createDefault(); HttpPost request = new HttpPost(); request.setURI(URI.create("https://api.openai.com/v1/completions")); request.setHeader("Content-Type", "application/json"); request.setHeader("Authorization", "Bearer 上文拿到的token"); String[] a = new String[2]; a[0] = "Human:"; a[1] = "AI:"; JSONObject requestBody = new JSONObject(); requestBody.put("prompt", "提问语句"); requestBody.put("model", "所使用的模型编号"); requestBody.put("temperature", 0); requestBody.put("max_tokens", 4000); requestBody.put("top_p", 1); requestBody.put("frequency_penalty", 0.0); requestBody.put("presence_penalty", 0.0); requestBody.put("stop", a); request.setEntity(new StringEntity(requestBody.toString(),"utf-8")); HttpResponse response = httpClient.execute(request); HttpEntity responseEntity = response.getEntity(); String responseString = EntityUtils.toString(responseEntity); JSONObject responseJson = new JSONObject(responseString); String choices1 = responseJson.getString("choices"); List<Map> choices = JacksonUtil.toList(choices1, Map.class); Map<String,String> s = choices.get(0); System.out.println(s.get("text"));
返回结果:
经多次发现测试,该模型有以下几点需要注意:
由于官方并未给到维持会话的具体说明,经多次测试发现,在后续提问的过程中带入之前的上下文可做到一定程度的会话保持,但并不能做到完全符合人类逻辑思维,并且由于接口对提问的字符长度有所限制(最大限制4000),所以只能做到部分上下文带入,由此得出结论:
该模型在回答一些结论性问题时是比较优秀的,但针对一些联系上下文的回答则不能做到稳定输出
由于该模型的维护时间与当前时间存在较大差异,经调研发现,在去处理一些实时性的问题时,会出现问题,例如询问今天的日期是什么,他会回答2020年7月14日(实际是完全对不上的),因此得出结论理:
尽量避免这类实时性问题的提问,针对这类问题期待后续官方是否会进行修复,若要深入开发则需要我们自己进行数据模型的维护,针对这类实时性得问题进行微调或等后续chatGPT的API可接入时直接进行替换。
经调研,该技术目前虽然在国内并未做到支持,但其接口调用在使用本地网络时是可以正常返回的(不排除后续进行封锁),因此这一点也是再接入企业项目时需考虑的风险。
注:上文中所提到的文档,大多需要进行网络环境的配置,请注意
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。