先讲一个每天早上都会发生的场景。7:55闹钟响产品经理晓雯打开飞书对办公Agent说“帮我整理一下今天的待办。”Agent秒回“好的今天的待办有1. 评审需求文档2. 跟客户同步进度3. 检查测试报告。”晓雯皱了皱眉“我不是说了吗每天早上先把所有待办发到我的企业微信不要发飞书消息。我飞书消息太多了经常漏。”Agent“抱歉请再次告知你的通知偏好。”晓雯“发企业微信。”第二天同样的话她又要说一遍。第三天她还是得再说一遍。类似的事情也发生在模板上。每次让Agent生成周报她都指定一次“用市场部的模板不要用研发部的”。Agent每次都说“好的”下一次又忘了。一个记不住员工偏好的Agent就像一个每周都要重新认识你的新同事。你说一次它做一次你不说它就按默认来。你说了下次还忘。这不叫智能这叫复读机。后来我们给Agent加上了长期记忆。它现在记得晓雯的通知渠道是企业微信记得她的周报模板是“市场部V3”甚至记得她不喜欢在待办列表里看到“已完成”的任务。每天早上她只说一句“早”Agent就把所有事情按她的习惯安排好了。这篇文章我跟你聊聊怎么给办公Agent设计一个靠谱的长期记忆系统。不堆术语只说我们怎么做的、踩过哪些坑、最后如何让Agent“记住你”。一、长期记忆到底要记什么——三层偏好模型很多人的第一反应是把用户跟Agent的所有对话都存下来不就记住一切了吗不行。对话数据爆炸式增长而且大部分信息是一次性的比如“今天几点开会”不值得长期保存。我们给偏好分成了三层只存“值得记住”的东西。第一层显式偏好用户主动教给Agent的这是最直接的。用户明确说“以后周报用这个模板。”“通知发到企业微信。”“我喜欢表格形式不要列表。”Agent收到这类指令时需要做两件事立即执行当前任务把这条偏好写入长期记忆标记为“用户显式设定”优先级最高实现上我们在Agent的prompt里加了一条规则当用户说包含“以后”“每次都”“记住”“默认”等关键词的指令时提取出偏好内容调用记忆存储API。第二层隐式偏好Agent从行为中推断的用户不会什么都主动说。但Agent可以通过观察行为来学习。比如晓雯每次让Agent生成报告后都会手动把输出里的“柱状图”改成“折线图”。连续三次之后Agent主动问“我注意到你每次都把柱状图换成折线图是否需要将你的默认图表类型设为折线图”用户点“确认”偏好就存入记忆。推断逻辑不能太激进。我们的规则是同一行为出现至少3次且与默认行为不一致才触发询问。避免因为一两次偶然就瞎猜。第三层场景化偏好不同情境下的不同偏好同一个用户在不同场景下可能有不同偏好。工作时间内通知发飞书非工作时间发短信。周报用模板A月报用模板B。紧急任务用红色标记常规任务用蓝色。长期记忆需要支持条件存储。存储时带上上下文标签比如{场景: 工作时间, 通知渠道: 飞书}{场景: 非工作时间, 通知渠道: 短信}。检索时Agent先匹配当前场景时间、任务类型、所在项目等再取对应的偏好。二、记忆怎么存——混合存储方案我们试过纯向量数据库、纯关系数据库、纯键值存储最后选了混合方案。不同类型的信息用不同的存储引擎。记忆类型存储方式例子显式偏好结构化键值存储Redisuser:123:notify_channel wecom隐式偏好待确认关系表PostgreSQL记录行为频次用于触发询问长期对话事实非结构化向量数据库Qdrant“用户提到过他的老板是张总”场景化偏好JSON 条件索引{ user: 123, scene: weekly_report, template: market_v3 }为什么不全放向量库因为显式偏好的查询模式非常简单“用户X的通知渠道是什么”用键值存储又快又准不需要向量检索的开销。只有那些模糊的、需要语义匹配的记忆比如“用户上次抱怨过什么”才放向量库。三、记忆怎么更新和遗忘——不永久记住一切长期记忆不是“记到死”。有些偏好会过时有些记忆会错所以必须有更新和遗忘机制。更新覆盖 vs 追加当用户说“以后通知改发企业微信”时是覆盖原来的“飞书”偏好还是同时保留两个显然应该覆盖。但覆盖需要谨慎我们要求用户在覆盖前确认一次。“你的通知偏好当前为‘飞书’确认改为‘企业微信’吗”如果是追加比如增加一个新的偏好维度则不需要确认。遗忘时间衰减 主动删除时间衰减超过90天未使用的偏好自动降级为“低置信度”。Agent下次使用时会再次询问用户确认而不是直接应用。如果用户再次确认则刷新有效期。主动删除用户可以对Agent说“忘掉我之前的通知偏好”或者通过管理界面手动删除。我们设计了一条指令“清除所有关于我的偏好。”——这比在设置里翻半天要友好得多。另外有些记忆涉及敏感信息比如“用户说过他的银行卡号”我们设计为短期存储24小时后自动清除不入库长期记忆。这需要在提取记忆时做一次敏感信息检测。四、检索与应用的时机什么时候该用记忆光有存储不够关键是Agent要在正确的时机主动应用记忆而不是每次都要用户触发。我们定义了三个应用层次1. 任务执行前自动填充参数用户说“帮我生成周报”Agent自动从记忆中读取default_week_report_templatedefault_notify_channeldefault_recipients然后问“将使用你常用的市场部模板发送到企业微信是否继续”用户点“是”一步到位。2. 任务执行中动态调整行为用户让Agent“把这个任务分配给李雷”Agent检索记忆发现李雷平时不喜欢被更偏好被直接指派到任务系统。于是Agent不用而是创建飞书任务并私信通知。3. 主动建议记忆驱动的提醒Agent检测到晓雯每次周五下午都会生成周报但今天是周四下午她还没做。Agent主动问“按你往常的习惯周报通常会在今天生成。是否需要现在开始”这种主动提醒依赖的是对用户行为模式的长期记忆每周五下午3点左右触发周报生成。我们用一个简单的时序模式识别记录用户每个任务的历史执行时间周几几点当当前时间接近历史分布的中位数时触发提醒。五、隐私和安全记住偏好不等于窥探隐私长期记忆最容易引发隐私担忧。用户会想“Agent记住了我那么多事会不会被别人看到”三个设计原则1. 记忆归属用户所有偏好数据以user_id为分区存储。不同用户之间完全隔离。即使管理员也无法查看某个用户的个人偏好只能看到“有多少用户设置了通知偏好”这种聚合统计。2. 透明与可审计用户可以随时问Agent“你记住了我的哪些偏好”Agent会列出所有存储的记忆条目并且每条都附上“添加时间”和“添加方式”用户主动教/Agent推测/场景化。用户可以逐条删除或修改。3. 敏感信息不存储Agent在提取“值得记忆的内容”时会先过一个敏感词过滤器。包含身份证号、银行卡号、密码、手机号等个人信息的内容即使符合“偏好”特征也不会写入长期记忆。用户说“我的手机号是138xxxx”Agent会回复“我不会记住你的手机号请放心。”六、一个完整的长期记忆交互示例把上面的设计串起来看看一个“被记住”的用户体验长什么样。第一天初始状态Agent对晓雯一无所知晓雯帮我生成周报。Agent好的。请问使用哪个模板默认/市场部/研发部晓雯市场部。发送到企业微信。Agent已将周报使用市场部模板发送至你的企业微信。是否需要我记住这个偏好晓雯记住。Agent已记住。以后你说“生成周报”将默认使用市场部模板并发送到企业微信。第二天Agent应用记忆晓雯生成周报。Agent好的。将使用市场部模板发送到你的企业微信。是否继续晓雯继续。周报生成发送一周后晓雯发现她偶尔也需要研发部模板晓雯生成周报用研发部模板。Agent本次使用研发部模板。是否需要将默认模板改为研发部晓雯不用只是偶尔用。Agent明白了。以后你说“生成周报”仍默认市场部模板当你说“生成研发周报”时将自动使用研发部模板。一个月后晓雯换部门了晓雯以后周报改用运营部模板。Agent确认将默认模板从“市场部”改为“运营部”吗晓雯确认。Agent已更新。旧的偏好已归档保留但不使用如需恢复请告知。晓雯的体验从“每次都重复说”变成了“Agent懂我”。而她从来没有看过一行代码也没点过复杂的设置界面。七、你也能做的三个起步建议如果你也想给自己的办公Agent加上长期记忆不需要一步到位做全三层。可以从最简单的地方开始先做显式偏好让Agent能识别“以后”“每次都”这类关键词把偏好存进Redis。这是成本最低、见效最快的一步。加一个“记住我”命令用户可以主动说“记住我喜欢用表格”触发存储。比自动推断简单可靠。做一个遗忘命令用户说“忘掉我的通知偏好”清除对应的键。这是建立信任的关键——让用户知道他能控制Agent记住了什么。等这三个跑顺了再慢慢加隐式推断、场景化、主动提醒。不要一上来就想做一个“全知全能的记忆系统”——你很可能先把自己搞崩溃。写在最后被记住是一种被尊重的感觉晓雯后来开玩笑说“现在这个Agent比我男朋友还记事儿。我随口说一遍它就记住了还不会忘。”这其实说出了长期记忆的核心价值让人感觉到被尊重。每次重复说明一个已经说过的事情都是一种消耗。而Agent如果能记住哪怕只是记住“你爱用哪个模板”都是在替用户节省心力。一个好的办公Agent不是因为它能写多长的报告而是因为它让你少说了多少废话。而少说废话的前提就是它真的记得你——记得你的偏好你的习惯你不想每次都重复的那些小事。下次当你对你的Agent说“早”的时候它不只是回你一个“早”而是把你今天该做的事按你的方式准备好了你会觉得“嗯这家伙没白养。”
办公Agent的长期记忆设计:记住员工偏好(通知方式、常用模板)
发布时间:2026/5/20 16:21:21
先讲一个每天早上都会发生的场景。7:55闹钟响产品经理晓雯打开飞书对办公Agent说“帮我整理一下今天的待办。”Agent秒回“好的今天的待办有1. 评审需求文档2. 跟客户同步进度3. 检查测试报告。”晓雯皱了皱眉“我不是说了吗每天早上先把所有待办发到我的企业微信不要发飞书消息。我飞书消息太多了经常漏。”Agent“抱歉请再次告知你的通知偏好。”晓雯“发企业微信。”第二天同样的话她又要说一遍。第三天她还是得再说一遍。类似的事情也发生在模板上。每次让Agent生成周报她都指定一次“用市场部的模板不要用研发部的”。Agent每次都说“好的”下一次又忘了。一个记不住员工偏好的Agent就像一个每周都要重新认识你的新同事。你说一次它做一次你不说它就按默认来。你说了下次还忘。这不叫智能这叫复读机。后来我们给Agent加上了长期记忆。它现在记得晓雯的通知渠道是企业微信记得她的周报模板是“市场部V3”甚至记得她不喜欢在待办列表里看到“已完成”的任务。每天早上她只说一句“早”Agent就把所有事情按她的习惯安排好了。这篇文章我跟你聊聊怎么给办公Agent设计一个靠谱的长期记忆系统。不堆术语只说我们怎么做的、踩过哪些坑、最后如何让Agent“记住你”。一、长期记忆到底要记什么——三层偏好模型很多人的第一反应是把用户跟Agent的所有对话都存下来不就记住一切了吗不行。对话数据爆炸式增长而且大部分信息是一次性的比如“今天几点开会”不值得长期保存。我们给偏好分成了三层只存“值得记住”的东西。第一层显式偏好用户主动教给Agent的这是最直接的。用户明确说“以后周报用这个模板。”“通知发到企业微信。”“我喜欢表格形式不要列表。”Agent收到这类指令时需要做两件事立即执行当前任务把这条偏好写入长期记忆标记为“用户显式设定”优先级最高实现上我们在Agent的prompt里加了一条规则当用户说包含“以后”“每次都”“记住”“默认”等关键词的指令时提取出偏好内容调用记忆存储API。第二层隐式偏好Agent从行为中推断的用户不会什么都主动说。但Agent可以通过观察行为来学习。比如晓雯每次让Agent生成报告后都会手动把输出里的“柱状图”改成“折线图”。连续三次之后Agent主动问“我注意到你每次都把柱状图换成折线图是否需要将你的默认图表类型设为折线图”用户点“确认”偏好就存入记忆。推断逻辑不能太激进。我们的规则是同一行为出现至少3次且与默认行为不一致才触发询问。避免因为一两次偶然就瞎猜。第三层场景化偏好不同情境下的不同偏好同一个用户在不同场景下可能有不同偏好。工作时间内通知发飞书非工作时间发短信。周报用模板A月报用模板B。紧急任务用红色标记常规任务用蓝色。长期记忆需要支持条件存储。存储时带上上下文标签比如{场景: 工作时间, 通知渠道: 飞书}{场景: 非工作时间, 通知渠道: 短信}。检索时Agent先匹配当前场景时间、任务类型、所在项目等再取对应的偏好。二、记忆怎么存——混合存储方案我们试过纯向量数据库、纯关系数据库、纯键值存储最后选了混合方案。不同类型的信息用不同的存储引擎。记忆类型存储方式例子显式偏好结构化键值存储Redisuser:123:notify_channel wecom隐式偏好待确认关系表PostgreSQL记录行为频次用于触发询问长期对话事实非结构化向量数据库Qdrant“用户提到过他的老板是张总”场景化偏好JSON 条件索引{ user: 123, scene: weekly_report, template: market_v3 }为什么不全放向量库因为显式偏好的查询模式非常简单“用户X的通知渠道是什么”用键值存储又快又准不需要向量检索的开销。只有那些模糊的、需要语义匹配的记忆比如“用户上次抱怨过什么”才放向量库。三、记忆怎么更新和遗忘——不永久记住一切长期记忆不是“记到死”。有些偏好会过时有些记忆会错所以必须有更新和遗忘机制。更新覆盖 vs 追加当用户说“以后通知改发企业微信”时是覆盖原来的“飞书”偏好还是同时保留两个显然应该覆盖。但覆盖需要谨慎我们要求用户在覆盖前确认一次。“你的通知偏好当前为‘飞书’确认改为‘企业微信’吗”如果是追加比如增加一个新的偏好维度则不需要确认。遗忘时间衰减 主动删除时间衰减超过90天未使用的偏好自动降级为“低置信度”。Agent下次使用时会再次询问用户确认而不是直接应用。如果用户再次确认则刷新有效期。主动删除用户可以对Agent说“忘掉我之前的通知偏好”或者通过管理界面手动删除。我们设计了一条指令“清除所有关于我的偏好。”——这比在设置里翻半天要友好得多。另外有些记忆涉及敏感信息比如“用户说过他的银行卡号”我们设计为短期存储24小时后自动清除不入库长期记忆。这需要在提取记忆时做一次敏感信息检测。四、检索与应用的时机什么时候该用记忆光有存储不够关键是Agent要在正确的时机主动应用记忆而不是每次都要用户触发。我们定义了三个应用层次1. 任务执行前自动填充参数用户说“帮我生成周报”Agent自动从记忆中读取default_week_report_templatedefault_notify_channeldefault_recipients然后问“将使用你常用的市场部模板发送到企业微信是否继续”用户点“是”一步到位。2. 任务执行中动态调整行为用户让Agent“把这个任务分配给李雷”Agent检索记忆发现李雷平时不喜欢被更偏好被直接指派到任务系统。于是Agent不用而是创建飞书任务并私信通知。3. 主动建议记忆驱动的提醒Agent检测到晓雯每次周五下午都会生成周报但今天是周四下午她还没做。Agent主动问“按你往常的习惯周报通常会在今天生成。是否需要现在开始”这种主动提醒依赖的是对用户行为模式的长期记忆每周五下午3点左右触发周报生成。我们用一个简单的时序模式识别记录用户每个任务的历史执行时间周几几点当当前时间接近历史分布的中位数时触发提醒。五、隐私和安全记住偏好不等于窥探隐私长期记忆最容易引发隐私担忧。用户会想“Agent记住了我那么多事会不会被别人看到”三个设计原则1. 记忆归属用户所有偏好数据以user_id为分区存储。不同用户之间完全隔离。即使管理员也无法查看某个用户的个人偏好只能看到“有多少用户设置了通知偏好”这种聚合统计。2. 透明与可审计用户可以随时问Agent“你记住了我的哪些偏好”Agent会列出所有存储的记忆条目并且每条都附上“添加时间”和“添加方式”用户主动教/Agent推测/场景化。用户可以逐条删除或修改。3. 敏感信息不存储Agent在提取“值得记忆的内容”时会先过一个敏感词过滤器。包含身份证号、银行卡号、密码、手机号等个人信息的内容即使符合“偏好”特征也不会写入长期记忆。用户说“我的手机号是138xxxx”Agent会回复“我不会记住你的手机号请放心。”六、一个完整的长期记忆交互示例把上面的设计串起来看看一个“被记住”的用户体验长什么样。第一天初始状态Agent对晓雯一无所知晓雯帮我生成周报。Agent好的。请问使用哪个模板默认/市场部/研发部晓雯市场部。发送到企业微信。Agent已将周报使用市场部模板发送至你的企业微信。是否需要我记住这个偏好晓雯记住。Agent已记住。以后你说“生成周报”将默认使用市场部模板并发送到企业微信。第二天Agent应用记忆晓雯生成周报。Agent好的。将使用市场部模板发送到你的企业微信。是否继续晓雯继续。周报生成发送一周后晓雯发现她偶尔也需要研发部模板晓雯生成周报用研发部模板。Agent本次使用研发部模板。是否需要将默认模板改为研发部晓雯不用只是偶尔用。Agent明白了。以后你说“生成周报”仍默认市场部模板当你说“生成研发周报”时将自动使用研发部模板。一个月后晓雯换部门了晓雯以后周报改用运营部模板。Agent确认将默认模板从“市场部”改为“运营部”吗晓雯确认。Agent已更新。旧的偏好已归档保留但不使用如需恢复请告知。晓雯的体验从“每次都重复说”变成了“Agent懂我”。而她从来没有看过一行代码也没点过复杂的设置界面。七、你也能做的三个起步建议如果你也想给自己的办公Agent加上长期记忆不需要一步到位做全三层。可以从最简单的地方开始先做显式偏好让Agent能识别“以后”“每次都”这类关键词把偏好存进Redis。这是成本最低、见效最快的一步。加一个“记住我”命令用户可以主动说“记住我喜欢用表格”触发存储。比自动推断简单可靠。做一个遗忘命令用户说“忘掉我的通知偏好”清除对应的键。这是建立信任的关键——让用户知道他能控制Agent记住了什么。等这三个跑顺了再慢慢加隐式推断、场景化、主动提醒。不要一上来就想做一个“全知全能的记忆系统”——你很可能先把自己搞崩溃。写在最后被记住是一种被尊重的感觉晓雯后来开玩笑说“现在这个Agent比我男朋友还记事儿。我随口说一遍它就记住了还不会忘。”这其实说出了长期记忆的核心价值让人感觉到被尊重。每次重复说明一个已经说过的事情都是一种消耗。而Agent如果能记住哪怕只是记住“你爱用哪个模板”都是在替用户节省心力。一个好的办公Agent不是因为它能写多长的报告而是因为它让你少说了多少废话。而少说废话的前提就是它真的记得你——记得你的偏好你的习惯你不想每次都重复的那些小事。下次当你对你的Agent说“早”的时候它不只是回你一个“早”而是把你今天该做的事按你的方式准备好了你会觉得“嗯这家伙没白养。”