Spring AI 和聊天模型入门

本文将教你如何使用 Spring AI 项目构建基于不同聊天模型的应用程序。Spring AI 聊天模型提供了简单易用的接口,方便我们与这些模型进行交互。本示例默认使用 OpenAI,并通过 Maven Profile 切换 Anthropic 与 Ollama,同时通过 Spring Profile 支持多种 OpenAI 兼容模型。

源代码

如果您想自己尝试,可以查看我的源代码。为此,您必须克隆我的示例 GitHub 仓库。然后,您只需按照我的说明操作即可。

依赖

首先,我们先添加 Spring AI 的依赖,当前版本为 1.1.2

    <properties>
		<java.version>21</java.version>
		<spring-ai.version>1.1.2</spring-ai.version>
	</properties>

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

由于我们的示例应用程序公开了一些 REST 端点,因此我们需要包含 Spring Boot Web Starter。我们还可以包含 Spring Boot Test Starter 来创建一些 JUnit 测试。Spring AI 模块包含在 Maven profiles 部分中。默认情况下应用程序启用 openai Profile,并引入 spring-ai-starter-model-openai;如需切换到 Anthropic 或 Ollama,请使用 -Panthropic-Pollama 激活对应 Profile。以下是完整的依赖项列表。

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<profiles>
		<profile>
			<id>openai</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<dependencies>
				<dependency>
					<groupId>org.springframework.ai</groupId>
					<artifactId>spring-ai-starter-model-openai</artifactId>
				</dependency>
			</dependencies>
		</profile>
		<profile>
			<id>anthropic</id>
			<dependencies>
				<dependency>
					<groupId>org.springframework.ai</groupId>
					<artifactId>spring-ai-starter-model-anthropic</artifactId>
				</dependency>
			</dependencies>
		</profile>
		<profile>
			<id>ollama</id>
			<dependencies>
				<dependency>
					<groupId>org.springframework.ai</groupId>
					<artifactId>spring-ai-starter-model-ollama</artifactId>
				</dependency>
			</dependencies>
		</profile>
	</profiles>

连接到模型提供商

配置 OpenAI

在开始编写源代码之前,我们需要准备聊天模型工具。首先,我们来使用 OpenAI。我们需要在 OpenAI 平台 注册账号。登录后,访问 API 密钥页面 生成 API 令牌。设置令牌名称后,点击“创建密钥”按钮。创建完成后,请务必复制该密钥。

生成的令牌值应保存为环境变量。我们的示例 Spring Boot 应用程序从该 OPENAI_API_KEY 变量读取其值。

export OPENAI_API_KEY=<YOUR_TOKEN_VALUE>

配置 Anthropic

在 Anthropic 控制台创建 API Key,并将其保存为环境变量:

export ANTHROPIC_API_KEY=<YOUR_TOKEN_VALUE>

运行和配置 Ollama

与 OpenAI 或 Anthropic 不同,Ollama 旨在允许直接在工作站上运行大型语言模型 (LLM)。这意味着我们无需连接到远程 API 即可访问它。首先,我们必须从以下页面下载适用于我们操作系统的 Ollama 二进制文件。安装完成后,我们可以使用命令行界面 (CLI) 与之交互。接着选择要运行的模型。可用模型的完整列表可以在这里找到。这里,我们选择 qwen3:8b。

brew install ollama

ollama run qwen3:8b

配置 Spring Boot 属性

Ollama 通过端口公开 localhost,无需 API 令牌。选择模型后 llama3.2,我们需要相应地修改 Spring Boot 应用程序属性。

application.properties

spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.options.model=gpt-5
spring.ai.openai.chat.options.temperature=1

spring.ai.anthropic.api-key = ${ANTHROPIC_API_KEY}
spring.ai.anthropic.chat.options.model = claude-sonnet-4-5

spring.ai.ollama.chat.options.model = qwen3:8b

logging.level.org.springframework.ai.chat.client.advisor=DEBUG

