短期、长期及实体记忆

快速回顾

项目 内容
短期记忆 当前会话的近期消息与条件,滑动窗口结合历史摘要
长期记忆 有来源的历史背景、重要事件和明确偏好,支持跨会话召回
实体记忆 用稳定业务 ID 关联设备、机型与任务,辅助指代消解
存储分工 MySQL 保存事实与来源;Redis 缓存近期对话和偏好;Qdrant 保存可重建向量
召回链路 范围过滤 → 语义召回 → 回查来源与权限 → 去重及冲突检查 → 预算内装配
更新与删除 区分临时指令和长期偏好,处理旧值替代、投影更新及遗忘控制
业务边界 记忆帮助理解背景与定位对象,动态状态和权限仍通过业务服务校验

面试主回答

我们把记忆分为当前会话的短期上下文、跨会话的长期信息,以及帮助识别设备和任务的实体关联。MySQL 保存消息、历史事件和记忆来源,Redis 缓存近期对话与常用偏好,Qdrant 提供可重建的语义召回。

当前对话通过滑动窗口和历史摘要控制长度,计划与执行状态单独保存。长期记忆整理用户明确表达的偏好和历史任务背景,实体关联使用稳定业务 ID,遇到多个候选时再向用户确认。

召回时先按组织和用户过滤,再回查来源、权限与有效状态,最后按预算装配上下文。记忆用于理解背景和定位对象,设备状态、任务冲突和维修进展仍通过业务工具查询,避免旧信息直接影响当前操作。

记忆类型与存储分工

短期、长期及实体记忆分别是什么?

面试回答

短期记忆服务于当前对话,比如保留刚确认的设备和时间,理解下一句里的“它”或“改到明天”。长期记忆保存跨会话可复用的背景、重要事件和明确偏好。实体记忆则把用户提到的机器、机型或工单关联到稳定业务对象,解决到底说的是谁。

例如先查资产 A 的维保记录,再问它为什么停机,近期对话帮助确定指代;过一段时间问上次那台收割机的维修进展,长期记忆找回讨论背景,实体关联定位资产,再用业务工具查当前进展。这些是用途上的区分,可以重叠,也不分别对应某一种数据库。

实现细节

三类记忆的对象和目的见表。实体关联回答对象是谁,历史背景回答过去发生或表达过什么;设备当前能否调度和维修是否完成,仍以当前业务查询为准。

类型 保存什么 解决什么问题
短期记忆 当前会话的近期消息、刚补充的条件 理解追问、指代和当前任务
长期记忆 历史任务背景、重要事件和明确偏好 跨会话找回相关信息
实体记忆 用户提到的设备、机型、任务等实体及关联 识别这台机器、上次那张工单等指代

MySQL、Redis 和 Qdrant 怎么分工?

面试回答

MySQL 保存完整消息、历史事件、记忆记录、实体关联和来源,是可以回查的持久化记录。Redis 缓存近期对话与常用偏好,设置 TTL 和容量上限,加快上下文加载。Qdrant 保存记忆文本向量和过滤字段,用语义检索找出跨会话可能相关的历史信息。

召回后还会回查 MySQL,检查记录是否有效、来源是否可访问。Redis 过期只意味着缓存需要重建,Qdrant 向量丢失也可以从有效记录重新编码。记忆用的是文本 embedding,知识库文档页用 ColQwen 视觉多向量,两者的用途和向量空间不同,不能直接混在一起检索。

实现细节

存储职责见表。清理缓存、删除长期记忆和重建向量投影是不同操作,不能仅通过 Redis Key 是否存在判断记忆是否仍有效。

组件 主要职责
MySQL 保存完整消息、历史事件、记忆记录、实体关联及来源
Redis 缓存近期对话和常用偏好,设置 TTL 与容量上限
Qdrant 保存记忆文本向量及过滤字段,支持跨会话语义检索

记忆形成与实体关联

短期记忆怎么管理?

面试回答

短期记忆用滑动窗口保留最近的有效消息,较早内容压缩成历史摘要。窗口里优先保留用户刚修改的时间、设备编号和当前任务条件,裁剪按 token 预算做,避免只按消息条数限制,遇到单条很长的工具结果就失控。

长结果只提取相关内容,工具调用与返回保持对应。计划、草案、用户确认和执行结果单独持久化,恢复任务时读取这些结构化记录,不能只靠聊天摘要猜做到哪一步。这样近期对话负责理解追问,任务状态负责保证执行连续性,二者配合控制上下文长度。

实现细节

窗口条数不能代表实际 token 数,工具 Schema、返回正文和摘要都要计入预算。用户新修改的条件覆盖当前任务旧值,重要约束与执行状态独立于摘要保存。

长期记忆怎么形成,哪些内容值得保存?

面试回答

长期记忆从历史消息和事件中整理可复用的信息,比如用户明确表达的展示偏好、历史任务背景、讨论过的设备和故障。每条保留来源、时间和组织用户范围,持久化后再为有效内容建立向量索引,便于后续语义召回。

记录时区分建议和事实。Agent 提议下周保养,不能记成保养已经安排,只有实际执行成功后才能关联对应业务记录。设备当时维修可以保留为历史背景,但下次调度还要查当前状态。长期保存的价值在于减少用户重复交代背景,同时让信息有来源可核对。

实现细节

可保存明确的展示偏好,例如维保建议按紧急程度排序。记忆区分用户陈述、已确认业务事件与模型建议;动态状态保留时间属性,不能在后续对话中自动升级成当前事实。

