SpringAI教程:从零开始打造智能应用

Spring AI 教程:从零开始打造智能应用

引言

人工智能 (AI) 正在迅速改变我们与技术交互的方式。从聊天机器人到图像识别,再到个性化推荐,AI 驱动的应用无处不在。Spring AI 项目的出现,为 Java 开发者打开了通往 AI 世界的大门。它将 Spring 生态系统的简洁性和强大功能与领先的 AI 框架相结合,让构建智能应用变得前所未有的简单。

本教程将带你从零开始,一步步学习如何使用 Spring AI 构建智能应用。无论你是 AI 新手还是经验丰富的开发者,都能从中获益。

一、Spring AI 简介

Spring AI 是一个旨在简化 AI 应用开发的框架。它的核心目标是:

  • 降低 AI 集成难度: 提供一致且易于使用的 API,屏蔽底层 AI 框架的复杂性。
  • 拥抱 Spring 生态: 与 Spring Boot、Spring Cloud 等无缝集成,充分利用 Spring 的强大功能。
  • 支持多种 AI 模型: 支持 OpenAI、Hugging Face、Azure OpenAI 等多种流行的 AI 模型。
  • 提供常用 AI 功能: 提供文本生成、聊天机器人、图像识别、向量数据库等常见 AI 功能的抽象。

二、环境准备

  1. Java 开发环境: 确保你已安装 JDK 17 或更高版本。
  2. Maven 或 Gradle: 使用你熟悉的构建工具(Maven 或 Gradle)。
  3. IDE: 推荐使用 IntelliJ IDEA 或 Eclipse。
  4. AI 模型 API 密钥:
    • OpenAI: 访问 OpenAI 官网 (https://platform.openai.com/) 获取 API 密钥。
    • Azure OpenAI: 如果你选择使用 Azure OpenAI,需要在 Azure 门户中创建 OpenAI 服务并获取密钥和端点。
    • 其他模型: 根据你选择的模型,按照相应平台的说明获取 API 密钥。

三、创建 Spring Boot 项目

使用 Spring Initializr (https://start.spring.io/) 创建一个新的 Spring Boot 项目。

  • Project: Maven 或 Gradle
  • Language: Java
  • Spring Boot: 选择一个稳定的版本(例如 3.x)
  • Group: 你的组织或项目名称
  • Artifact: 项目名称
  • Dependencies:
    • Spring Web
    • Spring AI (OpenAI/Azure OpenAI/Hugging Face) (根据你选择的模型添加相应的依赖)

四、配置 Spring AI

application.propertiesapplication.yml 文件中配置 AI 模型:

示例(OpenAI):

properties
spring.ai.openai.api-key=YOUR_OPENAI_API_KEY

示例 (Azure OpenAI):

properties
spring.ai.azure.openai.api-key=YOUR_AZURE_OPENAI_API_KEY
spring.ai.azure.openai.endpoint=YOUR_AZURE_OPENAI_ENDPOINT
spring.ai.azure.openai.embedding-model=text-embedding-ada-002 #可选,指定embedding model
spring.ai.azure.openai.chat.model=gpt-35-turbo #可选,指定chat model

五、构建第一个 AI 应用:文本生成

让我们从一个简单的例子开始,使用 Spring AI 生成文本。

  1. 创建 Controller:

```java
import org.springframework.ai.client.AiClient;
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;

@RestController
public class TextGenerationController {

private final AiClient aiClient;

@Autowired
public TextGenerationController(AiClient aiClient) {
    this.aiClient = aiClient;
}

@GetMapping("/generate")
public String generateText(@RequestParam(defaultValue = "Tell me a joke") String prompt) {
    return aiClient.generate(prompt).getGeneration().getText();
}

}
```

  1. 解释:

    • @RestController: 将此类标记为 REST 控制器。
    • AiClient: Spring AI 提供的核心接口,用于与 AI 模型交互。 Spring Boot 会自动配置并注入 AiClient 的实例(基于你在 application.properties 中的配置)。
    • @GetMapping("/generate"): 定义一个 GET 请求映射,处理 /generate 路径的请求。
    • @RequestParam(defaultValue = "Tell me a joke") String prompt: 获取名为 prompt 的请求参数,如果未提供,则使用默认值 "Tell me a joke"。
    • aiClient.generate(prompt): 调用 AiClientgenerate 方法,传入提示文本,生成文本。
    • .getGeneration().getText(): 从响应中提取生成的文本。
  2. 运行应用:
    启动 Spring Boot 应用。

  3. 测试:
    在浏览器中访问 http://localhost:8080/generate?prompt=Write+a+short+poem+about+Spring,你会看到 AI 生成的文本。 你可以更改 prompt 参数来生成不同的内容。

六、构建聊天机器人

Spring AI 提供了 ChatClient 接口,可以轻松构建聊天机器人。

  1. 创建 Controller:

```java
import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
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;

@RestController
public class ChatController {

private final ChatClient chatClient;

@Autowired
public ChatController(ChatClient chatClient) {
    this.chatClient = chatClient;
}

@GetMapping("/chat")
public String chat(@RequestParam String message) {
    return chatClient.call(new Prompt(new UserMessage(message))).getResult().getOutput().getContent();
}

}

```

  1. 解释:

    • ChatClient: Spring AI提供的对话客户端接口
    • UserMessage: 用户消息
    • Prompt: 提示对象, 包含了用户输入的消息
    • call方法: 调用AI模型进行对话
    • getResult().getOutput().getContent(): 获取模型返回结果
  2. 运行并测试:
    在浏览器中访问http://localhost:8080/chat?message=你好

七、进阶功能

  • Prompt Engineering: 通过精心设计的提示(Prompt)来引导 AI 模型生成更符合你期望的结果。Spring AI 提供了 Prompt 模板功能,可以方便地构建复杂的 Prompt。

  • 向量数据库集成: Spring AI 支持与 Milvus、Weaviate、PgVector 等向量数据库集成,可以构建基于语义搜索、推荐系统等应用。

  • Function Calling: OpenAI 的 Function Calling 功能允许你定义自定义函数,并在与 AI 模型交互时调用这些函数。Spring AI 提供了对 Function Calling 的支持。

  • 多模态模型: Spring AI 不仅支持文本,也开始支持多模态模型, 例如OpenAI的 gpt-4-vision-preview模型, 可以进行图片理解.

  • 自定义模型: 如果你需要使用 Spring AI 尚未直接支持的模型,可以通过实现 AiClient 接口来自定义集成。

八、总结

Spring AI 为 Java 开发者提供了一个强大且易于使用的工具,可以轻松构建各种 AI 驱动的应用。本教程只是一个入门,Spring AI 还有许多强大的功能等待你去探索。

下一步

希望这篇教程能帮助你开启 Spring AI 的学习之旅!

THE END