核心概念

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工作流

典型应用场景

  1. 自改进AI智能体:生成答案 → 评估质量 → 基于反馈优化答案

  2. 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)模式:强制模型重新阅读问题以提升复杂推理准确率

  • 特定业务逻辑增强:如简历优化场景中的专业顾问模式


使用建议

  1. 优先级设计:合理设置getOrder()值,确保核心Advisor(如安全检查)优先执行

  2. 性能考量:每个Advisor都会增加处理延迟,避免过度堆叠

  3. 成本敏感:如Re2模式会翻倍输入长度,谨慎在C端高并发场景使用

  4. 模型兼容性:部分Advisor(如MessageChatMemoryAdvisor)并非所有模型都支持


总结

Spring AI Advisor通过拦截增强机制,将AI应用中的横切关注点(日志、记忆、安全、RAG等)解耦为可复用的组件,极大提升了开发效率和代码可维护性。结合递归Advisor等创新特性,开发者能够构建出具备自我改进能力的复杂AI智能体,是当前Java AI工程化实践中不可或缺的核心设计模式。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