Java简化AI服务集成的利器SpringAI 入门使用实战教程

Spring AI是一个基于Spring框架的AI服务集成工具,它简化了与外部AI平台(如OpenAI、Ollama等)的集成过程。通过Spring AI,我们可以轻松地与不同的AI模型进行交互,并将其功能集成到Spring Boot应用中。

1. 项目基础配置

1.1 创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目,建议使用Spring Initializr(https://start.spring.io)生成项目。在项目中,选择以下依赖:

  • Spring Web:用于构建Web服务。
  • Spring Boot DevTools:便于开发过程中自动重启。
  • Spring AI:集成Spring AI模块,简化与AI平台的交互。

然后,生成项目并导入到IDE中。

1.2 添加Spring AI依赖

pom.xml中,添加Spring AI依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter</artifactId>
    <version>最新版本</version>
</dependency>

请根据Spring AI的最新版本更新版本号。有关版本的最新信息,请参考Spring AI官方文档

1.3 配置OpenAI API

application.ymlapplication.properties文件中,配置OpenAI API密钥。以下是application.yml的配置示例:

spring:
  ai:
    openai:
      api-key: "你的OpenAI API密钥"

1.4 配置Ollama API

如果你还需要接入Ollama,除了OpenAI配置外,可以在application.yml中添加Ollama的配置:

spring:
  ai:
    ollama:
      api-key: "你的Ollama API密钥"

2. 使用OpenAI服务

2.1 创建OpenAI客户端

Spring AI为与OpenAI进行交互提供了便捷的API。你只需注入OpenAIService并调用相关方法即可。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.openai.OpenAIService;

@RestController
public class OpenAIController {

    @Autowired
    private OpenAIService openAIService;  // 注入OpenAIService

    @GetMapping("/openai/chat")
    public String chatWithOpenAI(@RequestParam String prompt) {
        // 调用OpenAI API生成回应
        String response = openAIService.chatCompletion(prompt);
        return response;  // 返回生成的回复
    }
}

中文注释说明:

  • OpenAIService:Spring AI提供的服务,用于与OpenAI模型进行交互。它封装了与OpenAI的API调用,简化了请求的处理过程。
  • chatCompletion(prompt):该方法发送一个聊天请求,传递用户输入的提示,返回OpenAI生成的回复。

2.2 OpenAI返回示例

调用上述接口时,访问http://localhost:8080/openai/chat?prompt=你好,你会收到类似的响应:

{
  "choices": [
    {
      "text": "你好!有什么我可以帮你的吗?"
    }
  ]
}

Spring AI自动处理了与OpenAI的通信和API响应,你只需要关注请求和响应的格式。

3. 使用Ollama服务

3.1 创建Ollama客户端

与OpenAI类似,Spring AI也提供了与Ollama模型交互的功能。我们只需注入OllamaService并调用相关方法。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.ollama.OllamaService;

@RestController
public class OllamaController {

    @Autowired
    private OllamaService ollamaService;  // 注入OllamaService

    @GetMapping("/ollama/chat")
    public String chatWithOllama(@RequestParam String prompt) {
        // 调用Ollama API生成回应
        String response = ollamaService.chatCompletion(prompt);
        return response;  // 返回生成的回复
    }
}

中文注释说明:

  • OllamaService:Spring AI封装的服务,用于与Ollama进行交互。它简化了与Ollama的请求和响应处理。
  • chatCompletion(prompt):该方法发送用户输入的提示请求,并返回Ollama生成的回复。

3.2 Ollama返回示例

通过访问http://localhost:8080/ollama/chat?prompt=你好,你将收到类似以下的响应:

{
  "choices": [
    {
      "text": "你好!有什么我可以帮你解答的问题吗?"
    }
  ]
}

4. 进阶使用:企业级集成

在企业级应用中,可能需要更复杂的配置,比如同时使用多个AI模型、动态选择服务、管理API密钥等。Spring AI提供了灵活的配置和扩展能力,下面我们来看一些进阶的使用示例。

4.1 配置多个AI服务

假设你需要同时接入多个AI服务(例如,OpenAI和Ollama),可以在application.yml中配置多个AI服务:

spring:
  ai:
    openai:
      api-key: "你的OpenAI API密钥"
    ollama:
      api-key: "你的Ollama API密钥"

Spring会自动加载配置并将相应的服务注入到应用中。

4.2 动态选择AI服务

有时你可能需要根据不同的业务需求动态选择使用OpenAI或Ollama。例如,用户可以选择自己想要的模型或AI提供者。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.openai.OpenAIService;
import org.springframework.ai.ollama.OllamaService;

@RestController
public class DynamicAIController {

    @Autowired
    @Qualifier("openAIService")  // 注入OpenAIService
    private OpenAIService openAIService;

    @Autowired
    @Qualifier("ollamaService")  // 注入OllamaService
    private OllamaService ollamaService;

    @GetMapping("/dynamic-chat")
    public String chat(@RequestParam String prompt, @RequestParam String serviceType) {
        if ("openai".equalsIgnoreCase(serviceType)) {
            return openAIService.chatCompletion(prompt);  // 使用OpenAI服务
        } else if ("ollama".equalsIgnoreCase(serviceType)) {
            return ollamaService.chatCompletion(prompt);  // 使用Ollama服务
        } else {
            return "请选择有效的服务类型:openai 或 ollama";
        }
    }
}

中文注释说明:

  • @Qualifier("openAIService"):通过@Qualifier注解指定注入的具体服务,这样你可以选择性地注入不同的AI服务。
  • chat(prompt, serviceType):根据serviceType参数动态选择使用的AI服务。用户可以指定openaiollama

4.3 配置文件分离与管理

在生产环境中,通常会将API密钥和敏感信息存储在安全的位置,比如环境变量、Spring Cloud Config等。你可以在application.yml中通过占位符来动态加载密钥:

spring:
  ai:
    openai:
      api-key: "${OPENAI_API_KEY}"
    ollama:
      api-key: "${OLLAMA_API_KEY}"

在运行时,Spring会自动从环境变量中加载OPENAI_API_KEYOLLAMA_API_KEY

5. 高级功能:日志、监控与优化

5.1 日志和监控

在企业级应用中,监控和日志记录是至关重要的。Spring Boot与Spring AI一起,可以通过Spring Boot Actuator来监控API的使用情况。你可以使用Spring Boot的默认日志机制来记录AI模型的调用信息:

logging.level.org.springframework.ai=DEBUG

这将启用Spring AI相关的详细日志,帮助你追踪API的调用和响应。

5.2 性能优化

在高并发场景下,API调用可能会遇到性能瓶颈。可以通过以下方式进行优化:

  • 使用异步调用(例如,@Async注解)处理AI请求,避免阻塞主线程。
  • 对常用的AI请求结果进行缓存,减少重复请求,提高效率。

通过Spring AI,我们可以简洁地集成多种AI服务(如OpenAI和Ollama),并使用Spring的强大功能进行灵活配置和扩展。无论是简单的聊天机器人,还是复杂的企业级AI集成,Spring AI都能提供高效的支持。

本教程介绍了Spring AI的基础使用方法,包括如何接入OpenAI和Ollama服务。你可以根据实际需求进一步扩展和优化应用,充分发挥Spring框架的优势。

标签: Java, AI

相关文章

Java中线程池遇到父子任务示例及避坑

在Java中使用线程池可以有效地管理和调度线程,提高系统的并发处理能力。然而,当涉及到父子任务时,可能会遇到一些常见的Bug,特别是在子线程中查询数据并行处理时。本文将通过示例代码展示这些常见问...

java中异步任务的实现详解

在Java中实现异步任务是一种提高应用程序性能和响应性的常用技术。异步编程允许某些任务在等待其他任务完成时继续执行,从而避免了阻塞。本文将介绍几种在Java中实现异步任务的方法,并讨论它们的解决...

解密 ClassFinal 加密的 Java Jar包

ClassFinal 是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。要点...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件