本文演示如何使用 Spring AI 框架与大型语言模型 (LLM) 进行基本的交互
前提条件:
- 安装了 JDK 17 或更高版本。
- 安装了 Maven。
- 熟悉 Spring Boot 框架的基本概念。
- 一个OpenAI API Key (或一个兼容OpenAI API的替代方案,比如OpenRouter)
强调: Spring Boot版本至少是3.4
Maven 配置
在 pom.xml
文件中添加以下依赖项:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>java-ai</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>java-ai</name>
<description>java-ai</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-client-chat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
说明:
spring-boot-starter-web
: 提供构建 Web 应用程序所需的依赖项,包括 Spring MVC 和嵌入式 Tomcat 服务器。spring-ai-client-chat
: 提供 Spring AI 框架的核心 Chat Client API。spring-ai-starter-model-openai
: 提供与 OpenAI 模型集成的启动器依赖项。 这个依赖项简化了与 OpenAI 服务的连接配置。spring-ai-bom
: Spring AI 的 Bill of Materials (BOM) 文件,用于管理 Spring AI 相关依赖项的版本。 它确保所有 Spring AI 依赖项都使用兼容的版本。
Spring 配置
在 application.properties
或 application.yml
文件中添加以下配置:
spring.application.name=java-ai
# 使用openrouter提供的大预言模型
spring.ai.openai.api-key=${API_KEY:sk-or-v1-xxxxx}
spring.ai.openai.base-url=https://openrouter.ai/api
spring.ai.openai.chat.options.model=deepseek/deepseek-chat-v3-0324:free
spring.ai.openai.chat.options.max-tokens=32768
spring.ai.openai.chat.options.temperature=0.2
说明:
spring.application.name
: 设置应用程序的名称。spring.ai.openai.api-key
: 设置 OpenAI API 密钥. 请务必将sk-or-v1-17-xxxxx
替换为您自己的 OpenAI API 密钥,或者使用环境变量${API_KEY}
来注入密钥,这样可以提高安全性,避免密钥泄露。spring.ai.openai.base-url
: 设置OpenRouter API的地址。spring.ai.openai.chat.options.model
: 指定要使用的 OpenAI 模型。deepseek/deepseek-chat-v3-0324:free
是一个示例模型,您可以根据需要更改为其他支持的模型。spring.ai.openai.chat.options.max-tokens
: 设置模型生成响应的最大 token 数量。32768
是一个示例值,您可以根据需要调整。spring.ai.openai.chat.options.temperature
: 设置模型生成响应的温度。 温度越高,响应越随机;温度越低,响应越确定。0.2
是一个示例值,您可以根据需要调整。
Controller 代码
创建一个名为 HelloAiController.java
的文件,并添加以下代码:
package org.example.ai.controller;
import org.springframework.ai.openai.OpenAiChatModel;
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 java.util.Map;
@RestController
public class HelloAiController {
private final OpenAiChatModel chatModel;
@Autowired
public HelloAiController(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "讲一个关于小姐姐的笑话") String message) {
return Map.of("generation", this.chatModel.call(message));
}
}
说明:
@RestController
: 指示这是一个 REST 控制器,用于处理传入的 HTTP 请求。@Autowired
: 自动注入OpenAiChatModel
实例。 Spring 会自动查找并注入实现了OpenAiChatModel
接口的 bean。@GetMapping("/ai/generate")
: 将/ai/generate
路径映射到generate
方法。@RequestParam(value = "message", defaultValue = "讲一个关于小姐姐的笑话")
: 从请求参数中获取message
的值。 如果请求中没有message
参数,则使用默认值 “讲一个关于小姐姐的笑话”。chatModel.call(message)
: 调用 OpenAI 模型,将message
作为提示发送给模型,并返回模型的响应。Map.of("generation", this.chatModel.call(message))
: 将模型的响应封装到一个 Map 对象中,键为 “generation”,值为模型的响应。
测试效果
- 启动 Spring Boot 应用程序。
- 使用浏览器或 curl 等工具访问以下 URL:
http://127.0.0.1:8080/ai/generate
您应该会看到类似以下的响应:

您可以通过在 URL 中添加 message
参数来更改提示:
http://127.0.0.1:8080/ai/generate?message=介绍一下北京