Skip to main content
AG-Kit中的长期记忆功能使Agent能够跨对话和会话记住信息。它提供具备语义搜索、自动记忆提取和智能整合能力的持久化存储。

概述

长期记忆存储以下内容:
  • 持久性事实 - 需要无限期记住的信息
  • 用户偏好 - 个人设置和选择
  • 历史上下文 - 过去的交互和决策
  • 领域知识 - 学习到的信息和见解
  • 关联关系 - 概念与实体间的联系
与短期记忆(对话历史)不同,长期记忆专注于提取和存储超越单个对话的有意义信息。

记忆实现方案

AG-Kit提供多种长期记忆实现:

Mem0LongTermMemory

官方Mem0AG-Kit集成,具备AI驱动的先进记忆管理功能。 特性:
  • 从对话中自动提取记忆
  • 基于向量嵌入的语义搜索
  • 基于图的记忆关联
  • 智能记忆整合
  • 去重与合并
  • 记忆衰减与强化
  • 多用户和多Agent支持
使用场景:
  • 生产级AI应用
  • 个性化用户体验
  • 知识管理系统
  • 多会话对话

TDAILongTermMemory

TDAI云端长期记忆,具备企业级特性。 特性:
  • 云端持久化存储
  • 语义搜索能力
  • 基于策略的记忆组织
  • 可扩展的基础设施
  • 企业级可靠性
使用场景:
  • 企业部署
  • 大规模应用
  • 分布式系统

快速入门

使用Mem0LongTermMemory

import { Mem0LongTermMemory } from '@ag-kit/agents';

// 初始化Mem0记忆
const memory = new Mem0LongTermMemory({
  apiKey: process.env.MEM0_API_KEY!,
  userId: 'user-123',
  agentId: 'assistant-v1',
  appId: 'my-app'
});

// 测试连接
await memory.ping();

// 从对话中提取并记录记忆
const messages = [
  { role: 'user', content: 'My name is Alice and I love pizza' },
  { role: 'assistant', content: 'Nice to meet you, Alice! I\'ll remember that you love pizza.' }
];

const extractedMemories = await memory.extractAndRecord(messages, {
  userId: 'user-123'
});

console.log('Extracted memories:', extractedMemories);
// [
//   { id: 'mem-1', content: 'User name is Alice', strategy: 'general', ... },
//   { id: 'mem-2', content: 'User loves pizza', strategy: 'preferences', ... }
// ]

手动记录记忆

// 手动记录特定记忆
await memory.record({
  id: memory.generateMemoryId(),
  strategy: 'preferences',
  role: 'user',
  content: 'User prefers dark mode interface',
  metadata: {
    category: 'ui_preferences',
    confidence: 0.95,
    source: 'explicit_statement'
  },
  createdAt: new Date()
});

// 批量记录多个记忆
await memory.recordBatch([
  {
    id: memory.generateMemoryId(),
    strategy: 'facts',
    content: 'User works as a software engineer',
    metadata: { category: 'professional' },
    createdAt: new Date()
  },
  {
    id: memory.generateMemoryId(),
    strategy: 'preferences',
    content: 'User prefers TypeScript over JavaScript',
    metadata: { category: 'technical' },
    createdAt: new Date()
  }
]);

核心操作

记录记忆

将新记忆存储到长期记忆中。
// 记录单个记忆
await memory.record({
  id: 'mem-001',
  strategy: 'facts',
  role: 'user',
  content: 'User birthday is March 15th',
  metadata: {
    type: 'personal_info',
    verified: true
  },
  createdAt: new Date()
});

// 批量记录记忆
const memories = [
  {
    id: 'mem-002',
    strategy: 'preferences',
    content: 'User likes morning meetings',
    metadata: {},
    createdAt: new Date()
  },
  {
    id: 'mem-003',
    strategy: 'facts',
    content: 'User lives in San Francisco',
    metadata: {},
    createdAt: new Date()
  }
];

await memory.recordBatch(memories);

检索记忆

使用各种过滤器和搜索选项查询记忆。
// 检索所有记忆
const allMemories = await memory.retrieve({});

// 带限制检索
const recentMemories = await memory.retrieve({ limit: 10 });

// 按策略检索
const preferences = await memory.retrieve({
  strategy: 'preferences',
  limit: 20
});

// 分页检索
const page1 = await memory.retrieve({ limit: 10, offset: 0 });
const page2 = await memory.retrieve({ limit: 10, offset: 10 });

// 使用自定义过滤器检索
const verifiedMemories = await memory.retrieve({
  filters: { verified: true },
  limit: 50
});

删除记忆

通过ID或查询条件删除记忆。
// 按ID删除
await memory.delete('mem-001');

