【Spring AI+Spring AI Albaba从零开始的学习之旅】之Advisor 增强篇——如何让AI拥有记忆?

        前面我们聊到了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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤姆大聪明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值