当启用 anthropic 或 ollama 的 Maven Profile 时,对应的配置会生效。

Spring AI 聊天模型 API

Spring AI 提供 ChatClient 抽象,用于与不同类型的 LLM 进行交互,而无需与实际的模型供应商耦合。示例中通过 ChatClient.Builder 构建客户端,并在控制器中调用 prompt(...).call() 获取响应内容。

例如,在本项目中可以通过 ChatClientController 暴露一个最小可用的聊天接口。示例代码如下:

@RestController
@RequestMapping("/api/chat")
class ChatClientController {
    private final ChatClient chatClient;

    ChatClientController(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .build();
    }

    @PostMapping
    Output chat(@RequestBody @Valid Input input) {
        String response = chatClient.prompt(input.prompt()).call().content();
        return new Output(response);
    }
}

假设您已将 OpenAI 令牌导出到 OPENAI_API_KEY 环境变量,则可以使用以下命令运行应用程序:

mvn spring-boot:run

然后,可以测试聊天 API:

curl -s -X POST http://localhost:8080/api/chat -H "Content-Type: application/json" -d '{"prompt":"What is Spring Boot?"}'

{"content":"**Spring Boot** is an open-source Java-based framework that simplifies the creation of **standalone, production-grade Spring applications** with minimal configuration. It's built on top of the Spring Framework but removes much of its complexity."}%

使用其他 AI 提供商

本项目默认使用 OpenAI AI 提供商启动应用,也可以通过 Maven Profile 使用其他的 AI 提供商,例如:

使用 Anthropic:

export ANTHROPIC_API_KEY=<your-anthropic-api-key>
mvn spring-boot:run -Panthropic

使用 Ollama:

mvn spring-boot:run -Pollama

使用 OpenAI 兼容模型

许多 AI 服务商提供与 OpenAI API 兼容的接口。Spring AI 的 OpenAI Starter 通过配置 base-urlapi-key 以及可选的 chat.completions-pathmodel,即可无缝切换到这些兼容服务,无需修改任何 Java 代码。

本示例通过 Spring Profile 预置了多套 OpenAI 兼容配置,启动时指定 profile 即可切换模型:

Profile服务商环境变量说明
(默认)OpenAIOPENAI_API_KEY官方 OpenAI
deepseekDeepSeekDEEPSEEK_API_KEYDeepSeek 推理/对话模型
openrouterOpenRouterOPENROUTER_API_KEY聚合多种开源/商业模型
groqGroqGROQ_API_KEY高速推理,如 Llama
geminiGoogle GeminiGEMINI_API_KEYGemini 的 OpenAI 兼容端点
qwen阿里云 QwenDASHSCOPE_API_KEY通义千问 OpenAI 兼容模式
zhipu智谱 GLMZHIPU_API_KEYBigModel OpenAI 兼容接口
doubao火山引擎 豆包VOLC_ACCESS_KEYArk OpenAI 兼容接口
dmrDocker Model Runner本地 DMR 引擎(如 SmolLM)

示例:

使用 DeepSeek 模型启动应用

export DEEPSEEK_API_KEY=<your-deepseek-api-key>
mvn spring-boot:run -Dspring-boot.run.profiles=deepseek

使用 qwen 模型启动应用

export DASHSCOPE_API_KEY=<your-dashscope-api-key>
mvn spring-boot:run -Dspring-boot.run.profiles=qwen

这样,同一套 ChatClientController 代码即可在不同 OpenAI 兼容模型之间切换,只需更换 profile 和对应的环境变量。本仓库已在 resources 目录中提供了多份配置文件,可作为实际落地参考。

总结

这个例子并没有什么特别之处,只是展示了 Spring AI Chat Models API 的一些基本功能。我们快速回顾了提示、结构化输出、聊天记录和内置顾问等功能。我们还切换了一些常用的 AI Chat Models API 提供商。敬请期待更多相关文章。如果您想继续阅读我博客上的 AI 系列文章,请点击这里