Spring AI中的Advisor顾问角色详解
/ 自定义日志Advisor示例@Override// 前置处理:记录请求// 执行后续Advisor或模型调用// 后置处理:记录响应典型自定义场景Re-Reading(Re2)模式:强制模型重新阅读问题以提升复杂推理准确率特定业务逻辑增强:如简历优化场景中的专业顾问模式Spring AI Advisor通过拦截增强机制,将AI应用中的横切关注点(日志、记忆、安全、RAG等)解耦为可复用的组件,
核心概念
Advisor是Spring AI框架中的拦截增强机制,扮演着类似Spring AOP中"切面"的角色。它允许开发者在不修改核心业务代码的情况下,对AI模型的请求和响应流程进行拦截、修改和增强。
简单来说,Advisor就像AI应用的智能管家,在问题发送给大模型前和答案返回给用户后,自动完成一系列预处理和后处理工作。
核心功能特点
1. 请求/响应拦截
-
前置增强:在调用AI模型前修改Prompt、添加上下文、过滤敏感词
-
后置增强:在模型返回后记录日志、格式化结果、安全校验
2. 链式处理机制
多个Advisor按责任链模式串联执行,通过getOrder()方法确定顺序(值越小越优先),形成完整的处理流水线
3. 模块化与可复用
将通用模式(对话记忆、RAG、安全过滤)封装成可复用组件,提升代码可移植性
内置Advisor类型
Spring AI提供了丰富的内置Advisor实现,覆盖常见场景:
1. 聊天记忆Advisor(Chat Memory)
管理多轮对话历史,避免手动维护对话列表
| 类型 | 工作原理 | 适用场景 |
|---|---|---|
| MessageChatMemoryAdvisor | 将历史对话作为独立消息集合添加到Prompt,保留完整角色结构(user/assistant/system) | 推荐,符合现代LLM对话模型设计 |
| PromptChatMemoryAdvisor | 将对话历史合并到系统文本中,可能丢失消息边界 | 简单场景 |
| VectorStoreChatMemoryAdvisor | 基于向量数据库存储和检索历史对话 | 大规模对话数据 |
使用示例:
var chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(
new MessageChatMemoryAdvisor(chatMemory), // 对话记忆
new QuestionAnswerAdvisor(vectorStore) // RAG检索
)
.build();
2. 问答增强Advisor(Q&A)
-
QuestionAnswerAdvisor:实现朴素RAG模式,从向量存储中检索相关知识增强回答
-
RetrievalAugmentationAdvisor:基于模块化RAG架构的高级实现
3. 内容安全Advisor
-
SafeGuardAdvisor:过滤有害或不适当内容,防止模型生成违规输出
4. 日志与调试Advisor
-
SimpleLoggerAdvisor:记录完整的AI交互日志,便于调试和监控
高级特性:递归Advisor(Recursive Advisors)
Spring AI 1.1+版本引入递归Advisor,支持Advisor调用其他Advisor,构建多步骤AI工作流。
典型应用场景:
-
自改进AI智能体:生成答案 → 评估质量 → 基于反馈优化答案
-
LLM-as-a-Judge评估系统:一个模型生成内容,另一个模型评估质量,形成闭环反馈
实现原理:通过SelfRefineEvaluationAdvisor等实现类,自动评估回答质量,未达标则携带反馈重新尝试,直到满足要求或达到重试上限。
自定义Advisor开发
开发者可以轻松创建自定义Advisor满足特定需求:
// 自定义日志Advisor示例
public class MyLoggerAdvisor implements AroundAdvisor {
@Override
public AdvisedResponse aroundCall(AdvisedRequest request, CallAroundAdvisorChain chain) {
// 前置处理:记录请求
log.debug("AI Request: {}", request.userText());
// 执行后续Advisor或模型调用
AdvisedResponse response = chain.nextAroundCall(request);
// 后置处理:记录响应
log.debug("AI Response: {}", response.response().getResult());
return response;
}
}
典型自定义场景:
-
Re-Reading(Re2)模式:强制模型重新阅读问题以提升复杂推理准确率
-
特定业务逻辑增强:如简历优化场景中的专业顾问模式
使用建议
-
优先级设计:合理设置
getOrder()值,确保核心Advisor(如安全检查)优先执行 -
性能考量:每个Advisor都会增加处理延迟,避免过度堆叠
-
成本敏感:如Re2模式会翻倍输入长度,谨慎在C端高并发场景使用
-
模型兼容性:部分Advisor(如MessageChatMemoryAdvisor)并非所有模型都支持
总结
Spring AI Advisor通过拦截增强机制,将AI应用中的横切关注点(日志、记忆、安全、RAG等)解耦为可复用的组件,极大提升了开发效率和代码可维护性。结合递归Advisor等创新特性,开发者能够构建出具备自我改进能力的复杂AI智能体,是当前Java AI工程化实践中不可或缺的核心设计模式。
更多推荐


所有评论(0)