RAD (Real-Time Agent Data) 开放标准
claude-mem 团队正在推动 RAD(Real-Time Agent Data)——一个 AI Agent 工作记忆的开放标准。
核心理念
RAD 定义了 Agent 如何捕获、存储和检索工作记忆的标准协议,不绑定特定的 IDE 或 Agent 框架。目标是让不同的 Memory 系统可以互操作。
关键设计元素
- Hook-Based Architecture:基于事件的非侵入式捕获
- Intelligent Compression:语义压缩而非全量存储
- Temporal Awareness:时间维度是一等公民
- Progressive Disclosure:分层检索而非全量注入
对生态的意义
如果 RAD 成为广泛采用的标准:
- 用户可以在不同 IDE/Agent 之间迁移记忆
- 第三方可以构建兼容的 Memory Provider
- Agent Framework(LangChain、CrewAI 等)可以标准化记忆接口
Agent Memory 与 Agent-to-Agent 协作
当多个 Agent 协同工作时,Memory 需要从”个人记忆”扩展为”共享认知”。
场景
Agent A(代码审查):发现了一个潜在的竞态条件
↓ 共享观察
Agent B(代码生成):写新代码时自动避免类似问题
↓ 反馈
Agent C(测试生成):针对竞态条件场景生成测试用例共享记忆架构
interface SharedMemorySpace {
// Agent 写入观察
contribute(agentId: string, observation: Observation): Promise<void>;
// Agent 读取相关记忆(过滤为与自己任务相关的)
retrieve(agentId: string, context: TaskContext): Promise<Observation[]>;
// 冲突检测:两个 Agent 做出矛盾的决策
detectConflicts(obs: Observation): Promise<Conflict[]>;
}关键挑战:
- 信息过载:10 个 Agent 各自产生大量 Observation,如何筛选每个 Agent 需要的子集
- 一致性:Agent A 修改了文件,Agent B 的缓存记忆是否还有效
- 优先级:多个 Agent 给出矛盾建议时,谁的记忆更权威
长期记忆的遗忘曲线
人类大脑有遗忘机制——不是设计缺陷,而是功能特性。Agent Memory 也需要”遗忘”。
为什么需要遗忘
- 旧决策可能已被新决策覆盖
- 过时的代码知识误导当前工作
- 存储无限增长的运维成本
- 索引中过多条目降低 Agent 的筛选效率
遗忘算法设计
借鉴 Ebbinghaus 遗忘曲线的思路,为每条 Observation 维护一个”存活权重”:
interface ObservationWeight {
observationId: number;
baseImportance: number; // 初始重要性(由 type 决定)
accessCount: number; // 被检索次数
lastAccessedAt: number; // 最后访问时间
createdAt: number;
}
function calculateRetentionScore(weight: ObservationWeight, now: number): number {
const ageInDays = (now - weight.createdAt) / 86400;
const recencyBonus = weight.lastAccessedAt
? Math.max(0, 1 - (now - weight.lastAccessedAt) / (30 * 86400)) // 30天内访问有加分
: 0;
// 基础权重 × 访问频率加成 × 时间衰减 × 近期访问加成
const score = weight.baseImportance
* (1 + Math.log2(1 + weight.accessCount)) // 对数增长,防止高频刷分
* Math.exp(-ageInDays / 180) // 180 天半衰期
* (1 + recencyBonus);
return score;
}
// type 对应的基础重要性
const typeImportance: Record<string, number> = {
'decision': 10, // 决策最重要,衰减最慢
'gotcha': 8, // 陷阱长期有效
'trade-off': 7,
'problem-solution': 5,
'what-changed': 3,
'how-it-works': 2,
'discovery': 2,
};遗忘策略
不是物理删除,而是从索引中移除:
Score > 5.0 → 始终出现在索引中
Score 2.0-5.0 → 仅在搜索时出现
Score < 2.0 → 归档(不参与搜索,可手动恢复)
Score < 0.5 → 标记为可删除多模态记忆
代码不是 Agent 工作的全部。设计稿、架构图、会议记录、用户反馈——这些非代码信息也应该成为记忆的一部分。
扩展 Observation 类型
interface MultiModalObservation extends Observation {
modality: 'code' | 'design' | 'diagram' | 'meeting' | 'document';
// 代码模态(当前已有)
files?: string[];
codeSnippets?: string[];
// 设计模态
designAssets?: { url: string; description: string }[];
// 图表模态
diagrams?: { type: 'mermaid' | 'image'; content: string }[];
// 会议模态
meetingNotes?: { participants: string[]; decisions: string[]; actions: string[] };
}跨模态关联
设计稿中的 UI 组件 → 对应的代码实现 → 相关的 Bug 记录 → 修复的 PR。这些跨模态的关联关系是知识图谱的自然应用场景。
Design("登录页") ──实现为──→ Code("src/pages/login.tsx")
│
包含Bug→ Observation("密码框自动填充冲突")
│
修复于→ Observation("使用 autocomplete=new-password")Memory 驱动的 Agent 自我进化
以下内容属于开放研究方向,目前尚无成熟的生产级实现。代码示例为概念验证(PoC),不保证在所有场景下有效。
最前沿的方向:Agent 通过分析自己的 Memory 来改善自己的行为模式。
反思机制
// 定期分析自身记忆模式
async function selfReflect(observations: Observation[]): Promise<Insight[]> {
// 分析过去 30 天的决策模式
const decisions = observations.filter(o => o.type === 'decision');
const bugfixes = observations.filter(o => o.type === 'problem-solution');
// 检测:哪些决策后来导致了 Bug?
const regretableDecisions = findDecisionsLeadingToBugs(decisions, bugfixes);
// 生成洞察
return regretableDecisions.map(d => ({
type: 'self-improvement',
title: `决策 "${d.title}" 后来引发了问题`,
suggestion: `下次面临类似选择时考虑...`,
}));
}行为模式学习
通过统计 Observation 类型的时间分布,Agent 可以学习:
- “周一上午通常在修 Bug”→ 主动检查 CI 状态
- “这个模块的改动频率很高”→ 增加测试覆盖
- “这类决策之后总是要返工”→ 建议多花时间调研
这不是科幻——它只需要一个定时的分析任务,基于结构化的 Observation 数据做统计和 LLM 总结。Memory 系统的数据基础已经具备,缺的只是上层的分析逻辑。
思考题
- 遗忘算法的”180 天半衰期”是一个经验值。如果你做的是一个 3 个月短期项目 vs 一个维护 5 年的基础设施,半衰期应该怎么调?
- Agent-to-Agent 共享记忆中的”冲突检测”——两个 Agent 做了矛盾的决策,你会怎么设计仲裁机制?
- “Memory 驱动的自我进化”在伦理上有什么风险?Agent 学到了错误的模式并强化了它,如何检测和纠正?
至此,全书 18 章内容完成。从 Agent Memory 的基础认知,到 claude-mem 的源码深度解析,到动手构建 mini-mem Plugin,再到企业级平台的架构设计和前沿探索——希望这本书能帮助你建立完整的 Agent Memory 工程知识体系,并在实践中创造价值。
继续交流:inferloop.dev
遗忘算法的完整可运行 Demo 见 examples/ch18-frontier/。