Spring AI 源码解析
2025-01-16 13:20:43 0 举报
Spring AI 源码解析,这是一个专注于分析和解释Spring框架人工智能(AI)相关的源代码的文档。该文档深入探讨Spring技术核心中的AI Agent 源码解析
作者其他创作
大纲/内容
请求大模型 的 client域名、uri、api-key 都封装在这里这里也设置了默认的 base_url 和 uriPath
语音转文字配置
从响应中获取文本内容
UserMessage 中封装着用户的文本内容和多媒体内容
如何创建 ChatClient
implements
OpenAiModerationModel
配置类中有默认的接口的路径以及模型
大模型是否返回需要function call工具调用
var advisor = this.callAroundAdvisors.pop()
spring AI 中提示词模板中的参数格式:{param},是用的 {} 包起来的,和 langchai4j 的 {{}} 区别开来哦
ChatClientAutoConfiguration
OpenAiEmbeddingModel
DefaultCallResponseSpec
是执行 function call 返回包含本地工具执行结果的历史消息
为 Bean 提供所需的配置类
设置 UserMessage
历史消息和模型通用参数封装到 Promt 中
Advisor Chain 中pop 出 Advisor
使用
循环请求大模型直到大模型返回不需要 function call
如果 SystemMessage 中有动态参数则需要渲染 SystemMessage
文生图配置
ToolResponseMessage本地工具消息
advisedRequest.toPrompt()
function call 相关配置处理
字符串输出
创建一个新的带有 tool message 的 Prompt
Optional<Generation> toolCallGeneration = response.getResults().stream().filter(g -> !CollectionUtils.isEmpty(g.getOutput().getToolCalls())).findFirst()
OpenAiAudioApi
文本转语音模型
创建请求执行类
消息类型
模型调用API层
this.restClient.post().uri(this.completionsPath).headers(headers -> headers.addAll(additionalHttpHeader)).body(chatRequest).retrieve().toEntity(ChatCompletion.class)
1.0.0 开始的新功能,可以理解为将 ChatModel 封装为流式编程的方式
2. 调用大模型
return ChatResponse
OpenAiChatProperties
AbstractToolCallSupport
@EnableConfigurationProperties
ChatClient.Builder
OpenAiModerationProperties
getContentFromChatResponse(chatResponse)
ChatModel
@Bean
AbstractToolCallSupport#handleToolCalls
敏感内容模型
自己定义 ChatClient Bean
DefaultChatClientRequestSpec
spring.ai.chat.client.enabled 配置false关闭自动装配
OpenAiImageProperties
AssistantMessage assistantMessage = toolCallGeneration.get().getOutput()
OpenAiAudioSpeechModel
@Beanpublic ChatClient chatClient(ChatClient.Builder builder) { return builder.build();}
过滤出 function call 相关的 response
语音转文字模型
如果要在提示词中设置动态参数那么就要使用下面的方法:ChatClientRequestSpec#user(Consumer<PromptUserSpec>)ChatClientRequestSpec system(Consumer<PromptSystemSpec> consumer)
OpenAiEmbeddingProperties
ChatClient#create(ChatModel)
OpenAiImageModel
messages.add(new SystemMessage(processedSystemText))
spring.ai.chat.client.enabled 默认true 表示开启
content()
执行请求大模型操作
doGetChatResponse
封装 ChatResponse
否
OpenAiModerationApi
聊天配置
@Bean自己去使用 ChatClient 的create 方法创建 Bean
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.0-SNAPSHOT</version></dependency>
OpenAiChatModel#call
敏感内容配置
OpenAiAutoConfiguration
ChatClient
bean注入
OpenAiAudioTranscriptionModel
模型层
SystemMessage 添加到历史消息 messages 中
call()
本次 funcion call AI Message 添加到历史消息中
user(String text)
构建 AI Request
将本地工具的 tool message 添加到历史消息中
向量化配置
OpenAiAudioTranscriptionProperties
copy 一份历史 messages 出来Prompt#instructionsCopy
创建对象时会添加 Advisor 到 advisors 属性中最终会执行 advisors 链路中的 Advisor 去请求大模型
请求做下前置处理并封装成 AdvisedRequest
UserMessage 添加到历史消息 messages 中
extends
OpenAiChatModel#internalCall
连接配置
new AdvisedRequest()
图片模型
inputRequestSpec.aroundAdvisorChainBuilder.build().nextAroundCall(advisedRequest)
OpenAiImageApi
DefaultCallResponseSpec#doGetObservableChatResponse
历史消息存储到 tool 上下文中
function call response 的 AI Message
OpenAiChatModel
OpenAiAudioSpeechProperties
1. 将 AdvisedRequest 转成最终的大模型请求 Promt
构建对话请求
文本转语音配置
向量化模型
String content = chatClient.prompt().user(message).call().content();
OpenAiConnectionProperties
UserMessage用户消息
functoin call 执行本地工具(方法)
OpenAiApi
DefaultChatClient#prompt()
chatModel.call(advisedRequest.toPrompt())
聊天模型
new ArrayList<>(prompt.copy().getInstructions())
AssistantMessageAI 消息
请求大模型
执行请求调用大模型
调用大模型
如果 UserMessage 中有动态参数则需要渲染 UserMessage
在创建 AdvisedRequest 之前会做如下处理:如果 UserMessage 为空那么就从历史消息 messages 中获取并移除最后一条 UserMessaeg 作为本次请求的 UserMessage
入口
请求大模型并获取大模型响应
SystemMessage系统消息

收藏
0 条评论
下一页