快速回顾
| 项目 | 内容 |
|---|---|
| 短期记忆 | 当前会话的近期消息与条件,滑动窗口结合历史摘要 |
| 长期记忆 | 有来源的历史背景、重要事件和明确偏好,支持跨会话召回 |
| 实体记忆 | 用稳定业务 ID 关联设备、机型与任务,辅助指代消解 |
| 存储分工 | MySQL 保存事实与来源;Redis 缓存近期对话和偏好;Qdrant 保存可重建向量 |
| 召回链路 | 范围过滤 → 语义召回 → 回查来源与权限 → 去重及冲突检查 → 预算内装配 |
| 更新与删除 | 区分临时指令和长期偏好,处理旧值替代、投影更新及遗忘控制 |
| 业务边界 | 记忆帮助理解背景与定位对象,动态状态和权限仍通过业务服务校验 |
面试主回答
我们把记忆分为当前会话的短期上下文、跨会话的长期信息,以及帮助识别设备和任务的实体关联。MySQL 保存消息、历史事件和记忆来源,Redis 缓存近期对话与常用偏好,Qdrant 提供可重建的语义召回。
当前对话通过滑动窗口和历史摘要控制长度,计划与执行状态单独保存。长期记忆整理用户明确表达的偏好和历史任务背景,实体关联使用稳定业务 ID,遇到多个候选时再向用户确认。
召回时先按组织和用户过滤,再回查来源、权限与有效状态,最后按预算装配上下文。记忆用于理解背景和定位对象,设备状态、任务冲突和维修进展仍通过业务工具查询,避免旧信息直接影响当前操作。
记忆类型与存储分工
面试回答
短期记忆服务于当前对话,比如保留刚确认的设备和时间,理解下一句里的“它”或“改到明天”。长期记忆保存跨会话可复用的背景、重要事件和明确偏好。实体记忆则把用户提到的机器、机型或工单关联到稳定业务对象,解决到底说的是谁。
例如先查资产 A 的维保记录,再问它为什么停机,近期对话帮助确定指代;过一段时间问上次那台收割机的维修进展,长期记忆找回讨论背景,实体关联定位资产,再用业务工具查当前进展。这些是用途上的区分,可以重叠,也不分别对应某一种数据库。
实现细节
三类记忆的对象和目的见表。实体关联回答对象是谁,历史背景回答过去发生或表达过什么;设备当前能否调度和维修是否完成,仍以当前业务查询为准。
| 类型 | 保存什么 | 解决什么问题 |
|---|---|---|
| 短期记忆 | 当前会话的近期消息、刚补充的条件 | 理解追问、指代和当前任务 |
| 长期记忆 | 历史任务背景、重要事件和明确偏好 | 跨会话找回相关信息 |
| 实体记忆 | 用户提到的设备、机型、任务等实体及关联 | 识别这台机器、上次那张工单等指代 |
面试回答
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 提供可重建的语义检索;通过滑动窗口与摘要压缩支持长期记忆召回。
事实 / 代码依据:待补充。