02-对话机器人-会话日志
02 对话机器人 会话日志
SpringAi 利用 AOP 原理提供了 AI 绘画的拦截、增强等功能,也就是 Advisor
1. 官方流程图

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

-
SimpleLoggerAdvisor:用于实现基本日志功能(默认输出到控制台,可通过日志配置输出到其他位置)
-
MessageChatMemoryAdvisor:用于实现会话记忆功能
-
QuestionAnswerAdvisor:用于实现RAG
3. 配置Advisor
-
配置日志Advisor
// 构建默认工厂 @Bean public ChatClient chatClient(OllamaChatModel model) { return ChatClient.builder(model) // 默认设定 .defaultSystem("你是可爱的助手,名字叫小团团。") // 配置日志 Advisor .defaultAdvisors(new SimpleLoggerAdvisor()) // 构建 ChatClient 实例 .build(); } -
设置日志级别
logging: level: org.springframework.ai.chat.client.advisor: debug -
重启项目,并访问接口,可以在控制台看到日志输出
浏览器访问接口: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
}
}
至此,会话日志添加完成

浙公网安备 33010602011771号