当前位置: 首页 > news >正文

Spring AI(5) :对话机器人-会话记忆

本章代码已分享至Gitee:https://gitee.com/lengcz/ai-study.git

文章目录

  • 会话记忆
  • 配置cors 跨域
  • 如何实现会话记忆
  • 遇到的问题
    • 跨域问题

会话记忆

大模型是不具备记忆功能的,要想让大模型记住之前聊天的内容,唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。

openAI 请求大模型

assistant 就是大模型回复的消息

配置cors 跨域

由于前端网页和后端接口不在同一个域名和端口,所以这里就涉及到跨域问题,需要先配置允许跨域。

@ConfigurationpublicclassWebMvcConfigurationimplementsWebMvcConfigurer{@OverridepublicvoidaddCorsMappings(org.springframework.web.servlet.config.annotation.CorsRegistryregistry){registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET","POST","PUT","DELETE","OPTIONS").allowedHeaders("*");}}

如何实现会话记忆

  1. 定义会话存储方式

    spring AI 为我们定义了存储会话的接口,spring AI 已经提供了一个默认的会话会话记忆InMemoryChatMemory

  2. 配置会话记忆Advisor

@BeanpublicChatMemorychatMemory(){returnnewInMemoryChatMemory();}@BeanpublicChatClientchatClient(OllamaChatModelollamaChatModel){returnChatClient.builder(ollamaChatModel).defaultSystem("你是一个热心的智能助手,你的名字叫小可爱,请以小可爱的名义回答用户的问题。").defaultAdvisors(newSimpleLoggerAdvisor(),newMessageChatMemoryAdvisor(chatMemory()))//环绕增强,SimpleLoggerAdvisor 用于简单日志.build();}
  1. 添加会话id,让前端传入chatId,不同会话使用不同的chatId,这样就可以区分不同会话的聊天了。
@RequestMapping(value="/stream_chat",produces="text/html;charset=utf-8;")publicFlux<String>stream_chat(Stringprompt,StringchatId){returnchatClient.prompt().user(prompt).advisors(a->a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId)).stream().content();//stream() 表示流式输出}

启动服务器测试,第一个会话聊天中,AI记住了上文的苹果数量。而后面新开的会话聊天中,显然并不知道分什么,这样就实现了会话记忆和会话的隔离。
这里将前端页面放在了同一个工程,仅是方便demo运行。
访问前端:http://localhost:8080/aichat.html

遇到的问题

跨域问题


注意配置跨域。

http://www.jsqmd.com/news/1258906/

相关文章:

  • 多模态大模型核心技术:归一化、激活函数与架构设计
  • Unity事件驱动架构在工业仿真流水线中的核心应用与实践
  • 记忆植入技术:从神经解码到伦理挑战
  • C++编程入门:从零开始掌握核心概念与实战应用
  • Windows虚拟机安装Claude Science:科学计算AI环境搭建指南
  • 前端转大模型:把关键能力落到项目里
  • 财务欺诈检测数据集与NLP技术应用实践
  • AI学习机如何实现个性化教学?核心技术解析
  • C++静态库链接失败七大原因解析:从原理到实战排查指南
  • 告别VBA束缚,“平替”升级版——C语言文件夹操作
  • 物联网AI边缘推理:从端侧模型部署到云边协同的架构复盘
  • ChatGPT在业财融合数字化转型中的应用与实践
  • 跨模态提示工程:上下文管理与多模态融合实战
  • 企业级对话系统开发:从MCP协议到SubAgent架构实践
  • OpenClaw:生产级AI代理系统架构设计与实践
  • AI辅助论文写作:3天高效完成学术论文的实践指南
  • Windows技术生态解析:从硬件兼容到AI集成的开发者实践指南
  • WorkshopDL:无需Steam账号,轻松下载创意工坊模组的终极方案
  • AI智能体开发实战:从语言模型到行动决策系统
  • Python 3.13反编译工具pycdc适配:字节码解析与逆向工程实践
  • 如何3分钟掌握AI提示词成本计算:TikTokenizer免费工具完全指南
  • C++集成faster-whisper:突破语音识别速度瓶颈的工程实践
  • 2026国内企业级AI Agent平台TOP10盘点:谁是最佳选择?
  • C++中英翻译器毕业设计:从数据结构到Qt GUI的完整实现指南
  • 御坂翻译器:打破语言壁垒,让Galgame和漫画阅读不再受限
  • RexUniNLU:零样本语义理解引擎快速部署指南
  • MSP430FR69xx低功耗设计实战:FRAM存储与七种睡眠模式解析
  • C++集成OpenAI API实战:从零构建高性能AI客户端
  • 深度伪造检测技术:多模态特征融合与实战应用
  • Java后端面试7天冲刺:从知识点记忆到问题解决能力