01 — 记忆
它只记能复用的东西。
聊天记录留给人回看,记忆留给下一次任务复用。M3 只记四类能真正省掉几步的东西,新任务开始时按相关度挑最多 6 条带上,不占对话历史,全部存在本机。
四类
偏好 preference
你定过的规矩:回答风格、称呼、禁忌、做事顺序。定下来就一直生效。
「别铺垫,先给结论」
锁定的条目永远不先淘汰;检索没命中时也会兜底带上。
事实 fact
这台机器的常识:常用 App 在哪个包、环境长什么样。问一次就够。
「相册在 com.miui.gallery」
写入前过一遍 PII 过滤:密钥、手机号、验证码一律打成 ***。
配方 recipe
做成过的操作序列,压成一句人话。下次同类任务直接复用,不再重新试错。
「设置 → 显示与亮度 → 关自动亮度 → 读回」
任务成功且用过 ≥2 个工具,自动记一条。
坑 pitfall
卡住的地方。踩过一次的坑比做成过的事更值钱。
「无障碍被杀 → 点按全失败 → 先请用户开回来」
任务失败时记一条,带最后一条工具返回的卡点原文。
怎么存
- 上限
- 400 条 / 每条 400 字
- 淘汰顺序
- lock + conf + log(hits) − 龄期
- 存储位置
- 本机 localStorage(m3core.mem),不上传
- 导出
- 写成工作区 M3-memory-日期.json,不含密钥
锁定的条目不参与淘汰。你亲手说过的规矩,不该被后来的一条随手记录挤掉。
写入之前先脱敏
所有写入都过一遍 PII 过滤:sk-* 开头的密钥、24 位以上长串、 手机号、密码、验证码,一律替换成 ***。模型自己读不回来。
检索:没有向量也能搜准
你只带一个 chat key 来,没有 embedding、没有向量库。所以检索是纯打分的——中文二元组和 英文词命中打底,再叠应用作用域、置信度、命中次数与时间衰减。
- 中文二元组 + 英文词命中
- 基础分
- 包名相同
- +1.4
- 写入时置信度
- × 乘数
- 被命中次数
- log(hits)
- 时间衰减
- 30 天半衰期
一条都没命中时,它把锁定偏好带出来——「以后都先给结论」这种设定不会失效。
除了四类记忆,还有一层常驻设定
0.0.3 起,「技能」里可以装人格包:一千五百多字的正文,装上后每次任务都注入系统提示, 不用你再交代口吻和边界。它跟记忆分开存——人格是设定,记忆是经验,删记忆不会把人格一起删掉。
长任务结束会自动压一条摘要进历史;上下文只保留最近 12 层,超出直接裁掉,不为这点内容再调一次模型。
一轮任务里,记忆怎么走
- 01任务开始,先拿你这句话去检索:中文二元组 + 英文词命中打底,叠应用作用域、置信度、命中次数、时间衰减。
- 02按分数取前 6 条拼进系统提示,锁定的偏好无条件带上;不占对话历史,也不改你原始那句话。
- 03执行途中不读写记忆——它不该被任务中间那些猜测污染。
- 04任务结束才写回:成功且用过 ≥2 个工具,记一条配方;失败,记一条坑,带最后一条工具的返回原文。
- 05写回前过 PII 过滤;超过 400 条按 lock + conf + log(hits) − 龄期 淘汰。
它不记什么
不记聊天全文
对话留在会话里。进记忆的只有被压成一句话、下次还能用的结论。
不记密钥和验证码
写入前统一打码。模型事后读回来的只有 ***,原值连它自己也拿不到。
不跨设备同步
记忆在本机 localStorage,不上传。换手机要自己导出 JSON 再导入。
不做行为画像
没有分析服务器,不统计你点了什么、多久点一次。
