分享
09 Spring AI spring-ai-client-chat模块之ChatClient API源码分析
输入“/”快速插入内容
09 Spring AI spring-ai-client-chat模块之ChatClient API源码分析
飞书用户8288
4月27日修改
深入Spring AI,从源码开始
探索Java企业级AI应用框架,理解它的内部机制,带大家从入门到精通
1 ChatClient基本描述
ChatClient
,用于与AI模型进行无状态请求,使用流式(Fluent )API,Spring生态 Fluent API 是一种面向对象的API设计模式。该接口提供了一系列静态方法和嵌套接口,用于构建和发送聊天请求,并处理响应。
Spring生态框架中,Fluent API是一种通过方法链式调用提升代码可读性和简洁性的设计模式,其核心是通过返回
this
引用实现链式配置。
Spring Fluent API 的本质是
以建造者模式为逻辑基础,通过链式调用语法实现流畅的接口设计
。这种模式在 Spring 生态中广泛应用于复杂对象的构建、配置管理和外部服务通信,显著提升了开发效率和代码可维护性。
1.1 Fluent API的优势
1.
提高代码可读性
:通过方法链,代码逻辑更加清晰,易于理解。
2.
减少样板代码
:通过链式调用,减少了大量的中间变量和方法调用,使代码更加简洁。
3.
增强类型安全
:在编译时期就能发现潜在的错误,提高代码的健壮性
2 ChatClient源码分析
2.1 主要功能
1.
创建
ChatClient
实例
:通过静态方法
create
和
builder
创建
ChatClient
实例。
2.
发送聊天请求
:通过
prompt
方法发送聊天请求,可以传递字符串内容、
Prompt
对象或直接调用无参数的
prompt
方法。
3.
配置请求
:通过嵌套接口
ChatClientRequestSpec
配置请求,包括设置顾问(advisors)、消息(messages)、选项(options)、工具(tools)和系统/用户提示(system/user prompts)。
4.
处理响应
:通过嵌套接口
CallResponseSpec
和
StreamResponseSpec
处理同步和异步响应。
2.2 主要接口和类
•
ChatClient
接口
:主接口,提供创建客户端实例和处理请求的方法。
•
Builder
接口
:用于创建和配置
ChatClient
实例的构建器接口。
•
ChatClientRequestSpec
接口
:用于配置和发送聊天请求的规范接口。
•
CallResponseSpec
接口
:用于处理同步响应的规范接口。
•
StreamResponseSpec
接口
:用于处理异步响应的规范接口。
•
PromptUserSpec
和
PromptSystemSpec
接口
:用于配置用户和系统提示的规范接口。
•
AdvisorSpec
接口
:用于配置顾问的规范接口。
2.3 代码流程
1.
创建
ChatClient
实例:
◦
调用
create
或
builder
方法,传入
ChatModel
、
ObservationRegistry
和可选的
ChatClientObservationConvention
。
◦
create
方法内部调用
builder
方法并构建实例。
2.
配置请求:
◦
调用
prompt
方法获取
ChatClientRequestSpec
实例。
◦
通过
ChatClientRequestSpec
配置请求,包括顾问、消息、选项、工具和提示。
3.
发送请求并处理响应:
◦
调用
call
方法发送同步请求,通过
CallResponseSpec
处理响应。
◦
调用
stream
方法发送异步请求,通过
StreamResponseSpec
处理响应。
2.4 代码流程图