第 4 章 · ChatClient:应用层入口

Spring AI手工初始化:ChatModel与ChatClient构建实战指南 ChatClient是Spring AI中封装对话生命周期的高级抽象,而ChatModel则是调用大语言模型的核心接口。其设计遵循分层解耦原则,ChatModel专注原子能力(如call方法),ChatClient则集成系统提示、重试、消息转换等业务胶水能力。这种架构提升了可测试性与可组合性,尤其适用于多模型协同(如Qwen+Ollama)和生产级可观测性需求。实际应用中需关注RestTemplate连接池、ObjectMapper线程安全、三层超时配置及自定义MessageConverter等关键实践,才 阅读详情

版本:Spring AI 2.0.1

目标:把应用层入口讲清楚——如何创建、如何设默认值、如何发一次同步 / 流式请求,以及 Tools、结构化输出在 Client 上的基本挂法。

一次请求在应用侧通常长这样:

业务代码
  → ChatClient(DSL + 默认值 + Advisors + Tools)
      → Advisor 链(记忆 / RAG / 安全 / ToolCalling …)
          → ChatModelCallAdvisor / ChatModelStreamAdvisor
              → ChatModel.call / stream(Prompt)
                  → Provider API

本章按这条链路自上而下:先创建与默认值,再 prompt() 组装,再 call() / stream() 取结果,最后补 Tools 与 entity(...) 的入口用法。


4.1 在架构里的位置

业务代码通常只面对 ChatClient。它不是另一套协议:底下流通的仍是 Message / Prompt / ChatResponse。ChatClient 减少的是组装成本,并把 Advisor、Tools 挂到同一条请求链上。

先记住三点:

  1. ChatClient 本身不保存会话。 多轮要靠 Advisor + ChatMemory + conversationId 一类上下文。

  2. Boot 自动配置提供的是 ChatClient.Builder(prototype),不是单例 ChatClient。 每次注入拿到的是新克隆,互不污染。

  3. 默认往往会挂上 ToolCallingAdvisor。 需要完全自管工具循环时,可用配置关闭自动注册。


4.2 创建 Client:三种常见写法

最快:直接 create

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
​
ChatClient client = ChatClient.create(chatModel);

适合试验与短脚本;生产更常见的是 Builder 或 Boot 注入。

推荐:Builder 堆默认值再 build

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.openai.OpenAiChatOptions;
​
ChatClient client = ChatClient.builder(chatModel)
        .defaultSystem("你是简洁准确的中文助手")
        .defaultAdvisors(new SimpleLoggerAdvisor())
        .defaultTools(weatherTools)   // 带 @Tool 的 POJO,或 ToolCallback
        .defaultOptions(OpenAiChatOptions.builder()
                .temperature(0.3)
                .build())
        .build();

Boot:注入 prototype Builder

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
@Configuration
class AiClientConfig {
​
    @Bean
    ChatClient chatClient(ChatClient.Builder builder) {
        // builder 已经过自动配置与各类 Customizer
        return builder
                .defaultSystem("你是简洁准确的中文助手")
                .build();
    }
}

已有 Client 衍生变体:mutate()

ChatClient visionClient = textClient.mutate()
        .defaultOptions(OpenAiChatOptions.builder()
                .model("gpt-4o")
                .build())
        .build();

RequestSpec 也有 mutate(),适合把「这次请求的参数」固化成新的 Client。Builder 还有 clone(),用于构建完成前复制模板。


4.3 默认值 vs 单次请求

这是 ChatClient 最容易踩坑的一层。

层典型 API作用范围
Builder default*defaultSystem、defaultAdvisors、defaultTools、defaultOptions、defaultToolContextbuild() 后对该 Client 所有请求生效
RequestSpec.system / .user、.advisors、.tools、.options、.call / .stream只影响这一次;多数情况单次优先

合并时务必记住一条硬规则:

请求级 tools(...) 会整组覆盖该次请求的 defaultTools,不是追加合并。

因此:

  • 真正「几乎每次都该有」的工具,才挂 defaultTools

  • 「仅某接口需要」的工具,放在该次 .tools(...),并想清楚是否还要带上默认那一组(需要的话要显式一并传入)


4.4 发起一次请求:prompt()

三种入口:

