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

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
http://www.xdnf.cn/news/7852.html

相关文章:

  • 前端面试题
  • C# AOP编程
  • 【亲测有效】Ubuntu22.04安装黑屏重启进入系统卡死
  • 如果有三个服务实例部署在三台不同的服务器上,这三个服务实例的本地缓存,是存储一模一样的数据?还是各自只存一部分?
  • 《易经》的数学表达:初级版和高级版
  • 回溯算法——排列篇
  • 新导游入行规范与职业发展指导
  • auto关键字解析
  • 时源芯微|π型LC滤波电路
  • 力扣面试150题--填充每个节点的下一个右侧节点指针 II
  • SPI协议软件实现 W25QXX flash 存储器
  • 【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化
  • C++函数重载
  • 2025年保姆级教程:Powershell命令补全、主题美化、文件夹美化及Git扩展
  • 线端子人工做线操作介绍
  • C++学习:六个月从基础到就业——多线程编程:条件变量
  • 诊断仪进行CAN采样点测试的原理
  • 管理会议最佳实践:高效协同与价值最大化
  • ctfhub技能书http协议
  • 2570. 合并两个二维数组 - 求和法
  • RTMP协议解析【三】
  • 【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)
  • 网页 HTML布局(详解)
  • 精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践
  • 新能源汽车充电桩资源如何利用资源高效配置?
  • Linux 内核音视频架构(V4L2 )介绍
  • 算法中的数学:欧拉函数
  • 工作流引擎-03-聊一聊什么是流程引擎(Process Engine)?
  • 用户缓冲区
  • JavaScript 函数、方法、限定符