当前位置:   article > 正文

使用java从零起步接入chatGPT_chatgpt-java

chatgpt-java

chatGPT调研文档

前言

chatGPT(全名:Chat Generative Pre-trained Transformer)是由OpenAI公司推出的一款聊天机器人程序,既其公司下的一款聊天机器人产品,于2022年11月30日发布,该程序于同年的12月13日加入了接入校验cf认证,因此本次调研主要针对与chatGPT同源的InstructGPT(text-davinci-003)进行接入,这也是目前国内市场上接入所谓chatGPT的企业所接入的实际语言模型,具体chatGPTInstructGPT的区别可以参照openAI官方于Reddit上的回复内容(原文地址),总结下来实际上chatGPT相当于时使用InstructGPT相关的数据模型通过微调而衍生的产品,而InstructGPT则是用于API层面的对接,通过阅读官方文档也可得出该结论([文档地址](Models - OpenAI API)),同时openAI所提供的数据模型是非常强大的,本次我们只针对文本模型做探讨。

1、接入准备

1.1、注册账号

由于目前OpenAI并未对中国大陆进行地区支持,因此该网站的账号申请需要特殊网络环境,以及真实可用的境外手机号,具体申请步骤在此不做赘述,可参考下文中的申请流程。

openAI账号申请流程(可使用chatGPT功能)

1.2、获取调用token

1.登录上文注册好的账号,进入控制台页面,界面展示如下:

在这里插入图片描述

2.点击个人头像,展开后点击查看appkey,操作图如下:

在这里插入图片描述

3.进入后点击创建令牌,即可获取到对应令牌,获取到后建议保存到本地,只显示一次,也可以后续重新创建,操作图如下:

在这里插入图片描述

获取到对应token后建议保存,后续调用api时均使用该token进行调用

2、正式接入

2.1、模型分析

前言中有提到该公司对于文字的问答均有对应的数据模型,目前官网支持GPT-3的文本模型有以下几种,具体区别可参考官网中的解释,个人建议在不考虑实际业务的场景下使用最新的即可,因为就数据模型而言越新的数据模型,其模型的功能经过长期的机器学习以及版本迭代肯定是更为完善的,并且其所使用的训练数据也更为庞大及具有时效性,当然具体的使用还需结合业务场景选择最优解,下表为目前文档中给到的文本模型情况,及个人对各个模型的梳理:

LATEST MODEL(型号)DESCRIPTION(描述)MAX REQUEST(最大请求量)TRAINING DATA(数据训练截至日期)个人分析
text-davinci-003Most 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 tokensUp to Jun 2021目前最新的数据模型,与当下所说的chatGPT为衍生关系,更符合人类惯有的思维逻辑,但由于数据的庞大导致速度略慢,在不要求性能的情况下可进行选择。
text-curie-001Very capable, but faster and lower cost than Davinci.2,048 tokensUp to Oct 2019较上文中的模型而言,训练数据存在过时的情况,单相较于上文中庞大的数据集,他的反应速度相对快一些,并且较成本而言相对低廉
text-babbage-001Capable of straightforward tasks, very fast, and lower cost.2,048 tokensUp to Oct 2019同上(比较对象为curie)
text-ada-001text-ada-001Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.2,048 tokensUp to Oct 20192,048 tokens2,048 tokens同上(比较对象为babbage)

上文只是粗略的对各个模型做了相应的描述,具体区别请参考[官方文档](模型 - OpenAI API),也可使用官方推出的模型处理比较工具获取模型的比较结果,模型比较工具

下文是针对这三种模型接口调用费用描述图:

在这里插入图片描述

针对费用情况,新注册的帐号享用前三个月十八美元免费额度,可在控制台进行查看,查看方式如下图:

在这里插入图片描述

2.2、代码编写

经过上述操作后,我们可获取到对应的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"));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

返回结果:

在这里插入图片描述

3、总结

经多次发现测试,该模型有以下几点需要注意:

3.1、上下文会话的信息抽取。

由于官方并未给到维持会话的具体说明,经多次测试发现,在后续提问的过程中带入之前的上下文可做到一定程度的会话保持,但并不能做到完全符合人类逻辑思维,并且由于接口对提问的字符长度有所限制(最大限制4000),所以只能做到部分上下文带入,由此得出结论:

该模型在回答一些结论性问题时是比较优秀的,但针对一些联系上下文的回答则不能做到稳定输出

3.2、实时性问题

由于该模型的维护时间与当前时间存在较大差异,经调研发现,在去处理一些实时性的问题时,会出现问题,例如询问今天的日期是什么,他会回答2020年7月14日(实际是完全对不上的),因此得出结论理:

尽量避免这类实时性问题的提问,针对这类问题期待后续官方是否会进行修复,若要深入开发则需要我们自己进行数据模型的维护,针对这类实时性得问题进行微调或等后续chatGPT的API可接入时直接进行替换。

3.3、网络环境问题

经调研,该技术目前虽然在国内并未做到支持,但其接口调用在使用本地网络时是可以正常返回的(不排除后续进行封锁),因此这一点也是再接入企业项目时需考虑的风险。

注:上文中所提到的文档,大多需要进行网络环境的配置,请注意

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/962843
推荐阅读
相关标签
  

闽ICP备14008679号