Spring Boot中集成OpenAI-Java,并使用新版模型(gpt-3.5-turbo)

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

OpenAI-Java是一个Java语言的人工智能库,提供了常用的机器学习算法和自然语言处理工具,以便使用Java进行人工智能开发。该库基于深度学习技术,可用于构建各种类型的AI应用程序。OpenAI-Java的目标是使Java开发人员具备开发人工智能应用程序的能力,同时利用Java开发的优势:强类型编程、跨平台等,来构建高性能、高效率的AI应用程序。

升级步骤

在之前的文章中,我介绍了如何将 OPENAI 的 JAVA SDK(OpenAI-Java)集成到 Spring Boot 项目中。如果您对这个过程有任何不明白的地方,可以参考我的文章(https://joseke.blog.csdn.net/article/details/129332499)。

但是这次,我要向您推荐一个更加强大且经济实惠的模型,那就是 GPT-3.5 Turbo。相比之前我们使用的达芬奇模型(text-davinci-003),GPT-3.5 Turbo 拥有更出色的性能,而且其 token 价格仅为达芬奇模型的 10%。因此,我强烈建议您升级到 GPT-3.5 Turbo。通过这个版本的模型,您可以期望获得更加高效和便捷的文本生成体验,为您的项目注入新的活力。

1 升级OpenAI-Java SDK版本

直接修改项目中的POM版本号至0.11.1,可以去maven仓库查询最新版本,如下所示

<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/client -->
<dependency>
   <groupId>com.theokanning.openai-gpt3-java</groupId>
   <artifactId>client</artifactId>
   <version>0.11.1</version>
</dependency>

2 初始化OpenAiService类

如果是在spring boot配置中定义的OpenAiService 则不需要做任何将修改,但是这个类提示已经废弃,大家不要担心,不需要做任何变更,配置如下

@Configuration
public class OpenAiConfiguration {

    //open ai 密钥配置
    @Value("${open.ai.key}")
    private String openAiKey;
    //请求超时配置
    @Value("${open.ai.request.timeout}")
    private long timeout;
    //初始化
    @Bean
    public OpenAiService openAiService(){
        return new OpenAiService(openAiKey, Duration.ofSeconds(timeout));
    }
}

3 修改OPENAI 请求实例

在之前的文章中我们使用了如下方式实例化了一个请求类

CompletionRequest completionRequest = CompletionRequest.builder()
        .prompt(prompt) //提问的问题
        .model(openAiModel) //模型 - text-davinci-003
        .echo(true)
        .temperature(0.7)
        .topP(1d)
        .frequencyPenalty(0d)
        .presencePenalty(0d)
        .maxTokens(maxTokens)
        .build();
CompletionResult completionResult = openAiService.createCompletion(completionRequest);
String text = completionResult.getChoices().get(0).getText();

但在新版中这种实例化方式完全不可用,需要升级至以下方式进行实例化才可以使用新模型,其中的配置都是用默认的基本就满足大部分的需求了。

List<ChatMessage> messages = buildChatMessage(prompt);
ChatCompletionRequest completionRequest = ChatCompletionRequest.builder()
        .model(openAiModel)
        .messages(messages) 
        .build();
ChatCompletionResult completionResult = openAiService.createChatCompletion(completionRequest);
List<ChatCompletionChoice> choices = completionResult.getChoices();
if(CollectionUtils.isEmpty(choices)){
    log.warn("No answer response {}",JSON.toJSONString(completionResult));
    return "";
}
return choices.get(0).getMessage().getContent();

消息列表实例创建方法

/**
 * 构建消息类
 * @param prompt
 * @return
 */
private List<ChatMessage> buildChatMessage(String prompt){
    List<ChatMessage> messages = new ArrayList<>();
    ChatMessage systemMsg = new ChatMessage();
    systemMsg.setRole(RoleTypeEnum.system.name());
    systemMsg.setContent("我是一名JAVA程序员,可以回答任何JAVA相关的问题。");
    messages.add(systemMsg);
    ChatMessage userMsg = new ChatMessage();
    userMsg.setRole(RoleTypeEnum.user.name());
    userMsg.setContent(prompt);
    messages.add(userMsg);
    return messages;
}

在新版版的模型中,官方开放了三种角色供大家配置分别是system、user和assistant

system:系统消息,用来设置 ChatGPT 的行为。

user:用户消息,用来和 ChatGPT 交互。

assistant:助理消息,用来帮助你存储 ChatGPT 在此之前的回复。

因此我们在消息构建的时候直接配置机器人的角色,让机器人只回复这个领域的知识。同时我们还可以通过配置助理消息实现多轮会话,这个我会在后续的文章中详细讲解。

总之为了避免无故的token消耗,粉丝朋友们大家还是尽快升级吧!

最后大家的点赞关注是我们更新最大的动力,拜托啦!

猜你喜欢

转载自blog.csdn.net/zhouhonggnay/article/details/129903341