import java.util.List;
​
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
​
// 1) 空起手,再链式组装
String a = client.prompt()
        .system("用中文简要回答")
        .user("用一句话解释依赖注入")
        .call()
        .content();
​
// 2) 整段当作 user 文本
String b = client.prompt("用一句话解释依赖注入")
        .call()
        .content();
​
// 3) 直接喂入底层 Prompt(与 ChatModel 互通)
String c = client.prompt(new Prompt(List.of(
                new SystemMessage("用中文简要回答"),
                new UserMessage("用一句话解释依赖注入")
        )))
        .call()
        .content();

在 RequestSpec 上,常见能力包括:

能力说明
system / user字符串、Resource,或 Consumer 精细配置
messages / options补充消息列表与本次选项
advisors追加 Advisor,并可通过 param 传入上下文
tools / toolContext注册工具与工具侧上下文
templateRenderer自定义模板渲染
call() / stream()同步或流式终止

system / user 细粒度写法

模板参数、metadata、Media 都可以在 Consumer 里完成:

import org.springframework.util.MimeTypeUtils;
​
String text = chatClient.prompt()
        .system(s -> s.text("你是 {role} 助手").param("role", "技术"))
        .user(u -> u
                .text("你好,{name},请总结 {topic}")
                .param("name", "Tom")
                .param("topic", "ChatClient")
                .media(MimeTypeUtils.IMAGE_PNG, pngResource))  // 可选
        .call()
        .content();

模板渲染发生在变成真正 Message 之前;渲染完成后再进入 Prompt。

挂 Advisor(含记忆场景的典型写法)

import org.springframework.ai.chat.memory.ChatMemory;
​
String reply = chatClient.prompt()
        .user(userInput)
        .advisors(a -> a
                .advisors(messageChatMemoryAdvisor)
                .param(ChatMemory.CONVERSATION_ID, conversationId))
        .call()
        .content();

这里只需建立印象:多轮不是 ChatClient 内置状态,而是 Advisor + 上下文键。记忆策略与实现细节不属于本章展开范围。


4.5 同步返回:call() → CallResponseSpec

最常用:直接取文本。

String text = chatClient.prompt()
        .user(question)
        .call()
        .content();

也可以取更完整的结构:

方法得到什么
content()最终助手文本(最常用)
chatResponse()ChatResponse(Generation、Usage、hasToolCalls 等)
chatClientResponse()带 Advisor 上下文的包装,调试链路时更有用
entity(...)反序列化为 Java 类型(见下节)
responseEntity(...)同时要元数据 + 强类型对象

取完整响应示例:

import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.metadata.Usage;
​
ChatResponse resp = chatClient.prompt()
        .system("用中文简要回答")
        .user(question)
        .call()
        .chatResponse();
​
String text = resp.getResult().getOutput().getText();
Usage usage = resp.getMetadata().getUsage();
boolean needTool = resp.hasToolCalls();

4.6 结构化输出入口:entity(...)

当业务要的是对象而不是散文时,用 entity:

record Answer(String summary, java.util.List<String> bullets) {}
​
Answer answer = chatClient.prompt()
        .user("总结 Spring AI ChatClient:给一句摘要,并列 3 个要点")
        .call()
        .entity(Answer.class);

需要更强约束时,用 EntityParamSpec 两个开关(彼此独立):

Answer answer = chatClient.prompt()
        .user("总结 Spring AI ChatClient:给一句摘要,并列 3 个要点")
        .call()
        .entity(Answer.class, spec -> spec
                .useProviderStructuredOutput()  // 供应商 API 级 Schema;默认不启用
                .validateSchema());             // 校验失败可带错误反馈重试;不支持 streaming

要点:

  • 默认偏提示侧 + Converter;useProviderStructuredOutput() 需要模型 / 供应商支持,不支持时可能静默回退

  • validateSchema() 只适合同步路径

  • OpenAI Structured Outputs 通常不接受顶层 JSON 数组 schema;List<T> + 原生 structured 容易失败,可包一层容器类型

  • 既要 Usage / finishReason,又要强类型:用 responseEntity(...)

选型与失败重试的完整展开,属于结构化输出专题;本章只要会在 Client 上正确取实体即可。


4.7 流式返回:stream() → StreamResponseSpec

import reactor.core.publisher.Flux;
​
Flux<String> tokens = chatClient.prompt()
        .user(question)
        .stream()
        .content();
