defaultAdvisors()
方法注册增强器。
增强器也参与可观察性堆栈,因此您可以查看与其执行相关的指标和跟踪。
CallAroundAdvisor
和 CallAroundAdvisorChain
,以及用于流式场景的 StreamAroundAdvisor
和 StreamAroundAdvisorChain
。
它还包括 AdvisedRequest
用于表示未密封的 Prompt 请求,AdvisedResponse
用于 Chat Completion 响应。两者都包含一个 advise-context
用于在增强器链中共享状态。
Advisors API 类
nextAroundCall()
和 nextAroundStream()
是关键增强器方法,通常执行诸如检查未密封的 Prompt 数据、自定义和增强 Prompt 数据、调用增强器链中的下一个实体、可选地阻止请求、检查聊天完成响应以及抛出异常以指示处理错误等操作。
此外,getOrder()
方法确定增强器在链中的顺序,而 getName()
提供唯一的增强器名称。
由 Spring AI 框架创建的增强器链允许按 getOrder()
值排序的多个增强器顺序调用。
较低的值首先执行。
最后一个增强器(自动添加)将请求发送到 LLM。
以下流程图说明了增强器链与聊天模型之间的交互:
Advisors API 流程
创建请求
Prompt
创建一个 AdvisedRequest
,同时创建一个空的 AdvisorContext
对象。处理请求
发送请求
Chat Model
。创建响应
AdvisedResponse
。后者包括共享的 AdvisorContext
实例。处理响应
返回响应
ChatCompletion
将最终的 AdvisedResponse
返回给客户端。getOrder()
方法决定。需要理解的关键点:
执行顺序
控制执行顺序
Ordered.HIGHEST_PRECEDENCE
以确保增强器在链中首先执行(首先处理请求,最后处理响应)。Ordered.LOWEST_PRECEDENCE
以确保增强器在链中最后执行(最后处理请求,首先处理响应)。Ordered
接口的语义:
org.springframework.ai.chat.client.advisor.api
中。以下是创建自己的增强器时会遇到的关键接口:
CallAroundAdvisorChain
和 StreamAroundAdvisorChain
:
接口是:
CallAroundAdvisor
或 StreamAroundAdvisor
(或两者)。要实现的关键方法是用于非流式的 nextAroundCall()
或用于流式增强器的 nextAroundStream()
。
AdvisedRequest
,之后记录 AdvisedResponse
。
注意,增强器只观察请求和响应,不修改它们。
此实现同时支持非流式和流式场景。
MessageAggregator
是一个实用类,将 Flux 响应聚合为单个 AdvisedResponse。这对于记录或观察整个响应而不是流中的单个项目的其他处理很有用。注意,您不能在 MessageAggregator
中修改响应,因为它是只读操作。before
方法通过应用重读技术增强用户的输入查询。aroundCall
方法拦截非流式请求并应用重读技术。aroundStream
方法拦截流式请求并应用重读技术。聊天内存增强器
问题回答增强器
内容安全增强器
增强器流式与非流式流程
adviseContext
在增强器之间共享状态。AdvisedRequest
类已移动到新包。RequestAdvisor
和 ResponseAdvisor
接口RequestAdvisor
在 ChatModel.call
和 ChatModel.stream
方法之前调用ResponseAdvisor
在这些方法之后调用StreamResponseMode
作为 ResponseAdvisor
的一部分