如何在 Spring Boot 应用中配置多个 Spring AI 的 LLM 客户端
1. 概述
越来越多的现代应用开始集成大型语言模型(LLM),以构建更智能的功能。如何使用Spring AI快速整合LLM能力到自己的Spring Boot应用,在之前的博文中有过很多篇关于使用Spring AI使用不同供应商LLM的整合案例。虽然一个 LLM 能胜任多种任务,但只依赖单一模型并不总是最优。
不同模型各有侧重:有的擅长技术分析,有的更适合创意写作。简单任务更适合轻量、性价比高的模型;复杂任务则交给更强大的模型。
本文将演示如何借助 Spring AI,在 Spring Boot 应用中集成多个 LLM。
我们既会配置来自不同供应商的模型,也会配置同一供应商下的多个模型。随后基于这些配置,构建一个具备弹性的聊天机器人,在故障时可自动在模型间切换。
2. 配置不同供应商的 LLM
我们先在应用中配置来自不同供应商的两个 LLM。
在本文示例中,我们将使用 OpenAI 和 Anthropic 作为 AI 模型提供商。
2.1. 配置主 LLM
我们先将一个 OpenAI 模型配置为主 LLM。
首先,在项目的 pom.xml
文件中添加所需依赖:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId><version>1.0.2</version>
</dependency>
该 OpenAI Starter 依赖 是对 OpenAI Chat Completions API 的封装,使我们能够在应用中与 OpenAI 模型交互。
接着,在 application.yaml
中配置我们的 OpenAI API Key 和聊天模型:
spring:ai:open-ai:api-key: ${OPENAI_API_KEY}chat:options:model: ${PRIMARY_LLM}temperature: 1
我们使用 ${}
属性占位符从环境变量中加载属性值。另外,我们将温度设置为 1
,因为较新的 OpenAI 模型只接受这个默认值。
在完成上述属性配置后,Spring AI 会自动创建一个 OpenAiChatModel
类型的 bean。我们使用它来定义一个 ChatClient
bean,作为与 LLM 交互的主要入口:
@Configuration
class ChatbotConfiguration {@Bean@PrimaryChatClient primaryChatClient(OpenAiChatModel chatModel) {return ChatClient.create(chatModel);}
}
在 ChatbotConfiguration
类中,我们使用 OpenAiChatModel
bean 创建了主 LLM 的 ChatClient
。
我们使用 @Primary
注解标记该 bean。当在组件中注入 ChatClient
且未使用 Qualifier
时,Spring Boot 会自动注入它。
2.2. 配置次级 LLM
现在,我们将配置一个来自 Anthropic 的模型作为次级 LLM。
首先,在 pom.xml
中添加 Anthropic Starter 依赖:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-anthropic