​
// 例如写入 SSE:tokens.subscribe(...)
方法适用
content()打字机体验,逐段文本
chatResponse()需要增量 metadata 或工具相关帧

注意:

  • 结构化输出不要指望流式路径上的 validateSchema;同步 call().entity(...),或在完整文本上自行解析更稳妥

  • 工程需引入 WebFlux(或自行用 SseEmitter 桥接);与「会不会流式」是两件事


4.8 Tools:统一走 tools(Object...)

2.0 起,请求级与默认级都收敛到 tools(...) / defaultTools(...)。旧的 toolCallbacks(...) 已标记废弃,迁移时一并改掉。

tools(Object...) 会按元素类型分发:

元素类型行为
ToolCallback直接注册
ToolCallbackProvider注册 Provider,请求时再解析
数组 / Collection展开后继续按同样规则处理
其他对象当作带 @Tool 的 POJO;若没有任何 @Tool 方法,会抛异常

最小示例:

import java.util.Map;
​
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
​
class DateTimeTools {
​
    @Tool(description = "获取当前日期(ISO)")
    String today() {
        return java.time.LocalDate.now().toString();
    }
​
    @Tool(description = "按城市查询天气(示例)")
    String weather(@ToolParam(description = "城市名") String city) {
        return "{\"city\":\"" + city + "\",\"tempC\":28}";
    }
}
​
String reply = chatClient.prompt()
        .user("今天几号?北京天气怎么样?")
        .tools(new DateTimeTools())
        .toolContext(Map.of("tenantId", "acme"))
        .call()
        .content();

toolContext 传的是工具执行时可取的上下文(租户、用户 ID 等),与模型可见的 JSON 参数是分开的。

再强调覆盖规则:

// 若 Client 上 defaultTools(A),而本次只写 tools(B),
// 则这一次只有 B,不会自动带上 A。
chatClient.prompt()
        .tools(onlyForThisApiTools)
        .user(question)
        .call()
        .content();

边界可以记成三句话:

  • ChatClient:编排入口(组装请求、挂 Advisor / Tools、发起 call/stream)

  • Tools:提供可执行能力,结果回灌给模型

  • RAG:通过 Advisor 注入检索上下文,不是 ChatClient 内置检索器

本章把 Tools 在 Client 上的挂法讲清楚即可;工具契约、Advisor 链细节、RAG 流水线各自有专章空间,不必在 Client DSL 里一次写完。


4.9 Builder Customizer(Boot)

容器里可以有多个 ChatClientBuilderCustomizer,按 @Order / Ordered 依次作用到 prototype Builder 上。旧的 ChatClientCustomizer 仍可能被收集,但 2.0 更推荐前者。

import org.springframework.ai.chat.client.ChatClientBuilderCustomizer;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
​
@Configuration
class ChatClientCustomizers {
​
    @Bean
    ChatClientBuilderCustomizer loggingAndPersona() {
        return builder -> builder
                .defaultSystem("你是企业内部助手")
                .defaultAdvisors(new SimpleLoggerAdvisor());
    }
​
    @Bean
    @Order(100)
    ChatClientBuilderCustomizer defaultTools(DateTimeTools tools) {
        return builder -> builder.defaultTools(tools);
    }
}

因为每次注入的 Builder 都是新克隆,某个 @Bean ChatClient 方法里继续改,不会直接污染其他注入点;但仍需注意 Customizer 自身是否持有可变共享状态。

若要完全自管 Tool 循环,可关闭 ToolCalling 自动注册。观测侧若打开 prompt / completion 日志,可能记录敏感内容,生产环境需谨慎。


4.10 常见坑

现象先查什么
注入不到 ChatClientBoot 是否提供的是 ChatClient.Builder;是否自己 @Bean 了 Client
某次请求「默认工具没了」是否写了请求级 tools(...)(整组覆盖)
Options / temperature 不生效单次 .options(...) 是否写了,是否 .build();是否被更外层覆盖
entity 反序列化失败提示是否要求 JSON;是否需要 validateSchema;流式路径不要用校验开关
多轮「没记忆」Client 不存会话;是否挂了 Memory Advisor,以及 conversationId 是否传对
流式接口 406 / 类型错误是否引入 WebFlux,返回类型是否为 Flux

