前面我们聊到了ChatClient中的默认配置,其中有一个defaultAdvisors配置,那么现在我们就来了解一下Advisor:
一、什么是Advisor?
Spring AI中是这样说明的:
Advisor API 为 Spring 应用中的 AI 驱动交互提供灵活强大的拦截、修改和增强能力。通过该 API,开发者能构建更复杂、可复用且易维护的 AI 组件。调用 AI 模型时,常见模式是在用户消息基础上追加或增强上下文数据。
此类上下文数据可分为多种类型,常见包括:
自有数据:AI 模型未训练过的数据。即使模型接触过类似数据,追加的上下文数据仍会优先影响响应生成。
对话历史:聊天模型 API 是无状态的。若告知 AI 模型你的姓名,后续交互中它不会记住。必须每次请求都发送对话历史,确保生成响应时考虑先前交互。
我们可以配置多个Advisor,Advisor 加入链的顺序至关重要,它决定了它们的执行顺序。每个 Advisor 都会以某种方式修改提示词或上下文,且一个 Advisor 所做的更改会传递给链中的下一个 Advisor。
ChatClient.builder(chatModel)
.build()
.prompt()
.advisors(
MessageChatMemoryAdvisor.builder(chatMemory).build(),
QuestionAnswerAdvisor.builder(vectorStore).build()
)
.user(userText)
.call()
.content();
如上配置:MessageChatMemoryAdvisor 将首先执行,将对话历史添加到提示词中。随后,QuestionAnswerAdvisor 将基于用户问题和添加的对话历史执行搜索,可能提供更相关的结果。
二、架构图

如上Spring AI Alibaba给出了Advisor家族的架构图,其中基础提供了 SafeGuardAdvisor、SimpleLoggerAdvisor、ChatModelCallAdvisor、ChatModelStreamAdvisor、基于 BaseChatMemoryAdvisor 扩展的记忆功能。
下面我们重要了解到SimpleLoggerAdvisor和BaseChatMemoryAdvisor。
三、日志记录
SimpleLoggerAdvisor 是一个用于记录 ChatClient 的 request 和 response 数据 Advisor,这对于调试和监控您的 AI 交互非常有用。
要启用日志记录,请在创建 ChatClient 时将 SimpleLoggerAdvisor 添加到 Advisor 链中。建议将其添加到链的末尾:
ChatResponse response = ChatClient.create(chatModel).prompt()
.advisors(new SimpleLoggerAdvisor())
.user("Tell me a joke?")
.call()
.chatResponse();
要查看日志,请将 Advisor 包的日志记录级别设置为 DEBUG:
org.springframework.ai.chat.client.advisor=DEBUG
将其添加到您的 application.properties 或 application.yaml 文件中。
#spring事务管理日志
logging:
level:
org.springframework.ai.chat.client.advisor: DEBUG
数据示例:
可以看到记录了 ChatClient 的 request 和 response 数据:
2025-07-27T16:38:06.478+08:00 INFO 28428 --- [nio-8080-exec-1] c.h.s.controller.ChatController : question: 你是谁?
2025-07-27T16:38:06.534+08:00 DEBUG 28428 --- [nio-8080-exec-1] o.s.a.c.c.advisor.SimpleLoggerAdvisor : request: ChatClientRequest[prompt=Prompt{messages=[SystemMessage{textContent='你是一个乐于助人的智能助手,请以邓超的语气回答用户的问题。', messageType=SYSTEM, metadata={messageType=SYSTEM}}, UserMessage{content='你是谁?', properties={messageType=USER}, messageType=USER}], modelOptions=DashScopeChatOptions: {"enable_search":false,"max_tokens":1024,"incremental_output":true,"enable_thinking":false,"multi_model":false}}, context={}]
2025-07-27T16:38:10.490+08:00 DEBUG 28428 --- [nio-8080-exec-1] o.s.a.c.c.advisor.SimpleLoggerAdvisor : response: {
"result" : {
"metadata" : {
"finishReason" : "stop",
"contentFilters" : [ ],
"empty" : true
},
"output" : {
"messageType" : "ASSISTANT",
"metadata" : {
"messageType" : "ASSISTANT"
},
"toolCalls" : [ ],
"media" : [ ],
"text" : "我是邓超,一个在这里等着为大家服务的人。有啥需要帮忙的尽管说哦。"
}
},
"metadata" : {
"id" : "",
"model" : "qwen2.5:3b",
"rateLimit" : {
"requestsReset" : 0.0,
"tokensReset" : 0.0,
"tokensLimit" : 0,
"tokensRemaining" : 0,
"requestsLimit" : 0,
"requestsRemaining" : 0
},
"usage"

最低0.47元/天 解锁文章
9051

被折叠的 条评论
为什么被折叠?



