为什么大多数AI助手一关会话就像失忆?因为它们在交互层还是无状态的,每次重置都等于丢掉上下文。OpenClaw(曾用名Moltbot/Clawdbot)最近被讨论得多,正是因为它往反方向走:保留有用的长期状态,同时避免token成本失控和不安全的留存。
社区里的讨论集中在几个点:心跳循环讲究"先做便宜检查,需要时才调模型",nono这类安全沙箱,以及和Nanobot这类超轻量方案的对比。核心工程问题只有一个——怎么维持持久、有用的记忆,又不把助手变成一个又慢又贵、还拿隐私冒险的黑箱。
四层记忆,不是什么都存
从系统层面看,这类持久记忆通常拆成四层。关键细节在于:并非所有信息都会被持久化。系统通过抽取和排序,只让高价值、稳定的信息变成长期记忆。
写入路径负责记忆怎么产生,一般按这个顺序走:
- 事件捕获:从对话轮次、工具结果、文件编辑、日历事件、任务结果里收集候选信号
- 候选抽取:用轻量抽取器识别"值得记"的内容,比如长期偏好、身份/档案细节、重复出现的工作流模式、未完成的承诺或提醒
- 先做便宜校验:正则/启发式、去重哈希检查、schema有效性检查、上一轮分类器给出的置信度阈值
- 模型校验只在必要时调用:如果仍有不确定性,再调LLM分类器给持久化价值和敏感风险打分
- 归一化与schema映射:把自由文本转成带类型的记忆记录
- 带冲突策略的upsert:按新鲜度、信任分、来源优先级与已有记录合并
- 追加审计:存不可变的审计事件,便于解释和回滚
读取路径则负责记忆怎么被取出来:从当前用户轮次和任务状态构建查询意图,从结构化存储和向量库检索候选,按相关性、新鲜度、信任度和策略约束重排,再强制token和延迟预算,必要时压缩,最后注入系统上下文。写入路径优化质量和安全,读取路径优化相关性和速度,这个拆分很关键。
一条记忆记录该长什么样
实用的记忆实体通常包含这些字段:memory_id、user_id、type、key、value、confidence、source(含kind、ref、observed_at)、sensitivity、ttl、last_confirmed_at、version、embedding_ref、created_at、updated_at。
其中几个字段是真正干活的:confidence防止弱推断导致行为脆弱;sensitivity驱动留存和访问控制;ttl避免陈旧事实永生;version支持乐观并发和可审计。
存储上按负载分家:关系库(Postgres/MySQL)存规范的类型化记录、约束和事务;向量库存语义召回;对象库存原始产物和快照;事件库存只追加的历史和重放。常见做法是记录写进SQL,异步做embedding,再用embedding_ref关联。
心跳循环:便宜检查先行
心跳模型是这轮讨论里最实用的想法之一。它不持续跑重推理,而是周期性做便宜存活检查、陈旧记忆检测,只在异常时才上昂贵的模型检查。典型任务包括:发现逾期未完成的提醒、对未确认偏好做置信度衰减、重新校验高影响记忆(账单、凭证范围)、压缩冗余记忆簇。这套架构大幅降成本,同时给出可预测的调度边界,方便可观测性和SLO管理。
检索排序也不能只看语义相似度。最终得分通常由语义相关性、新鲜度、置信度、来源信任度加权,再减去策略惩罚。新鲜度避免"旧但相似"的污染,置信度避免幻觉"事实"变成提示词里的真相,来源信任度偏向已验证的工具输出,策略惩罚压制敏感记忆。遇到两条高相关但互相冲突的记忆,要么都带上并标注不确定性,要么触发一次澄清提问。
安全边界与取舍
持久记忆本身就是攻击面。需要几道护栏:给记忆分允许、脱敏、永不存储三类策略;给用户可见的检查、编辑、删除和"忘记最近N天"控制;把记忆和安全工具执行沙箱配对,记忆不应隐含授予宽泛的工具权限;防止提示注入,未经校验不得把外部原始指令存成可信用户偏好;静态加密、敏感更新签名、读写审计留痕。
和Nanobot这类轻量方案比,取舍很清楚:小系统更快、更容易推理,但往往牺牲持久个性化深度。OpenClaw的价值主张是更强的连续性和随时间累积的助手效用,代价是更复杂的存储架构、策略治理开销和更严格的测试纪律。短期自动化场景轻量方案可能更划算;需要长期复利式助手行为,持久记忆架构值得投入。
三条原则保持平衡,这套记忆才成立:选择性持久化,存得更少、存得更好;成本感知的编排,便宜检查先行、必要时才调模型;策略优先的安全,同意、留存控制、可审计访问。把记忆当成一等子系统,而不是提示词技巧。
热门跟贴