图片

让Java开发者像写Spring Boot一样开发AI应用——第二阶段第五篇

写在前面

第九天,我们给Agent装上了“短时记忆”——它能在同一会话中记住“刚才说了什么”。

第十天,我们给Agent装上了“长时记忆”——它能跨会话检索“之前聊过什么”。

但还有一个更根本的问题:Agent“认识”你吗?

它记得“你喜欢喝美式咖啡”这件事,但它不知道“你”是谁——不知道你的职业、你的习惯、你的长期目标。它记住的是一堆零散的事实,而不是一个完整的你。

这就像一个助理,手里有一堆关于你的便签纸——“喜欢简洁”“Java开发”“住北京”——但从来没有把这些碎片拼成一张完整的人物画像。

今天,我们给Agent装上“用户画像记忆”——让Agent从“记住关于你的事”升级为“真正认识你”。

📌 本文是第二阶段“核心能力实战篇”的第五篇。前两篇我们解决了“会话内记忆”和“跨会话记忆”,今天完成记忆体系的最后一块拼图——用户画像记忆。至此,Agent的三层记忆架构(短时+长时+画像)正式闭环。

一、从“聊天记忆”到“特征记忆”

用户画像记忆 ≠ 聊天记忆

在开始之前,先厘清一个关键概念:用户特征记忆(User Profile Memory)和聊天记忆(Chat Memory)是两回事。

| 维度

|

聊天记忆(短时/长时)

|

用户画像记忆

作用域

当前会话(短时)或跨会话检索(长时)

| 全部会话,始终可用 | | 存储内容 |

对话原文、消息列表

| 提炼后的结构化用户画像 | | 持久性 |

会话结束后可清理

| 长期保留,持续更新 | | 用途 |

保持上下文连贯

| 个性化回答、主动推荐 |

用户画像记忆的价值在于:让AI“记住你是谁”,而不是每次对话都重新认识你。

💡 短时记忆是“便签纸”,长时记忆是“日记本”,用户画像记忆是Agent对你的“人物小传”。

一个真实的场景对比:

<span leaf="">❌ 没有用户画像记忆:</span>

用户画像记忆的三大核心能力

用户画像记忆让Agent具备三种关键能力:

| 能力

|

说明

|

示例

个性化应答

根据用户偏好调整回复风格、内容深度

|

“您喜欢简洁,我为您总结3个要点”

| | 主动推荐 |

基于历史偏好主动推荐相关内容

|

“您上次喜欢喝美式,今天要加一杯吗?”

| | 持续学习 |

从每次对话中自动提取新特征,不断丰富画像

|

用户说“我最近开始学Python” → 画像新增“技能:Python初学者”

|

💡 用户画像记忆是三层记忆架构中最接近“人”的一层——它让Agent从“工具”变成了“伙伴”。

二、画像的自动提取与更新:提取→存储→注入

用户画像记忆的完整工作流程,可以概括为三个关键动作:

<span leaf="">① 画像提取(Extract)</span>

画像数据结构设计

用户画像的核心数据模型:

<span leaf=""><span>CREATE TABLE</span>&nbsp;user_memory (</span>

关键字段的设计意图:

| 字段

|

作用

category

记忆分类(偏好/个人信息/习惯/其他),方便按场景筛选

| | confidence | 置信度

:同一条记忆被多次验证则递增,避免“随口一说”被当成稳定特征

| | source |

区分AI自动提取还是用户手动添加,手动添加的具有更高优先级

|

💡 confidence(置信度)是用户画像记忆的一个精妙设计——它让系统能区分“用户随口说的一句话”和“用户反复确认的稳定偏好”。这是从“记录”到“理解”的关键一步。

三、三层记忆架构:终于拼完了最后一块拼图

经过三天的学习,我们终于可以画出Agent记忆体系的完整全景图:

<span leaf="">┌─────────────────────────────────────────────────────────────────────┐</span>

长短记忆双向交互闭环

三层记忆不是孤立的,而是形成了一个双向交互的闭环:

| 环节

|

流转方向

|

核心作用

|

依赖能力

Record(记忆写入)

短期 → 长期 → 画像

|

提炼有效信息,沉淀用户专属特征

|

LLM信息抽取、结构化、去重降噪

| | Retrieve(记忆召回) |

画像 → 长期 → 短期

|

补充历史上下文,实现个性化应答

|

语义检索、相似度匹配、上下文拼接

|

💡 Record负责“把当下变成历史”,Retrieve负责“让历史服务当下”。三层记忆就像一个学习型组织——短时记忆是“会议记录”,长时记忆是“档案库”,用户画像是“员工档案”。每次对话都是一次“会议”,结束后有价值的信息被归档到“档案库”,同时更新“员工档案”。

ModelHook自动化协同

Spring AI Alibaba通过ModelHook / 拦截器实现三层记忆的自动化协同:

<span leaf="">用户发送消息</span>

四、记忆的优先级与冲突处理

优先级规则

当多个来源的记忆指向同一件事但内容不同时,需要明确的优先级规则:

| 优先级

|

记忆来源

|

说明

最高

用户手动添加

|

用户主动告诉Agent的偏好,具有最高权威

| | |

高频验证(高置信度)

|

多次对话中反复出现的特征,置信度≥3

| | |

单次提取(低置信度)

|

只出现过一次的信息,可能只是随口一说

|

置信度递增策略:

<span leaf=""><span>// 每次验证同一条记忆时,置信度+1</span></span>

💡 置信度机制避免了“用户随口说一句”就被当成永久偏好的问题。一条记忆被验证3次以上,才被认为是稳定的用户特征。

冲突处理策略

当用户画像中的记忆与当前对话中的信息发生冲突时,需要明确的处理策略:

| 策略

|

适用场景

|

处理方式

MERGE(合并)

新旧信息互补,不矛盾

|

融合新旧信息,更新原有记忆

| | UPDATE(覆盖) |

新信息明确替代旧信息

|

“我以前喜欢喝拿铁,现在改喝美式了” → 覆盖

| | DELETE(删除) |

信息已过时或错误

|

“我不再是Java开发了” → 删除旧职业信息

| | CREATE(新建) |

全新的信息,无匹配

|

新增独立记忆条目

| | SKIP(跳过) |

重复或无价值信息

|

直接舍弃不入库

|

五、实战:构建“越用越懂你”的个性化助手

实战一:画像提取服务

在对话结束后,自动调用LLM从对话中提取用户画像并存入数据库:

<span leaf=""><span>@Service</span></span>

实战二:将画像注入systemPrompt

每次对话前,自动加载用户画像并注入systemPrompt:

<span leaf=""><span>@Service</span></span>

实战三:完整Controller

<span leaf=""><span>@RestController</span></span>

六、用户画像记忆的最佳实践

画像提取的质量控制

| 原则

|

说明

只提取稳定事实

不提取临时信息(天气、心情等),只提取长期有效的特征

| | 归一化表述 |

“我要去旧金山” → “用户计划去旧金山旅行”

| | 置信度机制 |

反复出现才递增,避免“随口一说”被当成偏好

| | 分类存储 |

按PREFERENCE/PERSONAL_INFO/HABIT分类,便于按场景筛选

|

注入时机的选择

| 时机

|

优点

|

缺点

每次对话前注入

画像始终最新

|

每次都要查询数据库

| | 会话开始时注入 |

减少数据库查询

|

会话内画像不更新

| | 缓存+定期刷新 |

平衡性能和实时性

|

实现稍复杂

|

推荐:会话开始时加载并缓存,对话结束后异步更新。

隐私与安全考量

| 考量

|

建议

用户授权

存储用户画像前需获得用户明确同意

| | 数据最小化 |

只存储必要的画像信息,不存储敏感数据

| | 用户控制 |

提供查看、编辑、删除画像的界面

| | 数据加密 |

生产环境对画像数据进行加密存储

|

三层记忆的协同使用

| 场景

|

优先使用的记忆层

当前会话内的上下文

|

短时记忆(threadId)

| |

跨会话的知识检索

|

长时记忆(向量库 + RAG)

| |

用户是谁、喜欢什么

|

用户画像记忆(userId + category)

|

七、课后挑战

任务:实现一个能记住用户喜好并主动推荐的Agent

要求:

  1. 实现用户画像的自动提取(对话结束后LLM抽取)

  2. 实现画像的存储与更新(含置信度递增机制)

  3. 实现画像的注入(每次对话前加载并注入systemPrompt)

  4. 实现主动推荐功能(基于用户偏好主动推荐相关内容)

验收标准:

  • 用户画像能从对话中自动提取并存储

  • 同一偏好反复出现时,置信度能正确递增

  • 新会话中能自动加载画像并影响回复风格

  • 能基于用户偏好做出主动推荐

  • 用户能查看、编辑、删除自己的画像

八、本日核心收获

  1. 用户画像记忆 ≠ 聊天记忆——前者是“认识你是谁”,后者是“记得聊过什么”

  2. 三层记忆架构正式闭环——短时记忆(会话连贯)+ 长时记忆(跨会话检索)+ 用户画像(真正认识你)

  3. 提取→存储→注入三步走——LLM抽取结构化事实→存入数据库→每次对话前注入systemPrompt

  4. 置信度机制是精髓——区分“随口一说”和“稳定偏好”,避免画像污染

  5. ModelHook自动化协同——beforeModel读取、afterModel保存,开发者无需手动管理

  6. Record + Retrieve双向闭环——Record把当下变成历史,Retrieve让历史服务当下

📌 本文是第二阶段“核心能力实战篇”的第五篇。第九、十、十一天,我们完成了Agent记忆体系的完整搭建——短时记忆、长时记忆、用户画像记忆三层架构正式闭环。至此,Agent不仅会“思考”、会“动手”,还拥有了完整的“记忆系统”。下一篇,我们将进入多智能体协同的进阶实战,让多个Agent组成“组织”协同工作。

有任何问题,欢迎在评论区留言交流!


作者:Java老兵搞AI,专注Java生态下的AI应用开发

如果觉得有用,点个「关注」支持一下吧,下期见!