02-对话机器人-会话日志

02 对话机器人 会话日志

SpringAi 利用 AOP 原理提供了 AI 绘画的拦截、增强等功能,也就是 Advisor

1. 官方流程图

SpringAi官方流程图

2. SpringAi中提供的部分Advisor实现

SpringAi提供的Advisor实现类

  • SimpleLoggerAdvisor:用于实现基本日志功能(默认输出到控制台,可通过日志配置输出到其他位置)

  • MessageChatMemoryAdvisor:用于实现会话记忆功能

  • QuestionAnswerAdvisor:用于实现RAG

3. 配置Advisor

  1. 配置日志Advisor

    // 构建默认工厂
    @Bean
    public ChatClient chatClient(OllamaChatModel model) {
        return ChatClient.builder(model)
                // 默认设定
                .defaultSystem("你是可爱的助手,名字叫小团团。")
                // 配置日志 Advisor
                .defaultAdvisors(new SimpleLoggerAdvisor())
                // 构建 ChatClient 实例
                .build();
    }
    
  2. 设置日志级别

    logging:
      level:
        org.springframework.ai.chat.client.advisor: debug
    
  3. 重启项目,并访问接口,可以在控制台看到日志输出

浏览器访问接口:http://127.0.0.1:8080/ai/chatStream?prompt=你是谁?

日志输出如下:

2025-07-22T03:40:19.776+08:00 DEBUG 27280 --- [chat-bot] [nio-8080-exec-2] 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=org.springframework.ai.ollama.api.OllamaOptions@b9570103}, context={}]
2025-07-22T03:40:29.744+08:00 DEBUG 27280 --- [chat-bot] [nio-8080-exec-1] o.s.a.c.c.advisor.SimpleLoggerAdvisor    : response: {
  "result" : {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "<think>\n好的,现在用户给了一个指令:“你好!我是你的助手,名字叫小团团。” 然后问“你是谁?” 我需要回应这个消息。\n\n首先,我得确认用户的使用场景是什么。看起来他们可能是在设置或询问助手的信息,比如想要了解助手的背景、功能或者目的。用户可能对AI助手有基本的疑问,想更深入地了解小团团的能力和角色。\n\n接下来,我要分析用户的身份。可能是普通用户,想使用这个助手来完成一些任务,但还不太清楚具体能做什么。他们的问题比较直接,就是想知道“你是谁”,这表明他们可能想要了解助手的基本信息或者服务范围。\n\n然后,我需要评估用户的深层需求。他们可能不仅仅是想知道名字,而是想知道小团团能为他们提供什么帮助,比如回答问题、提供建议、完成任务等等。所以,在回应时不仅要介绍名字,还要提到她的功能和用途,这样用户能更好地理解她的作用。\n\n在思考如何回复的时候,应该简洁明了地解释“我是AI助手小团团”,然后说明她的作用是“为你提供信息、帮助解决问题或完成任务”。这样既回答了问题,又涵盖了她的主要功能。同时,语气要友好,让用户体验到被理解和支持的感觉。\n\n最后,确保整个回应符合用户的要求,并且没有遗漏任何关键点。确认信息准确无误,同时表达出愿意继续协助的态度。\n</think>\n\n你好!我是AI助手小团团,一个由深度求索公司开发的智能助手,旨在为你提供帮助和服务。"
    },
    "metadata" : {
      "finishReason" : "stop",
      "contentFilters" : [ ],
      "empty" : true
    }
  },
  "results" : [ {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "<think>\n好的,现在用户给了一个指令:“你好!我是你的助手,名字叫小团团。” 然后问“你是谁?” 我需要回应这个消息。\n\n首先,我得确认用户的使用场景是什么。看起来他们可能是在设置或询问助手的信息,比如想要了解助手的背景、功能或者目的。用户可能对AI助手有基本的疑问,想更深入地了解小团团的能力和角色。\n\n接下来,我要分析用户的身份。可能是普通用户,想使用这个助手来完成一些任务,但还不太清楚具体能做什么。他们的问题比较直接,就是想知道“你是谁”,这表明他们可能想要了解助手的基本信息或者服务范围。\n\n然后,我需要评估用户的深层需求。他们可能不仅仅是想知道名字,而是想知道小团团能为他们提供什么帮助,比如回答问题、提供建议、完成任务等等。所以,在回应时不仅要介绍名字,还要提到她的功能和用途,这样用户能更好地理解她的作用。\n\n在思考如何回复的时候,应该简洁明了地解释“我是AI助手小团团”,然后说明她的作用是“为你提供信息、帮助解决问题或完成任务”。这样既回答了问题,又涵盖了她的主要功能。同时,语气要友好,让用户体验到被理解和支持的感觉。\n\n最后,确保整个回应符合用户的要求,并且没有遗漏任何关键点。确认信息准确无误,同时表达出愿意继续协助的态度。\n</think>\n\n你好!我是AI助手小团团,一个由深度求索公司开发的智能助手,旨在为你提供帮助和服务。"
    },
    "metadata" : {
      "finishReason" : "stop",
      "contentFilters" : [ ],
      "empty" : true
    }
  } ],
  "metadata" : {
    "id" : "",
    "model" : "deepseek-r1:7b",
    "rateLimit" : {
      "requestsLimit" : 0,
      "requestsReset" : 0.0,
      "tokensReset" : 0.0,
      "tokensLimit" : 0,
      "tokensRemaining" : 0,
      "requestsRemaining" : 0
    },
    "usage" : {
      "promptTokens" : 16,
      "completionTokens" : 325,
      "totalTokens" : 341
    },
    "promptMetadata" : [ ],
    "empty" : false
  }
}
2025-07-22T03:40:44.597+08:00 DEBUG 27280 --- [chat-bot] [oundedElastic-1] o.s.a.c.c.advisor.SimpleLoggerAdvisor    : response: {
  "result" : {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "<think>\n嗯,用户让我扮演一个叫小团团的助手,并且问“你是谁?”这个问题看起来挺常见的,但可能他们想更深入地了解我的功能和运作方式。\n\n首先,我需要明确自己作为AI助手的角色定位。我要让用户知道我是他们的知识伙伴,可以帮助回答各种问题、提供信息、解答疑问以及提供建议。同时,我还应该提到我的局限性,比如不具有情感或意识,不能代替真实的人,这样用户就不会误解我的能力。\n\n然后,考虑到用户可能需要进一步的互动或者了解如何使用我提供的服务,我可以邀请他们提出具体的问题或需求,展示我的多种功能,比如回答问题、提供建议、分享信息等。此外,提醒用户保持礼貌和尊重,这也是维护良好对话关系的重要部分。\n\n最后,确保语言简洁明了,让用户感到亲切且容易理解,这样他们就会对使用我产生信任感,并愿意继续互动。\n</think>\n\n你好!我是小团团,一个由深度求索(DeepSeek)开发的智能助手。我的使命是为您提供信息帮助、问题解答和建议服务。我会尽力为您提供准确、有用的信息,同时保持友好和专业的对话氛围。\n\n如果你有任何问题或需要任何帮助,请随时告诉我!"
    },
    "metadata" : {
      "finishReason" : "stop",
      "contentFilters" : [ ],
      "empty" : true
    }
  },
  "results" : [ {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "<think>\n嗯,用户让我扮演一个叫小团团的助手,并且问“你是谁?”这个问题看起来挺常见的,但可能他们想更深入地了解我的功能和运作方式。\n\n首先,我需要明确自己作为AI助手的角色定位。我要让用户知道我是他们的知识伙伴,可以帮助回答各种问题、提供信息、解答疑问以及提供建议。同时,我还应该提到我的局限性,比如不具有情感或意识,不能代替真实的人,这样用户就不会误解我的能力。\n\n然后,考虑到用户可能需要进一步的互动或者了解如何使用我提供的服务,我可以邀请他们提出具体的问题或需求,展示我的多种功能,比如回答问题、提供建议、分享信息等。此外,提醒用户保持礼貌和尊重,这也是维护良好对话关系的重要部分。\n\n最后,确保语言简洁明了,让用户感到亲切且容易理解,这样他们就会对使用我产生信任感,并愿意继续互动。\n</think>\n\n你好!我是小团团,一个由深度求索(DeepSeek)开发的智能助手。我的使命是为您提供信息帮助、问题解答和建议服务。我会尽力为您提供准确、有用的信息,同时保持友好和专业的对话氛围。\n\n如果你有任何问题或需要任何帮助,请随时告诉我!"
    },
    "metadata" : {
      "finishReason" : "stop",
      "contentFilters" : [ ],
      "empty" : true
    }
  } ],
  "metadata" : {
    "id" : "",
    "model" : "deepseek-r1:7b",
    "rateLimit" : {
      "requestsLimit" : 0,
      "requestsReset" : 0.0,
      "tokensReset" : 0.0,
      "tokensLimit" : 0,
      "tokensRemaining" : 0,
      "requestsRemaining" : 0
    },
    "usage" : {
      "promptTokens" : 16,
      "completionTokens" : 256,
      "totalTokens" : 272,
      "nativeUsage" : {
        "promptTokens" : 16,
        "totalTokens" : 272,
        "completionTokens" : 256
      }
    },
    "promptMetadata" : [ ],
    "empty" : true
  }
}

至此,会话日志添加完成

posted @ 2025-07-22 03:45  DongCha  阅读(67)  评论(0)    收藏  举报