4.11 本章小结

到这里应能:

  1. 用 create / builder / Boot 注入正确创建 ChatClient

  2. 区分 Builder 默认值 与 单次 RequestSpec,尤其是 tools 的整组覆盖规则

  3. 用 prompt() 组装 system / user / advisors / tools,并完成 call().content() 与 stream().content()

  4. 会用 entity(...) 取对象,知道两个 Spec 开关的基本含义

  5. 理解 ChatClient 只做编排入口;Tool / RAG / 记忆都是挂上去的能力,不是另一套协议

掌握 Client 之后,读日志、改默认值、排「工具偶发消失」会轻松很多;需要更薄的调用或手工工具循环时,再下沉到 ChatModel。

4-ChatClient 本文介绍了ChatModel与ChatClient的区别及使用实践。ChatModel是底层接口,直接与大模型交互,提供call()和stream()方法;ChatClient是高级封装,基于ChatModel构建,适合快速开发标准化AI服务。文章通过Spring Boot项目实战,演示了两种方式的代码实现:1)使用ChatModel直接调用大模型API;2)通过ChatClient构建更复杂的对话服务。项目包含完整的Maven配置、YAML设置和控制器代码,展示了如何集成阿里云DashScope大模型服务 阅读详情

相关推荐

Python实战:用Sinkhorn算法搞定最优传输问题(附完整代码)

本文详细介绍了如何使用Python实现Sinkhorn算法解决最优传输问题,包括算法原理、关键步骤和完整代码示例。通过实际案例(如图像颜色迁移)展示其高效性和稳定性,适合机器学习开发者和数据科学家应用于分布匹配等场景。

weixin_30879169的博客 98

Spring AI Alibaba ChatClient使用

ChatClient使用

Charge8的博客 2453

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

Spring AI 系列之十七 - ChatClient源码解析

本章通过解析ChatClient的创建流程和底层源码,可以知道ChatClient其实是封装了一套基础调用聊天大模型的框架,其底层是通过ChatModel进行调用聊天大模型,而ChatModel就是Spring AI对不同厂商聊天大模型的一个抽象接口,各大厂商将在其基础上实现自己的ChatModel封装。而在上层之所以再次封装ChatClient的API是因为聊天大模型应用场景较为成熟,因此通过封装ChatClient来实现MCP、RAG等规范功能,方便用户使用。

代码让AI扣 1534

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1485

用友U8 API 二次开发:WebService封装7个核心DLL引用与U8Login登录避坑

本文详细介绍了用友U8 API二次开发中的WebService封装与U8Login登录优化实践。通过7个核心DLL的正确引用、U8Login登录机制的深度解析及IIS环境下的特殊处理方案,为开发者提供了一套高可用性的通用解决方案,助力企业实现ERP系统的高效集成与数字化转型。

weixin_42524171的博客 505

ChatClient 解读

原文链接:SpringAI(GA):ChatClient调用链路解读 说明:本教程将采用2025年5月20日正式的GA版,给出如下内容版本:JDK21 + SpringBoot3.4.5 + SpringAI 1.0.0 + SpringAI Alibaba最新将陆续完成如下章节教程。本章是第一章(chat初体验)下的其中一部分源码解读—ChatClient解读微信推文往届解读可参考:获取更好的观赏体验,可付费获取飞书云文档Spring AI最新教程权限,目前39.9,随着内容不断完善,会逐步涨价。注:M6

yingzi的技术博客 1276

从零实战:模拟Soul/陌陌附近的人接口爬虫(设备指纹·加密逆向·动态代理全解)

在移动互联网流量见顶的今天,LBS(基于位置的服务)社交平台——尤其是Soul和陌陌——依然掌握着海量高活用户的地理位置画像、兴趣标签、在线活跃时段等敏感数据。对于市场调研、流量运营、甚至是城市热力分析而言,“附近的人”接口是一个极具价值的入口。然而,这两款App均采用全参数加密 + 设备指纹风控 + WAF动态防御的三重护城河。直接使用Requests库调用公开API无异于以卵击石。本文将从逆向工程视角出发,完整还原一套可用的附近人信息采集方案,涵盖:抓包与流量分析(绕过SSL Pinning)

2201_76125261的博客 211

ChatClient入门

