• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java 接入openAI

武飞扬头像
小友_
帮助1

本文将介绍如何使用Java接入openAI SDK

提前准备:

  • openAI的token
  • 本地调试时需要科学上网(懂得都懂),否则接口可能会调用失败
  • 一台国外的服务器(部署时如果是国内的服务器则需要搭建代理,国外的服务器可直接使用,服务器节点最好在美国或者新加坡,如果只是本地调试,则无需准备)

maven依赖包

<dependency>  
    <groupId>com.theokanning.openai-gpt3-java</groupId>  
    <artifactId>service</artifactId>  
    <version>0.14.0</version>  
</dependency>

第一步:创建OpenAiService对象,使用该对象请求openAI服务

OpenAiService openAiService = new OpenAiService(AIToken, Duration.ofMillis(100000));
  • AIToken:上文所说的需要准备的openAI的token
  • Duration.ofMillis(100000):
    • 源码解释: http read timeout, Duration.ZERO means no timeout(翻译:http读取超时,持续时间。0表示没有超时)
    • openAI服务调用时会有一段持续时间(该持续时间可能是AI生成内容需要时间),该参数代表这个持续时间最长为多久,当参数值为Duration.ZERO时,接口不会超时
    • 该参数也可以不输入,超时时间默认为10秒
OpenAiService openAiService = new OpenAiService(AIToken);

//源码:
private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(10);

public OpenAiService(final String token) {  
    this(token, DEFAULT_TIMEOUT);  
}

第二步:创建请求参数对象(官网地址

String content = "如何学习Java";

CompletionRequest completionRequest = CompletionRequest.builder()  
    .prompt("请回答或扩写["   content   "],输出语言与输入语言保持一致。输出格式:使用json源码格式输出,json格式为[自定义json格式],保持层级")  
    .model("text-davinci-003")  
    .echo(false)  
    .n(1)  
    .maxTokens(2000)  
    .build();
  • prompt (必需,字符串或数组):
    • 源码解释:An optional prompt to complete from(翻译:用于完成的可选提示符)
    • 这里传你想向AI提出的问题即可,openAI会根据这个参数生成返回内容(上面例子是一个模版,content是用户传入的问题参数,这样不管用户输入什么内容,AI都能相对精准的生成内容,以json源码格式输出是为了后面在代码中解析AI生成的返回内容)
  • model (必需,字符串):
    • 源码解释:The name of the model to use. Required if specifying a fine-tuned model or if using the new v1/completions endpoint.
    • 该参数指需要使用的AI模型的名称,本文以text-davinci-003模型为例,各模型的介绍请自行查询(官网地址)。不同模型使用的API可能略有差异
    //该方法可获取所有可使用的AI模型
    List<Model> models = openAiService.listModels();
    
  • echo(布尔值或null,可选,默认为false):
    • 源码解释:Echo back the prompt in addition to the completion(翻译:除了完成之外还回显提示)
    • 是否在返回内容中回显提示词(prompt中的内容),视使用场景而定,上面的例子因为对用户输入的内容做了额外处理,并且为了方便实际应用场景中的解析,所以选择false
  • n (整数或null,可选,默认为1):
    • 源码解释:How many completions to generate for each prompt. Because this parameter generates many completions, it can quickly consume your token quota. Use carefully and ensure that you have reasonable settings for maxTokens and stop.(翻译:为每个提示生成多少个完成。 由于此参数会生成许多完成,因此它会快速消耗您的令牌配额。 谨慎使用并确保您对 maxTokens 和停止有合理的设置。)
    • 为prompt生成多少个回答。openAI返回对象中的内容结果集是一个List,这里传入几,List中就会有几条数据(后面获取结果集时会再说下这个)。没有在源码中查询到相关默认值,但是经过多次测试发现,如果没有传入此参数,结果集List都是只返回一条内容
  • maxTokens (整数或null,可选,默认为16):
    • 源码解释:The maximum number of tokens to generate. Requests can use up to 2048 tokens shared between prompt and completion. (One token is roughly 4 characters for normal English text)(翻译:要生成的最大令牌数。 请求最多可以使用提示和完成之间共享的 2048 个令牌。 (对于普通英文文本,一个标记大约为 4 个字符))
    • The token count of your prompt plus max_tokens cannot exceed the model's context length.(翻译:提示符加上max_tokens的令牌计数不能超过模型的上下文长度。模型的上下文长度在上方模型官网中有介绍,text-davinci-003模型的上下文长度是4,097 tokens)
    • 结果集中返回的单条记录的最大长度,若maxTokens配置的值过小,则返回内容字符串会被截断。
  • 更多参数请自行查阅官网

第三步:调用API,传入请求参数,等待AI生成结果,获取返回值

CompletionResult completion = openAiService.createCompletion(completionRequest);

CompletionResult数据结构

{
  "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
  "object": "text_completion",
  "created": 1589478378,
  "model": "gpt-3.5-turbo",
  "choices": [
    {
      "text": "\n\nThis is indeed a test",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 5,
    "completion_tokens": 7,
    "total_tokens": 12
  }
}

  • id:
    • 源码解释:A unique id assigned to this completion.(翻译:分配给此完成的唯一id。)
    • 即此次请求的一个标识而已
  • object:
  • created:
    • 源码解释:The creation time in epoch seconds.(翻译:创建时间(以纪元秒为单位)。)
    • 创建完成时的Unix时间戳
  • model:
    • 源码解释:The GPT model used.(翻译:使用的GPT模型)
    • 此次请求使用的模型,与第二步中的model参数保持一致
  • choices(List类型):
    • 源码解释:A list of generated completions.(翻译:生成的完成列表。)
    • 即AI根据prompt所生成的内容列表,第二步中的参数n为多少,该集合就有多少条记录
      • text:生成的文本。 如果 CompletionRequest.echo 为 true,将包含提示
      • index:返回列表中此完成的索引。
      • logprobs:所选令牌和顶部 CompletionRequest.logprobs 令牌的对数概率
      • finish_reason:GPT 停止生成的原因,例如“长度”。
  • usage:
    • 源码解释:The API usage for this request(翻译:此请求的 API 使用情况)
    • 完成此次请求的token的使用统计。
经过以上三步,OpenAI的调用流程就结束了,接下来就可以获取返回的内容文本去解析、实现自己的业务啦。
本文以text-davinci-003模型为例,若实际应用场景需要使用其他模型,需要注意是否更换相关API
封面图是百度上找的,如有侵权,请联系作者删除

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbcabb
系列文章
更多 icon
同类精品
更多 icon
继续加载