SpringAI实践-聊天增强
通过下面的调试可以知道,当前还没有实现聊天记忆功能,用户前一个问的问题,模型并没有记住。

三、实现聊天记忆功能
1、在实现聊天记忆之前,先配置一下日志打印的增强,什么是增强?
进到框架的内部代码中,可以看到,有一个专门的包里保存了一些Advisor结尾的类,这些类就是框架提供的增强类,SpringAI框架什么增强都没有的状态,只是提供了核心功能,实现Agent跟模型简单的一问一答,这核心但简单的功能,肯定是不满足开发需要的,所以就在这个流程上增加了N个增强,以一种调用链的方式呈现,这些增强的代码的里,配置了Agent跟模型交互过程中,请求和返回时的操作,因为这些增强可以配置顺序,哪些先执行,哪些后执行,所以整个流程,呈现一种U形状的调用,栈的形式。


由框架代码类名可知,增强由涉及消息记忆MessageChatMemoryAdvisor、总计历史记录注入提示词模板中的PromptChatMemoryAdvisor、敏感词屏蔽的SafeGuradAdvisor,还有打印调用过程信息的SimpleLoggerAdvisor。
当前在代码中新集成SimpleLoggerAdivsor,把调用的信息打印出来。
先设置日志级别为DEBUG

后再配置调用模型客户端的地方,把这个SimpleAdivosor配置进去:

然后在页面调用一下,可以在控制台看到:

可以看到不管请求和返回,都体现了消息有不同的类型SYSTEM: 系统提示词,USER: 用户提示词, ASSISTANT: 模型返回提示词(当然这会只体现返回,之后集成聊天记忆后,聊天的返回也是提示词的一种)
2、集成聊天记忆功能
当前使用一下内存记忆

这段是注入聊天记忆的配置,首先是将存储介质通过参数的方式注入进去,然后构造一个聊天窗口的聊天记忆bean,设置窗口大小为100。
后将这个ChatMemory通过参数的方式注入到chatClient中,配置一个MessageChatMemoryAdivisor的增强。

然后在客户端跟模型对话的时候,为每个会话设置一个聊天窗口,当前就认为会话就是userId,

这种配置的效果是,在当前的聊天过程的上下文中,添加一个会话id,然后增强的时候,程序走到聊天记忆的增强的before代码的时候,会先获取到有没有ChatMemory.CONVERSATION_ID这个字段,如果没有,就拿默认的值作为会话id,拿到会话id之后在从记忆力拿到内容放到提示词中,一起送给模型,如下:

然后重新运行,看下效果:

增加敏感词检测增强:

效果如下:


浙公网安备 33010602011771号