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 层,超出直接裁掉,不为这点内容再调一次模型。

一轮任务里,记忆怎么走

  1. 01任务开始,先拿你这句话去检索:中文二元组 + 英文词命中打底,叠应用作用域、置信度、命中次数、时间衰减。
  2. 02按分数取前 6 条拼进系统提示,锁定的偏好无条件带上;不占对话历史,也不改你原始那句话。
  3. 03执行途中不读写记忆——它不该被任务中间那些猜测污染。
  4. 04任务结束才写回:成功且用过 ≥2 个工具,记一条配方;失败,记一条坑,带最后一条工具的返回原文。
  5. 05写回前过 PII 过滤;超过 400 条按 lock + conf + log(hits) − 龄期 淘汰。

它不记什么

不记聊天全文

对话留在会话里。进记忆的只有被压成一句话、下次还能用的结论。

不记密钥和验证码

写入前统一打码。模型事后读回来的只有 ***,原值连它自己也拿不到。

不跨设备同步

记忆在本机 localStorage,不上传。换手机要自己导出 JSON 再导入。

不做行为画像

没有分析服务器,不统计你点了什么、多久点一次。