蜗牛学苑 Java 智能体学习 Day38|Spring AI Alibaba2 思维导图复盘

一、思维导图整体知识结构梳理

多模态图片识别与生成

  • 多模态基础概念:模型同时支持文本、图像等多种类型输入输出
  • 图片理解:传入图片 + 文字提问,大模型读取图片内容并回答
    • 代码实现:图片转资源对象,user 消息内同时携带文本与图片
    • 案例:识别图片人物、提取图片信息
  • 文生图:通过文字描述,调用模型生成图片
    • 后端接口:接收提示词,调用图像模型返回图片 URL
    • 前端页面:展示 AI 生成图片

流式对话 SSE

  • 传统一次性返回:模型全部生成完毕后统一返回,等待久,体验差
  • 流式输出原理:SSE 服务端推送协议,模型每生成一段 token,立刻推送给前端,打字机效果
  • Spring AI API:stream()方法,返回 Flux 响应流
  • Controller 接口:返回Flux<ServerSentEvent<String>>
  • 前端:EventSource 接收 SSE 流,分段渲染文字
  • 测试:Postman / 前端页面实时展示逐字输出

提示词模板 PromptTemplate

  • 痛点:硬编码字符串提示词,不方便维护、修改
  • 作用:把提示词抽离成模板文件,支持占位符动态传参
  • 资源读取:@Value读取 classpath 下.st模板文件
  • 使用步骤:加载模板 -> 填充占位符参数 -> 构建 Prompt 对象交给 ChatClient
  • 优势:提示词和 Java 代码解耦,便于单独调试优化 prompt

ChatMemory 会话记忆

  • 问题:大模型本身无状态,每次对话独立,默认记不住历史对话
  • ChatMemory 作用:自动保存当前会话历史消息,自动拼接上下文,实现多轮对话
  • 核心组件
    • ChatMemoryAdvisor:Advisor 增强器,自动读取 / 写入会话历史
    • conversation_id:会话唯一标识,区分不同用户对话
  • 内存实现:MessageWindowChatMemory,窗口记忆,限制消息条数防止 token 无限膨胀
  • 存储方案:内存(测试)、Redis、MySQL 持久化存储(生产环境)
  • 代码:.advisors(a -> a.param(ChatMemory.CONVERSATION_ID, chatId))绑定会话 ID

二、制作意图

  1. 拓展 Spring AI Alibaba 能力,学习多模态,掌握图片理解、文生图两种图像相关能力;
  2. 掌握 SSE 流式输出,实现 AI 打字机效果,优化前端聊天交互体验;
  3. 使用 PromptTemplate 将提示词抽离模板文件,代码与提示词解耦,便于维护调优;
  4. 学习 ChatMemory+Advisor,解决大模型无状态问题,实现带上下文记忆的多轮连续对话,为智能体开发打下基础。

三、当日学习总结

Day38 学习 Spring AI Alibaba 进阶内容:

  1. 学习多模态能力,实现图片理解(看图问答)与文生图,模型支持图文混合输入输出。

  2. 学习 SSE 流式输出,借助 Flux 响应式编程,调用stream()接口实现逐 token 推送,前端实现打字机聊天效果,提升用户体验。

  3. 使用 PromptTemplate 提示词模板,把 prompt 抽离到独立模板文件,通过占位符动态填充参数,实现代码与提示词解耦。

  4. 学习 ChatMemory 会话记忆,大模型本身无状态,通过 ChatMemoryAdvisor 搭配 conversation_id,自动维护会话历史,实现多轮上下文对话;了解内存、Redis、MySQL 多种存储方案,窗口记忆控制消息数量,避免 token 开销过大。

相关推荐
Co_Hui1 小时前
Java 静态内部类、非静态内部类、匿名内部类的区别?
java
Wang's Blog2 小时前
Java框架快速入门: Spring Security+OAuth2之自定义认证过滤器实现JSON登录
java·spring·json
摘星星的屋顶2 小时前
2026年8月31日~2026年9月13日周报
人工智能·学习
Wang's Blog2 小时前
Java框架快速入门: Spring Security+OAuth2之密码验证规则与自定义注解
java·数据库·spring
一嘴一个橘子2 小时前
java - redis 缓存击穿 - 互斥锁
java
shehuiyuelaiyuehao2 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
小刘在重生~2 小时前
Java 异常体系完整笔记
java·笔记·python
抠脚小弟2 小时前
Spring Task 定时任务详解:从入门到实战
java·后端·spring
2601_962284503 小时前
Python 和Java 哪个更适合做自动化测试?
java·自动化测试·python·接口测试·性能测试