ChatClient是Spring AI提供的高级API,封装了与AI模型交互的复杂性,支持同步和流式响应。本文介绍了基于Spring Boot构建ChatClient应用的步骤: 创建Maven模块,添加Spring Boot Web和Spring AI Alibaba依赖 配置应用端口和大模型API密钥 实现ChatClientController时,需注意不能直接注入ChatClient,而应使用ChatClient.Builder构建实例 通过chatClient.prompt().user(msg

小生不才的博客 754

cuMotion 入门教程(一)面向机器人学的GPU加速运动生成技术

NVIDIA cuMotion是一款高性能机器人运动生成库,专注于机械操作任务,利用GPU加速技术提升性能。开发者预览版支持运动学/逆运动学、碰撞感知路径规划、轨迹优化等功能,兼容任意自由度机器人。该库提供C++和Python接口,支持从URDF/XRDF文件加载机器人模型,包含世界建模、碰撞检测等工具。教程详细介绍了安装配置、机器人描述加载、运动学计算、世界建模、逆运动学求解以及轨迹优化等核心功能。cuMotion整合了Lula和cuRobo库的技术优势,将成为Isaac ROS的核心组件,适用于工业机器

2506_90492529的博客 2198

Python爬虫实战:手把手教你如何抓取农作物品种名录,构建标准化种业索引数据库!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 290

ChatModel和ChatClient的对比

本文通俗易懂得说明了ChatModel和ChatClient的区别

2403_87846711的博客 1468

【unity小技巧】常用的方法属性和技巧汇总(长期更新,2025/07/02更新)

Unity开发技巧摘要 本文汇总了Unity开发中的实用技巧,包括移动控制、力应用、物体翻转、单例模式实现等。移动方面介绍了MoveTowards、MovePosition、Translate等方法的区别与应用场景;力应用部分详解了AddForce系列方法的参数和使用方式;物体翻转对比了三种实现方案;单例模式提供了标准实现和泛型优化版本;还收录了绝对值计算、鼠标检测、旋转控制、数值取整等实用代码片段。这些经过验证的技巧能有效提升开发效率,文章将持续更新补充新的实用内容。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3348

【Spring AI】ChatClient 使用详解

SpringAI的ChatClient简单使用

2301_79732484的博客 1726

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring AI 中 ChatClient常用方法

摘要: ChatClient是SpringAI中简化AI交互的API组件,支持Deepseek、Qwen等主流模型。通过链式调用整合提示词管理、流式响应处理等功能,核心优势包括: 功能封装:自动拼接系统/用户提示,支持温度、Token数等参数配置; 多模态扩展:可处理图像/音频输入(需模型支持); 执行方式:提供同步(call())、流式(stream())及结构化解析(entity())三种响应模式; 记忆管理:通过withMemory()绑定历史会话上下文。典型应用如技术咨询场景:通过defaultSy

何哥的博客 3158

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring AI 核心 API 解析:ChatClient、Prompt、Response

本文介绍 Spring AI 集成向量数据库,实现文档向量入库与检索增强生成,构建精准可控的企业级知识库问答系统。

学海无涯,笃行致远 1061

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SpringAI——ChatClient 的配置与使用

摘要:ChatClient是SpringAI提供的核心接口,用于封装与大语言模型的交互过程。它支持基础功能如Prompt构建、输出解析和参数调整,以及高级功能如对话记忆和函数调用。通过ChatClient可快速接入多种LLM模型,实现上下文感知和角色设定。配置时需要SpringBoot3.x+和JDK17+,通过yml文件设置API密钥和模型参数。开发者可自定义系统提示词、模型参数、工具函数等,支持全局和局部配置,并可通过Advisor实现日志记录等增强功能。ChatClient简化了AI模型集成,适用于构

yzzdid的博客 2238

4. ChatClient 的初始,快速使用上手

本文介绍了Spring AI框架中的ChatClient组件,它作为ChatModel的封装层,提供了统一的API接口支持多种大模型交互。文章详细讲解了ChatClient的基本使用方法,包括构建方式、阻塞式和流式输出,并通过代码示例演示了如何动态选择底层ChatModel。此外,还展示了在多模型环境下的实战配置方案,包括DeepSeek和Ollama两种模型的集成方法,以及如何通过REST接口实现模型动态切换。ChatClient简化了不同大模型API之间的差异,是Spring AI中优先推荐使用的交互方

weixin_61635597的博客 496

Spring AI中ChatClient的全面剖析

ChatClient是Spring AI框架中一个强大而灵活的组件,它通过Builder模式提供了流畅的API,简化了与AI模型的交互过程。通过合理配置依赖、使用Advisor机制以及设置适当的模型参数,可以充分发挥ChatClient的功能,构建出高效、可靠的AI应用。在实际开发中,开发者可以根据具体需求,灵活配置ChatClient的各项参数和Advisor,实现个性化的AI交互体验。从的使用示例可以看出,使用ChatClient可以极大地简化AI模型调用代码,提高开发效率。

这里是一位在代码世界深耕多年的 “老江湖” 的自留地。​ 岁月在履历上添了厚度,却没磨掉敲代码时眼里的光。从调试第一行 hello world 的生涩,到架构复杂系统的从容,那些在键盘敲击声里流过的日夜,都想在这里慢慢梳理 1396

ChatModel 与 ChatClient 关系完整指南

本文所有 API 签名 / 类关系 / 方法列表均通过javap反编译 Spring AI 1.1.4 jar 实际验证。

tiantiantbtb的博客 565

Spring Boot 4.0 + ChatClient:多模型统一调用,一套代码通吃千问/GPT

CREATIVE, // 创意写作,用GPT-4oANALYTIC, // 逻辑分析,用GPT-4oCOMPLIANCE, // 合规审查,用千问CODE // 代码生成,用GPT@Component@Autowired@Autowired// 中文合规用千问// 其他用GPT咱们今天捋了一遍Spring Boot 4.0 + ChatClient的多模型配置方案。引入依赖:把需要的模型starter都加进来。

HHX_01的博客 746

Spring AI的ChatClient和ChatModel接口

Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则 (如可移植性和模块化设计) 应用于 AI 领域,并促进使用 POJO 作为应用程序的构建块到 AI 领域。

张同学的博客 1155

Spring AI ChatClient 完全指南

本文全面介绍了SpringAI框架中的ChatClient组件,该组件为开发者提供了与大型语言模型(LLM)交互的高效解决方案。ChatClient采用流畅API设计,支持多模型切换和协同工作,具备同步/异步调用、Prompt模板、参数替换等核心功能。文章详细讲解了从基础配置到高级应用的完整流程,包括:1)依赖准备与密钥配置;2)自动创建ChatClient;3)多模型支持策略(同类型/不同类型模型集成);4)OpenAI兼容API适配。通过代码示例展示了如何实现模型切换、投票机制、流水线处理等实用场景,帮

