Spring Boot 整合 Spring AI 实现项目接入ChatGPT

Spring Boot 整合 Spring AI 实现项目接入ChatGPT

前言

​ 随着人工智能技术的快速发展,越来越多的应用程序开始集成人工智能功能,以提供更智能、更个性化的体验。诸如ChatGPT等开放性大型语言模型的出现,使得自然语言处理和对话系统的开发变得更加容易和普及。这些技术已经在社交媒体、客户服务、教育等领域展现出巨大潜力,对于提升用户体验和提高工作效率至关重要。

优势

​ 在之前,openai已经提供了相应的Java整合方案:https://github.com/TheoKanning/openai-java,但是Spring AI测试版本的发布,给我们提供了一个新的整合方向,与原先方法相比,Spring AI具有如下优势:

  1. 更快速的开发周期: Spring AI的原生生态封装使得开发人员能够更快地集成人工智能功能,加快项目的迭代周期。

  2. 与现有技术栈无缝整合: 如果你的项目已经是基于Spring Boot构建的,那么使用Spring AI将更加方便,无需引入额外的技术栈,能够更好地利用已有的技术和资源。

  3. 强大的社区支持: Spring框架拥有庞大的社区支持和活跃的开发者社区,能够为开发人员提供更多的技术支持和解决方案。

简介

​ 本篇旨在为读者提供一个基本的使用案例,帮助学习如何在Spring Boot应用程序中集成Spring AI,以实现智能化的功能。通过本文,读者将了解如何利用现有的人工智能技术,为他们的应用程序增加自动化和智能化的功能,从而提高用户体验和应用程序的价值。接下来,我们将详细介绍如何在Spring Boot项目中配置和使用Spring AI,为你带来更智能的应用体验。

准备工作

  • jdk 17
  • Spring Boot 3.2.0
  • maven 3.9

步骤

1. 导入依赖

pom.xml写入如下内容:

<repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>0.8.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2. 配置自己的api-key和基础访问地址base-url

api-key的申请获得方式这里不在赘述,可查阅相关资料去官网上进行申请

application.ym配置如下内容:

server:
  port: 9876

spring:
  ai:
    openai:
      # 全局配置
      api-key: sk-xxx # 申请的api-key
      base-url: https://api.openai.com/ #openAi访问地址(不写默认)
      # 嵌入API配置
      embedding:
        options:
          model: text-davinci-003
      # 聊天API配置
      chat:
        #指定某一个API配置(覆盖全局配置)
        api-key: sk-xxx
        base-url: https://api.openai.com/
        options:
          model: gpt-3.5-turbo # 模型配置

3. 配置自己的openai聊天客户端

​ 这里需要注意的是,在application.yml文件中已经配置好了api-key和base-url后可以直接在service层进行自动装配,但是只能配置一种参数类型的客户端,这里通过读取配置文件内容的方式自定义一个可以自动装配的Bean,后续还可以根据自己的需要配置不同参数配置的客户端,配置参数详情可查看官网<OpenAI Chat :: Spring AI Reference>

OpenAiChatConfig.java

@Configuration
public class OpenAiChatConfig {

    /*
     * 读取配置文件中系统默认配置
     */
    @Value("${spring.ai.openai.chat.api-key}")
    private String apiKey;
    @Value("${spring.ai.openai.chat.base-url}")
    private String baseUrl;
    
    /**
     * 通过配置自定义的apiKey和baseUrl访问中转/反向代理,实现面向用户的OpenAiChat客户端
     * 可通过OpenAiApi类的构造方法配置不同的基本参数
     * @return 自定义的OpenAiChat客户端
     */
    @Bean("myOpenAiChatClient")
    public OpenAiChatClient myOpenAiChatClient(){
        OpenAiApi openAiApi = new OpenAiApi(baseUrl, apiKey);
        return new OpenAiChatClient(openAiApi);
    }
}

4. 接口调用

OpenAiChatService.java

public interface OpenAiChatService {
    String easyChat(String message);
}

OpenAiChatServiceImpl.java

@Service
public class OpenAiChatServiceImpl implements OpenAiChatService {
    @Resource(name = "myOpenAiChatClient")
    private OpenAiChatClient chatClient;
    
    @Override
    public String easyChat(String message) {
        Prompt prompt = new Prompt(message);
        return chatClient.call(prompt).getResult().getOutput().getContent();
    }
}

ChatController.java

@RestController
@RequestMapping("/ai")
public class ChatController {
    @Resource
    private OpenAiChatService openAiChatService;

    @GetMapping(value = "/easyChat",params = "message")
    public String easyChat(@RequestParam String message){
        return openAiChatService.easyChat(message);
    }
}

5. 结果演示

总结

​ Spring AI 是一种原生生态的封装,旨在为 Spring Boot 应用程序提供快速集成人工智能功能的解决方案。通过与 Spring 框架的完美整合,Spring AI 可以利用 Spring 提供的依赖注入,使得集成人工智能功能变得更加简便和灵活。借助 Spring AI,开发团队能够更快速地实现智能化的应用程序,为用户提供更优秀的体验。

3 Likes

你好,请问因为我们是在国内访问gpt,我们是否要在代码通过System.setProperty里设置vpn的代理ip和端口

如果是用的官方api-key和官方的base-url就需要,可以配置一些中转代理的也是能够访问到的

好的 谢谢