当前位置: 首页 > news >正文

Spring Boot AI 之 Chat Client API 使用大全

ChatClient提供了一套流畅的API用于与AI模型交互,同时支持同步和流式两种编程模型。

流畅API包含构建Prompt组成元素的方法,这些Prompt将作为输入传递给AI模型。从API角度来看,Prompt由一系列消息组成,其中包含指导AI模型输出和行为的指令文本。

AI模型主要处理两类消息:

  1. 用户消息(User Messages) - 来自用户的直接输入
  2. 系统消息(System Messages) - 由系统生成用于引导对话

这些消息通常包含占位符,运行时将根据用户输入进行替换,从而定制AI模型对用户输入的响应。

此外还可指定Prompt选项,例如:

  • 使用的AI模型名称
  • 控制生成输出随机性/创造性的temperature参数设置

创建ChatClient

ChatClient通过ChatClient.Builder对象创建。可以通过以下两种方式获取构建器实例:

  1. 使用Spring Boot自动配置的ChatModel获取预构建的ChatClient.Builder
  2. 通过编程方式自行创建Builder实例

使用自动配置的ChatClient.Builder

在最简单的使用场景中,Spring AI提供了Spring Boot自动配置功能,会预先创建一个原型ChatClient.Builder bean供您注入到类中。以下是一个获取简单用户请求字符串响应的基础示例:

@RestController
class MyController {private final ChatClient chatClient;public MyController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/ai")String generation(String userInput) {return this.chatClient.prompt().user(userInput).call().content();}
}

在这个简单的示例中,用户输入会设定用户消息的内容。call() 方法会向人工智能(AI)模型发送请求,而 content() 方法则将 AI 模型的响应以字符串(String)形式返回。

与多个聊天模型协作

在单个应用程序中,可能会在以下几种场景下需要与多个聊天模型协作:

  • 为不同类型的任务使用不同的模型(例如,使用功能强大的模型处理复杂推理任务,使用速度更快、成本更低的模型处理简单任务)
  • 在某个模型服务不可用时,实施回退机制
  • 对不同模型或配置进行 A/B 测试
  • 根据用户偏好为用户提供模型选择
  • 结合专用模型(一个用于代码生成,另一个用于创意内容创作等)

默认情况下,Spring AI 会自动配置一个单一的 ChatClient.Builder bean。然而,在应用程序中,可能需要与多个聊天模型协作。以下是处理这种情况的方法:

在所有情况下,通过设置属性 spring.ai.chat.client.enabled=false 来禁用 ChatClient.Builder 的自动配置。

这样,就可以手动创建多个 ChatClient 实例了。

使用单一模型类型的多个 ChatClient 实例

本节将介绍一种常见用例,即需要创建多个 ChatClient 实例,这些实例都使用相同的底层模型类型,但配置不同。

// Create ChatClient instances programmatically
ChatModel myChatModel = ... // already autoconfigured by Spring Boot
ChatClient chatClient = ChatClient.create(myChatModel);// Or use the builder for more control
ChatClient.Builder builder = ChatClient.builder(myChatModel);
ChatClient customChatClient = builder.defaultSystemPrompt("You are a helpful assistant.").build();
为不同模型类型定义 ChatClient

当与多个 AI 模型协作时,可以为每个模型定义单独的 ChatClient bean:

import org.springframework.ai.chat.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ChatClientConfig {@Beanpublic ChatClient openAiChatClient(OpenAiChatModel chatModel) {return ChatClient.create(chatModel);}@Beanpublic ChatClient anthropicChatClient(AnthropicChatModel chatModel) {return ChatClient.create(chatModel);}
}

然后,可以使用 @Qualifier 注解将这些 bean 注入到应用程序组件中:

@Configuration
public class ChatClientExample {@BeanCommandLineRunner cli(@Qualifier("openAiChatClient") ChatClient openAiChatClient,@Qualifier("anthropicChatClient") ChatClient anthropicChatClient) {return args -> {var scanner = new Scanner(System.in);ChatClient chat;// Model selectionSystem.out.println("\nSelect your AI model:");System.out.println("1. OpenAI");System.out.println("2. Anthropic");System.out.print("Enter your choice (1 or 2): ");String choice = scanner.nextLine().trim();if (choice.equals("1")) {chat = openAiChatClient;System.out.println("Using OpenAI model");} else {chat = anthropicChatClient;System.out.println("Using Anthropic model");}// Use the selected chat client

相关文章:

  • Spring Boot + +小程序, 快速开发零工市场小程序
  • 游戏引擎学习第303天:尝试分开对Y轴和Z轴进行排序
  • GPU加速Kubernetes集群助力音视频转码与AI工作负载扩展
  • 野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit Lite2
  • DataGridView中拖放带有图片的Excel,实现数据批量导入
  • 【JAVA】比较器Comparator与自然排序(28)
  • 【Java】泛型在 Java 中是怎样实现的?
  • PostgreSQL 日常维护
  • VLA模型:自动驾驶与机器人行业的革命性跃迁,端到端智能如何重塑未来?
  • 【C++】移动语义与move()实用性教学
  • Docker网关冲突导致容器启动网络异常解决方案
  • 蓝桥杯3503 更小的数
  • Podman(Pod Manager)简介
  • Zabbix开源监控的全面详解!
  • Docker面试题(1)
  • ADB常用语句
  • Python 包管理工具uv常用场景使用指南
  • OpenCv高阶(十四)——LBPH人脸识别
  • 线性表数据结构-队列
  • 电感在断开的时候会按原来的电流方向流动这是什么定理?
  • 帮客户做网站平台犯法吗/免费创建属于自己的网站
  • 奉节做网站/最吸引人的营销广告文案
  • 信誉好的龙岗网站建设/seo服务深圳
  • 广州机械加工/建站 seo课程
  • 网站建设实施进度与资源管理/微商软文范例大全100
  • 怎么优化一个网站/重庆森林电影高清在线观看