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

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.lryc.cn/news/2386107.html

相关文章:

  • 分身空间:手机分身多开工具,轻松实现多账号登录
  • 音视频之视频压缩及数字视频基础概念
  • Ubuntu 24.04部署安装Honeyd蜜罐
  • C++复习核心精华
  • Android中获取控件尺寸进阶方案
  • 云原生安全之PaaS:从基础到实践的技术指南
  • MCP技术体系介绍
  • 《深入探秘:从底层搭建Python微服务之FastAPI与Docker部署》
  • 深入解析Spring Boot与JUnit 5集成测试的最佳实践
  • 我的第1个爬虫程序——豆瓣Top250爬虫的详细步骤指南
  • Selenium 测试框架 - C#
  • JavaWeb:SpringBoot工作原理详解
  • 5.25本日总结
  • OpenGL Chan视频学习-6 How Shaders Work in OpenGL
  • dify_plugin数据库中的表总结
  • 【数据仓库面试题合集④】SQL 性能调优:面试高频场景 + 调优策略解析
  • HarmonyOS学习——UIAbility组件(上)
  • 【Linux】磁盘空间不足
  • 持续更新 ,GPT-4o 风格提示词案例大全!附使用方式
  • 线性代数之张量计算,支撑AI算法的数学原理
  • QStandardItemModel的函数和信号介绍
  • Python 内存管理机制详解:从分配到回收的全流程剖析
  • 【报错】Error attempting to get column ‘created_time‘ from result set.解决方法
  • Redis 3.0~8.0特性与数据结构全面解析
  • Google 推出 Flow —— AI 电影制作新平台
  • 跨链风云:打破区块链孤岛,实现价值自由流转
  • 鸿蒙开发:了解$$运算符
  • 基于CEEMDAN-Transformer-BiLSTM的多特征风速气候预测的完整实现方案及PyTorch源码解析
  • 特征预处理
  • 第七课 医学影像学临床研究数据管理与统计分析思路