// 按查询删除(所有匹配的记忆)
await memory.delete({
  strategy: 'temporary',
  filters: { expired: true }
});

// 清除特定策略的所有记忆
await memory.clear('temporary');

// 清除所有记忆(谨慎使用!)
await memory.clear();

高级功能

自动记忆提取(仅限Mem0)

Mem0能自动从对话中提取有意义的信息。
// 从对话中提取记忆
const conversation = [
  { role: 'user', content: '我刚搬到纽约并在Google开始工作' },
  { role: 'assistant', content: '恭喜新工作和搬家!' },
  { role: 'user', content: '谢谢!我对这次改变既兴奋又紧张' }
];

const extractedMemories = await memory.extractAndRecord(conversation, {
  userId: 'user-123',
  metadata: {
    conversation_id: 'conv-456',
    extraction_date: new Date().toISOString()
  }
});

// Mem0智能提取:
// - "用户搬到了纽约"
// - "用户在Google工作"
// - "用户对改变既兴奋又紧张"

相关记忆

基于图关系查找与特定记忆相关的其他记忆。
// 获取与特定记忆相关的记忆
const relatedMemories = await memory.getRelatedMemories('mem-001', 3);
// 返回最多3个相关记忆

// 示例:如果mem-001是"用户喜欢意大利食物"
// 相关记忆可能是:
// - "用户最喜欢的餐厅是Luigi's"
// - "用户对贝类过敏"
// - "用户喜欢烹饪意大利面"

记忆整合(仅限Mem0)

自动去重、合并和优化存储的记忆。
// 触发记忆整合
await memory.consolidate();

// Mem0自动执行:
// - 去重相似记忆
// - 合并相关信息
// - 对老旧未使用的记忆应用衰减
// - 强化频繁访问的记忆

与Agent集成

将长期记忆与AG-Kit Agent集成以实现持久化知识。
import { Agent, Mem0LongTermMemory } from '@ag-kit/agents';

// 创建长期记忆
const longTermMemory = new Mem0LongTermMemory({
  apiKey: process.env.MEM0_API_KEY!,
  userId: 'user-123',
  agentId: 'assistant-v1'
});

// 创建带长期记忆的Agent
const agent = new Agent({
  name: 'personal-assistant',
  model: provider,
  longTermMemory: longTermMemory,
  /* ... */
});

// Agent自动:
// 1. 从对话中提取记忆
// 2. 检索相关记忆作为上下文
// 3. 根据新信息更新记忆

const response = await agent.run('你还记得关于我的什么?');
// Agent访问长期记忆以提供个性化响应

最佳实践

1. 使用适当的策略

用有意义的策略组织记忆:
// 良好:清晰的策略分类
await memory.record({
  strategy: 'preferences',
  content: '用户偏好深色模式',
  /* ... */
});

// 不良:通用或模糊的策略
await memory.record({
  strategy: 'general',
  content: '用户偏好深色模式',
  /* ... */
});

2. 添加丰富的元数据

在元数据中包含上下文信息:
// 良好:丰富的元数据
await memory.record({
  content: '用户完成了Python课程',
  metadata: {
    category: 'education',
    skill_level: 'intermediate',
    completion_date: '2024-01-15',
    verified: true,
    source: 'certificate'
  },
  /* ... */
});

// 不良:最少的元数据
await memory.record({
  content: '用户完成了Python课程',
  metadata: {},
  /* ... */
});

3. 使用语义搜索

利用语义搜索实现更好的检索:
// 良好:自然语言查询
const results = await memory.semanticSearch('用户的爱好是什么?');

// 次优:精确关键词匹配
const results = await memory.retrieve({ filters: { keyword: 'hobby' } });

性能考量

Mem0LongTermMemory

  • 自动优化:Mem0处理去重和整合
  • 语义搜索:基于向量的快速相似性搜索
  • 可扩展性:高效处理数百万条记忆
  • 网络延迟:需要调用Mem0服务API
  • 缓存:考虑缓存频繁访问的记忆

查询优化

// 高效:使用限制和过滤器
const memories = await memory.retrieve({
  strategy: 'preferences',
  limit: 10,
  filters: { category: 'food' }
});

// 低效:检索全部后在代码中过滤
const allMemories = await memory.retrieve({});
const filtered = allMemories.filter(m => m.strategy === 'preferences');

对比:短期记忆与长期记忆

方面短期记忆长期记忆
目的对话历史持久化知识
范围单次会话跨会话
存储最近消息提取的事实
检索按时间顺序语义搜索
生命周期会话期间永久
大小受token限制无限制
用例上下文窗口个性化

后续步骤