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 功能的抽象。
二、环境准备
- Java 开发环境: 确保你已安装 JDK 17 或更高版本。
- Maven 或 Gradle: 使用你熟悉的构建工具(Maven 或 Gradle)。
- IDE: 推荐使用 IntelliJ IDEA 或 Eclipse。
- 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.properties
或 application.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 生成文本。
- 创建 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();
}
}
```
-
解释:
@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)
: 调用AiClient
的generate
方法,传入提示文本,生成文本。.getGeneration().getText()
: 从响应中提取生成的文本。
-
运行应用:
启动 Spring Boot 应用。 -
测试:
在浏览器中访问http://localhost:8080/generate?prompt=Write+a+short+poem+about+Spring
,你会看到 AI 生成的文本。 你可以更改prompt
参数来生成不同的内容。
六、构建聊天机器人
Spring AI 提供了 ChatClient
接口,可以轻松构建聊天机器人。
- 创建 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();
}
}
```
-
解释:
ChatClient
: Spring AI提供的对话客户端接口UserMessage
: 用户消息Prompt
: 提示对象, 包含了用户输入的消息call
方法: 调用AI模型进行对话getResult().getOutput().getContent()
: 获取模型返回结果
-
运行并测试:
在浏览器中访问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 官方文档: https://docs.spring.io/spring-ai/reference/
- 探索 Spring AI 示例项目: https://github.com/spring-projects/spring-ai
- 加入 Spring AI 社区: 与其他开发者交流经验,共同学习。
希望这篇教程能帮助你开启 Spring AI 的学习之旅!