实体记忆怎么保存,如何避免认错设备?

面试回答

实体关联用稳定业务 ID 保存,名称、别名、机型和来源消息辅助匹配。用户说“那台收割机”时,最终要关联到具体 assetId,不能只记住机型,因为同一机型可能对应多台资产,一台资产又可能有多张工单。

召回候选后再通过业务查询确认对象和当前访问权。多个设备都符合描述时,让用户选择或补充信息,不直接取第一条。关联完成后,记忆帮助后续指代定位,但不会授予权限,也不能把工单 ID、机型 ID 和资产 ID 混为同一个对象。

实现细节

实体关联同时保留类型、稳定 ID 与来源,避免跨类型同名误配。访问权在使用时检查,用户过去讨论过某台设备,不代表现在仍可读取它的资料。

召回、更新与隔离

长期记忆怎么召回并放进上下文?

面试回答

先根据当前问题和明确实体确定检索范围,按组织、用户和有效状态过滤,再从 Qdrant 召回相关历史信息。之后回查 MySQL 里的记录与来源权限,去重并检查时间和冲突,挑选有用片段放入上下文。

相似度高只说明可能相关,旧偏好已被修改、来源已撤权或记录失效时都不能继续使用。装配时优先保留当前问题、明确约束和当前任务证据,长期记忆控制在预算内,不能挤掉关键资料。偏好可以影响答案展示方式,但不能改变权限、审批规则或者确定性计算出来的指标。

实现细节

召回顺序为范围过滤、语义检索、来源回查、有效性与冲突检查、预算装配。近期消息、历史摘要、长期信息和业务证据共同使用,但分别承担背景理解、任务执行与结论依据。

新旧记忆冲突、用户修改偏好怎么办?

面试回答

先区分信息类型。用户明确修改长期偏好时,更新可定位的偏好记录,保留版本和来源,用新值替代旧值,并同步 Redis 缓存和 Qdrant 投影。只针对当前任务的指令,就只影响这次,不自动覆盖长期设置。

比如默认展示未来两周维保,用户说“这次只看本周”,长期默认值不变。历史事件则按时间分别保存,设备发生第二次故障不能抹掉第一次;动态业务状态只作为当时背景,现在的状态重新查询。这样冲突处理依据来源、时间和作用范围,不能让所有相似记忆简单互相覆盖。

实现细节

不同内容的更新方式见表。投影更新存在时间差时,召回回查当前有效记录,避免旧值继续生效;当前任务的新要求优先用于本次执行,但不自动形成永久偏好。

内容类型 例子 更新方式
明确长期偏好 默认查看未来两周维保 新值替代旧值,保留来源与版本并更新投影
当前任务指令 这次只看本周 仅影响当前任务,不自动覆盖长期偏好
历史事件 同一设备先后发生两次故障 按时间分别保留,不互相覆盖
动态业务状态 设备当时正在维修 只作历史背景,当前状态重新查询

多租户隔离和删除怎么处理?

面试回答

记忆的缓存和向量过滤都带组织、用户及相应会话范围,召回后还会回查当前记录和来源权限。用户过去能读某段会话,不代表现在仍有权使用它的派生内容;来源已经不可读时,相关记忆也不能继续注入上下文。

删除或修改以 MySQL 有效记录为准,再同步清理缓存和向量投影。向量异步更新期间,回查可以阻止旧投影生效。用户明确要求遗忘时,还要保留对应遗忘控制,防止下一轮整理旧消息又抽取出同一条信息,仅删除当前一条向量无法完成这种持续遗忘。

实现细节

删除覆盖持久化记忆、缓存与向量投影,来源保留场景下还需要阻止重新抽取。派生记忆的可访问性不能超出来源,向量过滤和回查共同处理多租户隔离与撤权。

评测与结果

怎么判断记忆有没有帮助?

面试回答

我会对同一批历史任务,比较启用长期召回和只用近期对话的表现。先看是否找到了相关背景、是否定位到正确设备或工单,用户是否少重复说明信息,再看跨会话任务能不能正确完成。

同时检查过时和冲突信息有没有被错误注入,尤其不能让历史设备状态干扰当前调度,或者绕过权限检查。最后记录额外的上下文 token 和耗时,判断收益是否值得。如果只是召回更多历史文本,却没有改善对象定位和任务完成,甚至带来旧信息干扰,就不能认为记忆有效。

实现细节

指标与核对内容见表。对照保持任务、历史来源和执行条件一致,分别观察背景复用、实体定位、当前事实正确性及成本,不用召回条数单独衡量效果。

指标 检查内容
召回相关性 历史信息是否与当前问题相关
实体定位准确率 是否关联正确资产、机型或工单
过时与冲突比例 是否注入被替代或不再适用的信息
跨会话任务完成情况 是否减少重复背景补充且正确完成任务
上下文 token 与耗时 记忆带来的额外成本

易混点与回答检查

易混点:记忆类型描述用途,不与数据库一一对应;历史设备状态不能当作当前事实;缓存过期不等于长期记忆删除。

回答检查

补充记录

简历表述:MySQL 持久化消息与历史事件,Redis 存用户偏好并缓存近期对话,Qdrant 提供可重建的语义检索;通过滑动窗口与摘要压缩支持长期记忆召回。

事实 / 代码依据:待补充。

复盘手记

搜索笔记

输入关键词,搜索所有主题与问答。