十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI产品经理如何设计Agent Memory?一套从概念到落地的完整框架

AI产品经理如何设计Agent Memory?一套从概念到落地的完整框架 AI产品经理面试中“如何设计 agent memory”是一个只要提到智能体就绕不开的问题。很多人第一反应是记忆不就是把聊天记录存下来吗但面试官问这个题目通常不是想要一个单点答案而是想看你能不能把“记忆”拆成产品问题、技术问题、数据问题和体验问题。面试现场如果只回答“用 Redis 存聊天记录”或者“用向量数据库做召回”大概率会被追问到没有招架之力。写这篇文章是想给你一套可以现场展开的设计框架。它不是某个公司内部的正确答案而是一个适合产品经理使用的思考方式先定义记忆解决什么问题再对齐产品边界然后给出分层设计最后落到数据结构、技术选型和验证指标。文章后半部分会用一个“客户支持 Agent”作为例子完整走一遍从需求到落地的过程。1. 先从问题出发没有记忆的 agent 为什么不够用面试官问 agent memory真正想确认的是你是否理解大模型应用从“单轮问答”升级为“多轮智能体”之后系统到底缺了什么。大模型本身没有记忆每次请求都是独立处理但真实任务往往跨越多个轮次、多个时间尺度。没有记忆用户每次都要重复自己的身份、偏好和历史状态agent 也无法在长时间任务中保持一致的行为。1.1 一句话界定 agent memory用一句话界定agent memory 是智能体在多个时间尺度上保留、更新并调用信息的能力。它不是一个文件而是一套负责写入、存储、检索、更新和遗忘的系统。这里要区分三个容易混淆的词上下文窗口模型一次能处理的 token 上限属于计算资源。对话历史把过去几轮对话原样拼接属于最简单的短期信息。agent memory把交互历史加工成可复用信息并按需取用属于产品能力。面试回答时直接说出“对话历史不等于记忆长期记忆必须超越上下文窗口”会给面试官留下“这个人理解边界”的印象。1.2 从聊天历史到记忆系统差异在哪里聊天历史是时间序列的流水账适合短期上下文但有几个问题内容冗余、token 成本高、无法直接回答“某个用户最近关注什么”“这个客户处于什么会员等级”。记忆系统要做的是把流水账变成结构化信息。举一个例子。用户第一次说“我在上海工作周末喜欢去滨江骑行。”聊天历史模式下下次对话模型不会记住这条信息即使把历史全部塞进 prompt也需要用户重新确认而且会占用大量 token。记忆系统模式下这条信息可以被抽取为两句事实工作地点上海爱好骑行后续 agent 推荐骑行路线时可以主动带上“用户在上海”这个条件。这就是聊天历史和记忆系统的本质差异前者是保留内容后者是在内容之上做抽取、更新和复用。1.3 面试中最容易犯的两个定义错误第一个错误把上下文窗口当成记忆。有人说“把对话窗口调大到 128K 就有记忆了”这是不对的。窗口是容量记忆是能力。窗口再大仍然无法跨会话保留信息而且每次请求都要重复输入成本线性上涨。第二个错误把外部知识库当成记忆。知识库是静态的企业知识或文档适合 RAG 场景记忆是围绕特定用户和特定任务动态变化的个性化信息。两者的写入来源、更新频率和权限要求都不一样。产品经理在面试时说清楚这两个区别等于给自己做了一道防线。后续所有的设计方案都建立在这两个区别之上。2. 设计 memory 之前先和面试官对齐产品边界很多候选人一上来就讲向量数据库、Redis、Embedding面试官反而觉得你没有产品视角。设计 agent memory 之前首先要回答几个边界问题记忆为谁服务记忆存活多久记忆归谁所有记忆的成本上限是多少这些问题不确定技术选型就是空中楼阁。2.1 先回答“记忆为谁服务”C端助手、B端客服、个人知识库的差异不同场景对记忆的设计要求完全不同。C 端个人助手面向单个用户核心目标是提升个性化体验比如记住用户偏好、习惯和常用地址。这类记忆通常以用户为粒度隐私要求高用户应该能看见并删除记忆。B 端客服面向企业客户旅程记忆要围绕客户身份、订单、工单展开。多个坐席可能同时使用同一个 agent因此记忆不仅要按客户隔离还要考虑权限普通坐席能不能看到客户的全部订单历史需要业务规则约束。个人知识库场景则不同记忆主要是“用户从哪些文档中获取信息以及用户当前正在处理什么任务”。这里强调的是知识检索和任务状态而不是画像型记忆。可以用一张表快速对比场景记忆主体典型记忆项隐私和权限要求C 端个人助手单个用户偏好、兴趣、常用设置用户可查看、可删除默认不共享B 端客服客户 / 企业历史工单、订单、联系人按角色隔离敏感信息脱敏个人知识库用户 文档任务状态、文档索引、阅读进度文档权限与用户权限联合校验面试时先问一句“这个 agent 的核心场景是面向谁”再往下设计方案比直接答题更显专业。2.2 记忆周期一次会话、一个项目、一个用户还是跨用户沉淀记忆周期决定数据的生命周期和存储方式。组织一次面试回答时可以把记忆分成四个层级来谈会话级记忆只在一次会话内有效比如当前对话的上下文和中间结果。生命周期短通常存在内存或 Redis设置 TTL。项目级记忆围绕一个具体任务或项目比如“帮用户写一份市场调研报告”。这个周期可能持续几天甚至几周需要保存任务进度、已经产出的草稿、用户反馈。用户级记忆关注用户画像和长期偏好比如会员等级、常用语言、沟通风格。生命周期长更新低频但一旦写错影响也大。跨用户沉淀从大量用户交互中提取通用经验比如高频问题、常见错误、最佳实践。这属于团队级知识需要单独审核不能自动写入某个用户上下文。产品经理在回答时可以把“哪个记忆层级对当前场景最重要”作为判断依据。客服场景中客户级记忆最重要个人助理场景中用户级记忆最重要内容创作场景中项目级记忆最重要。2.3 记忆的归属权和隐私边界也是产品问题产品经理不能只考虑技术实现。记忆涉及用户数据所以必须考虑“记忆的写入是否经过用户授权”“记忆能被谁读取”“用户能否要求删除”。这里有几个可以主动提到的设计原则默认不记忆敏感信息除非明确需要且获得授权。用户有权查看系统记住了什么并有能力改错或删除。企业级场景下记忆的归属权可能属于企业而不是个人产品经理需要定义清楚所有权边界。删除记忆不是简单删掉一行数据。一条记忆可能存在于原始日志、抽取后的结构化记录、向量索引、缓存等多个位置。面试时提到这一点说明你考虑过真实落地的复杂度。2.4 资源成本token、存储、检索时间记忆系统一定会消耗资源。产品经理需要定义一个“记忆预算”包括每次请求从长期记忆里最多检索多少条内容。每条内容最大长度。记忆拼接进 prompt 之后最多占多少 token。检索接口的延迟上限比如 300ms 以内。这些参数需要结合场景调整。个人助手可以在低峰期做更多召回但客服场景对延迟敏感检索必须控制在几百毫秒内。面试中主动给出“记忆预算”这个概念会明显拉高回答的产品含量。3. 用五层模型拆解 agent memory 的设计很多面试者会陷入“记什么、存在哪”的细节其实更稳妥的做法是先给一个分层框架。这里推荐一套适合产品经理表达的五层模型工作记忆、情景记忆、语义记忆、程序记忆、遗忘机制。3.1 工作记忆当前任务的上下文窗口工作记忆对应 agent 执行当前任务时暂存的信息包括当前用户输入、最近几轮对话、工具返回结果、中间状态。它是所有记忆层里变化最快的部分生命周期通常只有几秒到几十分钟。产品经理要关心的是当上下文超过模型窗口时怎么办。常见的三种处理方式滑动窗口只保留最近 N 轮对话丢掉最早内容。截断保留系统提示和最近用户消息丢弃中间冗余。摘要压缩把已结束对话浓缩成一段摘要继续保留关键信息。实际项目中三种方式经常组合。产品经理要能说出取舍滑动窗口实现简单但可能丢失关键信息摘要压缩质量高但需要额外调用模型、增加延迟和成本。3.2 情景记忆用户说过什么、做过什么情景记忆按时间记录用户的行为和重要事件。它的特点是“发生过什么就存什么”不做过多推断。比如用户昨天购买了一件商品今天提出了退货申请这些都是情景记忆。典型设计是每条记忆包含事件主体、动作对象、时间、结果、关联单据。这类记忆更新方式以追加为主很少覆盖旧记录。对客户支持 agent 来说情景记忆是最重要的一层因为它能还原客户完整旅程。风险点在于数量膨胀。一个活跃用户可能产生大量事件因此需要设置保留窗口和聚合策略。产品经理要决定哪些事件值得长期保留哪些只需要保留摘要。3.3 语义记忆从历史中提炼的事实和偏好语义记忆是从历史中提炼的、相对稳定的事实。常见形式是键值对或三元组例如用户所在城市上海用户偏好语言中文客户会员等级VIP语义记忆的价值是压缩信息不需要每次读取完整历史只需要读取几条事实。它的难点是写入时机。一次对话中说“今天下雨我不太想出门”不能直接写入“用户不喜欢出门”。正确做法是设定确认阈值重复出现多次或者用户主动声明才能写入长期语义记忆。产品经理在面试中要重点说明这个防抖逻辑否则会被追问“用户昨天说喜欢吃辣今天说不吃辣系统怎么办”。答案不是简单覆盖而是保留置信度、记录来源、允许用户修正。3.4 程序记忆流程、技能和可复用行为程序记忆是 agent 对“某一类任务该怎么做”的记忆。比如“处理退款申请”先校验订单状态再确认退款金额然后调用退款接口最后通知用户。这可以理解为 SOP 记忆。程序记忆通常来自三处人工预设的标准流程、从历史成功案例中归纳的步骤、用户明确的偏好。它需要版本管理和权限控制因为一旦流程知识过期会影响大量任务执行。产品经理在面试中即使不做技术实现也要能说出“程序记忆和情景记忆的区别是情景记忆记录具体事件程序记忆积累可复用的经验和方法。”这句话能证明你理解记忆的层次。3.5 遗忘与优先级记忆不能只增不减任何记忆系统都必须有遗忘机制否则会发现两个问题存储成本持续增长、旧信息干扰新决策。遗忘机制可以这样设计时间衰减超过一定时长的记忆自动降权。容量上限每个用户最多保留 N 条长期记忆超出后淘汰低优先级。冲突覆盖新事实与旧事实冲突时不是直接删旧写新而是记录版本和置信度。显式遗忘用户主动要求删除某条记忆达到“被遗忘权”的要求。这一层是很多人忽略的。面试时能主动提到遗忘和优先级说明你不是只考虑了功能而是考虑了系统长期运行的稳定性。五层模型的对比可以总结为一张表记忆类型生命周期典型存储主要更新方式风险点工作记忆秒分钟内存 / Redis滑动更新超长上下文、成本高情景记忆天月事件日志 / 文档库追加数据量膨胀语义记忆月年键值存储 / 向量库覆盖 / 版本化错误事实、冲突程序记忆月年规则库 / 代码 / 文档人工审核 / 归纳流程过期遗忘与优先级持续运行定时任务 / 审计日志删除 / 降权 / 归档误删、合规遗漏4. 从产品方案到技术选型记忆该放在哪里产品经理不需要写出完整代码但必须理解记忆技术选型背后的逻辑。面试官通常会追问“你打算用什么技术方案”你要能给出合理的分层选择而不是只抛一个“Redis”或者“向量数据库”。4.1 会话级记忆Redis 和内存缓存的适用场景工作记忆和短时会话状态适合放在内存或 Redis。原因是读写速度快、支持 TTL、天然适合过期淘汰。Redis 的 key 结构可以设计成# 会话记忆 key 设计示例 session:{session_id}:messages - List session:{session_id}:state - Hash session:{session_id}:ttl - 1800秒保存最近 20 条消息状态字段记录“当前任务步骤”“等待用户确认的信息”等。这样做的好处是故障恢复后会话状态可以快速重建。需要说明的是Redis 不是长期记忆的合适载体。虽然也可以把长期数据放 Redis但成本较高而且语义检索能力弱。产品经理可以说“Redis 负责快向量数据库负责懂两者各管一层。”4.2 长期记忆向量数据库与结构化数据库的分工长期记忆至少需要两类存储结构化数据库存事实型信息比如用户实名信息、订单状态、会员等级。这类数据有明确字段适合用关系型数据库支持精确查询和更新覆盖。向量数据库存非结构化的语义内容比如用户曾经说过的一段话、一篇文章摘要。写入时生成 embedding检索时按语义相似度召回。可以这样对比存储类型适合数据查询方式典型场景典型工具关系型数据库结构化事实SQL 精确查询用户画像、订单、工单MySQL、PostgreSQL键值缓存短时状态Key 读取 / TTL会话状态、临时结果Redis向量数据库语义文本相似度检索长期对话摘要、偏好召回Milvus、Qdrant、pgvector对象存储原始日志/文件文件路径访问审计、合规、离线分析云对象存储面试时把这张表讲清楚已经足够体现技术颗粒度。你没有写代码但展示了技术判断力。4.3 检索策略先粗筛再精排把相关记忆放进上下文记忆存得再好检索不准等于没有。产品经理需要描述一条检索流程而不是只说“查一下向量库”。推荐流程如下用户请求进入 agent。意图判断模块决定是否需要读取长期记忆。根据用户 ID、场景和请求内容生成检索 query。向量检索候选记忆召回 top 50。过滤过期记录、权限范围之外的记录、低置信度记录。按相关度、时效、重要性进行精排保留 top 5 到 top 10。把召回结果格式化成“记忆片段”拼入 prompt。这里的关键点是不是把查到的所有记忆都塞进去。因为 prompt 有 token 限制塞入过多无关记忆反而会干扰生成质量。产品经理要能定义“每条记忆的权重”和“最大召回数量”。4.4 一个最小记忆服务的技术组件清单面试现场不需要画系统架构图但可以通过组件清单展示全局思考接入层接收用户消息统一处理会话上下文。记忆抽取服务分析对话内容抽取候选事实。记忆存储层Redis、关系库、向量库分别承担不同记忆层级。检索服务对上提供统一检索接口。遗忘任务定时清理过期记忆执行用户删除请求。审计日志记录谁在什么时候写入了什么记忆、删除了什么记忆。这个清单的价值在于告诉面试官“我不是只会设计概念我清楚一个最小可运行系统需要哪些模块。”5. 面试现场完整示范设计一个“客户支持 Agent”的记忆系统只看概念不够面试官更希望看到你能把知识落到具体案例。下面以一个客户支持 Agent 为例走一遍完整设计过程。这个例子适合在面试中现场表达。5.1 场景与需求场景一家电商平台的客服 Agent用户可以在对话中查询订单、申请退款、咨询商品。当前业务痛点包括用户需要反复说明自己买过什么坐席接手时看不到之前的处理进度用户在多轮对话后agent 容易忘记上下文。基于这个场景记忆系统要解决三个核心问题记住客户身份和基本信息记住客户最近处理到哪一步从历史中提炼偏好避免重复询问。5.2 记忆对象的数据结构面试时可以现场写一个简化的 JSON 结构表示一条长期记忆{ memory_id: mem_201, user_id: usr_10086, agent_id: support_v1, memory_type: semantic, scope: customer, content: { customer_tier: VIP, preferred_language: zh-CN, default_refund_method: original_channel }, source: user_profile, confidence: 0.95, created_at: 2025-01-10T10:00:00Z, updated_at: 2025-03-02T14:30:00Z, expires_at: null, status: active }解释每个字段的作用memory_id 是唯一标识用于更新、删除和审计。user_id 和 scope 用于隔离避免不同用户之间串记忆。memory_type 区分是情景记忆还是语义记忆。content 是实际记忆内容JSON 结构便于扩展。source 记录来源是用户资料、对话抽取还是系统写入。confidence 表示这条记忆的置信度低于阈值的记录不参与生成。expires_at 用于过期清理。从产品角度看这个结构说明你考虑过“可追溯、可删除、可更新”。5.3 写入、更新、检索流程写成伪代码方便面试时快速说明逻辑def handle_message(user_id, session_id, user_message): # 1. 读取最近工作记忆 short_term get_recent_messages(session_id, limit20) # 2. 抽取候选长期记忆 facts extract_facts(user_message) # 3. 写入符合条件的语义记忆 for fact in facts: if fact.confidence 0.8: upsert_memory(user_id, fact) # 4. 根据当前问题检索长期记忆 memory_hits retrieve_memory( user_iduser_id, queryuser_message, top_k5, min_score0.6 ) # 5. 把记忆拼入 prompt 并调用大模型 final_prompt build_prompt(short_term, memory_hits) response llm.generate(final_prompt) # 6. 保存本轮对话到工作记忆 save_message(session_id, user_message, response) return response这段伪代码想表达的核心点有三个先抽取再写入检索要在用户粒度上做隔离最终输出由短期上下文和长期记忆共同决定。5.4 预期效果与验证方案设计完成后要用可观察的现象说明方案有效。可以列三条预期用户在第二轮说“我要退上次那件衬衫”agent 能直接定位到最近的衬衫订单而不是让用户重新提供订单号。用户说明自己是 VIP 会员后后续回答默认使用 VIP 客服话术。用户中途刷新页面重新进入对话后还能继续之前的退款流程而不是从零开始。验证方式可以设计成一组测试用例模拟用户连续三轮对话检查记忆写入日志、检索结果、最终回答是否符合预期。如果发现第二轮的记忆没有进入第三轮就要检查哪个环节断开。6. 面试官下一句最可能追问的四类问题设计完方案之后面试官通常会追问几个反直觉的场景。提前准备这些问题可以避免现场慌张。6.1 记忆写错或过期了怎么办追问示例“用户有一次说自己在北京后来他搬到上海agent 怎么知道要用新地址”现象是记忆冲突。如果系统只做“覆盖旧值”可能过早丢失用户真实信息如果只做“追加新值”又可能让模型看到冲突信息。回答思路保留字段 updated_time 和 source便于追溯。新事实和旧事实冲突时不要直接删除旧记录而是降低旧记录置信度。用户主动修正时权重最高应立即更新。系统通过多轮观察确认事实比如连续两次出现相同信息才写入。额外加分点记忆更新后需要同步检查是否有下游流程引用了旧记忆。例如用户收货地址变化未发货订单应提示更新地址。6.2 长上下文和记忆检索冲突时怎么办追问示例“用户说了很长一段背景模型上下文已经快满了怎么处理”正确思路是给记忆分级。当前对话的主要内容放在工作记忆真正需要跨会话复用的信息抽取后放进长期记忆。上下文不够时优先压缩工作记忆而不是丢长期记忆。具体操作可以包括给长期记忆召回设一个硬上限比如 top 5。对每条记忆进行压缩只保留关键属性。把中间过程摘要化而不是把原始对话全部保留。产品经理要强调“成本和质量之间的平衡”。记忆不是越全越好而是越准越好。6.3 多人共用账号时记忆如何隔离追问示例“一个企业账号下面有多个子用户A 用户和 B 用户之间的记忆会不会串”解决方法是在记忆对象中加 scope 和 owner_id。访问记忆时必须校验当前请求是否有权限读取该 scope 下的数据。示例{ scope: workspace, owner_id: workspace_001, creator_id: user_A, visibility: private }如果 visibility 为 private用户 B 检索不到该记忆如果为 shared则可以共享给同企业下其他成员。权限过滤要在检索入口执行不能把所有记忆都召回到模型后再过滤那样容易泄露信息。6.4 用户要求删除记忆时系统如何响应追问示例“用户说请忘掉我的所有信息系统怎么处理”回答不是“好的我帮你删了”就结束。产品经理需要设计一个可验证的删除流程识别删除范围是删除某条记忆、某个用户全量记忆还是删除某个时间区间。找到所有关联存储结构化数据库、向量索引、缓存、原始日志。执行删除或匿名化。对于向量索引删除对应的 embedding 向量对于日志可选择脱敏而非直接删除。记录审计日志包括删除时间、操作人、删除范围。异步任务确认所有副本都已更新然后返回完成状态。这段话表明你了解“删除”在分布式系统中的复杂性也会让面试官认为你具备生产环境意识。7. 从面试回答到真实落地指标、灰度与常见坑面试的最后加分项往往是老练的落地经验。面试官会想这个人如果入职能独立把方案推上线吗所以你需要补充评估指标、灰度方法和真实项目中的常见坑。7.1 用哪些指标判断 memory 设计得好不好产品经理要能用数据说话。常见指标如下指标名称计算方式目标方向记忆写入准确率抽样标注写入内容是否正确越高越好目标 90%检索命中率需要长期记忆的请求中召回相关记忆的比例越高越好引用正确率生成回答引用的记忆是否与事实一致越高越好用户修正率用户主动更正记忆内容的比例越低越好任务成功率多轮任务中用户完成目标的占比越高越好上下文成本平均每次请求 prompt 的 token 数控制在一定范围内记忆删除时效从用户申请到实际删除完成的时间越短越好这里有一个关键点不能只追求记忆准确率还要看任务成功率。有时召回了一条准确但无关的记忆也会降低回答质量。产品经理要关注端到端结果。7.2 灰度上线的步骤记忆涉及用户隐私和生成质量不适合一次性全量开放。建议按以下步骤推进先在内部测试环境模拟对话验证写入和检索链路。选择少量白名单用户开放记忆功能同时记录完整日志。对比开启记忆和未开启记忆的用户观察任务成功率和用户反馈。增加人工抽检确认没有出现隐私泄露或明显错误记忆。扩大流量到 10%设置 kill switch发现异常可以立即关闭。全量后持续监控记忆删除请求量和存储增长量。这套步骤在面试时说一遍能很自然地把话题从“设计”过渡到“工程落地”。7.3 至少避开的三个常见坑第一个坑把用户一句话直接写入长期记忆。比如用户随口说“我不喜欢这个牌子”系统就长期记录“用户讨厌该品牌”结果用户第二天又购买了该品牌商品。避免方法是设置确认阈值只有用户主动声明、多次出现或行为验证后才写入长期记忆。第二个坑记忆缺乏权限隔离。同一个企业用户下两个员工通过同一个 agent 查询如果记忆作用域只到“企业账号”就可能出现 A 员工看到 B 员工的历史记录。避免方法是检索时增加“当前用户是否有权读取该记忆”的校验。第三个坑只关注记忆写入不关注遗忘删除。长期运行后过期记忆越来越多不仅增加存储成本还会让模型在召回时出现事实混乱。避免方法是建立定期清理任务并把用户删除请求纳入最高优先级。7.4 面试表达时最有说服力的收尾顺序如果在面试最后需要总结不建议用“综上所述”这种空话。可以用下面的顺序把观点串起来场景是起点。先明确 agent 服务谁、解决什么问题然后做分层设计把工作记忆、情景记忆、语义记忆、程序记忆分开讨论再考虑边界问题包括记忆周期、数据归属、成本预算接着用最小的技术选型说明能落地比如 Redis 管短期、关系库管结构化事实、向量库管语义召回最后用指标和灰度方案证明你有闭环意识。这套顺序的优点是从问题出发经过概念拆分又回到可实施的具体方案。即使面试官临时换一个场景比如“设计一个个人写作助手的记忆”你也可以用同一套框架重新推导而不是死记硬背某个答案。真正的 agent memory 设计没有标准答案但它一定需要你能回答清楚“记什么、怎么存、如何取、何时忘、谁授权”这五个问题。面试时把这五个问题拆开讲明白已经比大多数候选人更接近一个合格 AI 产品经理的要求。
返回列表