真实面经题目 · 原创解析
AI 面试系统中,多轮对话记忆如何用 Redis 存储、过期和隔离?
这题考 AI 面试系统里的短期会话记忆设计。回答要围绕 Redis 如何保存多轮对话状态、控制 TTL、做用户/会话隔离、处理并发和失败恢复,不能泛化成抽象 Agent 记忆。
真实面经题目 · 原创解析
这题考 AI 面试系统里的短期会话记忆设计。回答要围绕 Redis 如何保存多轮对话状态、控制 TTL、做用户/会话隔离、处理并发和失败恢复,不能泛化成抽象 Agent 记忆。
我会把这里的记忆限定为 AI 面试系统运行中的会话状态,而不是长期人格记忆。Redis 适合保存低延迟、带 TTL 的短期上下文,例如最近 N 轮问答、当前题目、追问状态、已提取的候选人回答摘要、评分中间状态、模型请求 trace 和限流锁。数据模型上可以按 tenant、userId、sessionId、roundId 设计 key,使用 list/stream 保存轮次消息,用 hash 保存会话元数据,用 sorted set 或 stream 保存时间序列事件。每个 key 必须设置 TTL,并在会话结束、用户主动删除或隐私策略触发时清理。隔离上要避免不同用户、不同面试场次、不同租户共享上下文,模型组装 prompt 时只读取当前授权会话的数据。工程上还要处理并发写入、幂等 roundId、上下文截断、摘要压缩、Redis 故障降级和必要的持久化落库。核心思路是 Redis 管热状态和短期记忆,数据库或对象存储管需要审计和复盘的持久记录,两者职责不要混。
AI 面试系统的多轮记忆主要是当前面试场次内的短期状态,例如已问问题、候选人回答、追问依据、上下文摘要和评分过程。不要把它和跨月长期用户画像混在一起,否则隐私、权限和过期策略都会变复杂。
Redis 适合存储正在进行的会话上下文、最近轮次、临时摘要、题目状态、限流计数和分布式锁。它的价值是读写快、支持 TTL、易于按会话清理,适合模型每轮请求前快速装配上下文。
Key 应包含租户、用户、会话和轮次维度,例如 interview:{tenant}:{user}:{session}:turns。轮次消息可用 list 或 stream,会话元数据可用 hash,状态版本和锁可单独存储。这样能避免串 session,也方便按 session 删除。
不能把所有历史轮次无限塞给模型。通常保留最近几轮原文、关键事实摘要、当前题目状态和未完成追问;更早内容做结构化摘要或落库归档。这样既控制 token,也降低 Redis 内存和隐私暴露面。
创建会话时设置 TTL,活跃会话可续期,结束后转入 completed 状态并清理热 key。异常断开要有过期回收,用户删除或合规要求触发时要同时清 Redis 和持久层关联数据。TTL 不是唯一安全机制,还要有显式结束清理。
多端连接、语音转写、模型回答和评分可能并发写入同一场次,因此需要 roundId 幂等、版本号、Lua/事务或锁控制顺序。Redis 故障时要能从数据库恢复必要会话记录,或降级为无历史/少历史模式并明确标记。
数据库适合持久化和审计,但每轮模型请求都读写完整历史会增加延迟和压力。Redis 更适合热状态和 TTL 会话缓存,持久层保存必要记录即可。
保留最近轮次原文,把早期内容压缩成结构化摘要,只留下当前题目、候选人关键信息和未完成追问。模型上下文和 Redis 内存都要有预算。
Key 必须包含 sessionId 和用户/租户维度,读取时校验授权,模型上下文装配只使用当前 session 的数据,并在测试里覆盖并发多会话场景。
如果有持久化对话记录,可以恢复最近必要状态;如果恢复不了,应降级为少上下文模式或提示重试,不能悄悄把空记忆当完整上下文继续评分。