一、思维导图整体知识结构梳理
多模态图片识别与生成
- 多模态基础概念:模型同时支持文本、图像等多种类型输入输出
- 图片理解:传入图片 + 文字提问,大模型读取图片内容并回答
- 代码实现:图片转资源对象,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
二、制作意图
- 拓展 Spring AI Alibaba 能力,学习多模态,掌握图片理解、文生图两种图像相关能力;
- 掌握 SSE 流式输出,实现 AI 打字机效果,优化前端聊天交互体验;
- 使用 PromptTemplate 将提示词抽离模板文件,代码与提示词解耦,便于维护调优;
- 学习 ChatMemory+Advisor,解决大模型无状态问题,实现带上下文记忆的多轮连续对话,为智能体开发打下基础。
三、当日学习总结
Day38 学习 Spring AI Alibaba 进阶内容:
-
学习多模态能力,实现图片理解(看图问答)与文生图,模型支持图文混合输入输出。
-
学习 SSE 流式输出,借助 Flux 响应式编程,调用
stream()接口实现逐 token 推送,前端实现打字机聊天效果,提升用户体验。 -
使用 PromptTemplate 提示词模板,把 prompt 抽离到独立模板文件,通过占位符动态填充参数,实现代码与提示词解耦。
-
学习 ChatMemory 会话记忆,大模型本身无状态,通过 ChatMemoryAdvisor 搭配 conversation_id,自动维护会话历史,实现多轮上下文对话;了解内存、Redis、MySQL 多种存储方案,窗口记忆控制消息数量,避免 token 开销过大。