qq_63736560的博客 2375

ChatModel和ChatClient

ChatClient是构建在ChatModel之上的高层封装Fluent API,设计风格对标Spring生态的WebClient,通过链式调用隐藏底层通信细节,抹平不同大模型厂商的接口差异。ChatModel是Spring AI体系中最底层的核心接口,直接与通义千问、OpenAI等大模型服务商通信,是所有大模型交互的基础能力抽象。适合简单的单次大模型调用、需要高度定制请求逻辑的场景,开发者可完全自主管理消息组装、响应解析等全流程。

Listen·Rain的博客 347

探索 Spring AI 的 ChatClient API:构建智能对话应用的利器

Spring AI 的 ChatClient API 为开发者提供了一个强大而灵活的工具,用于构建智能对话应用。通过其流畅的 API、丰富的响应处理方式、默认值设置、顾问机制、日志记录和聊天内存管理等功能,开发者可以更轻松地实现与 AI 模型的交互,处理复杂的对话场景。无论是创建简单的聊天机器人还是复杂的智能客服系统,ChatClient API 都能帮助开发者快速搭建高效、智能的对话应用。

-曾牛的博客 1887

ChatClient vs ChatModel:开发者必须知道的4大区别!

在 Spring AI/Spring AI Alibaba 框架中,ChatModel 和 ChatClient 都可以实现大模型的文本生成功能,例如聊天机器人,但二者是两种不同层级的 API 封装,分别针对不同的开发场景和需求设计。

磊哥聊Java 661
上一篇: 第 3 章 · Message / Prompt / ChatResponse
下一篇: 第 5 章 · ChatModel 与 Provider
AI深栈
博客等级 码龄14年 1粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值