第十章:记忆系统与知识管理

记忆存储架构

记忆系统是 OpenClaw 实现持续学习和个性化服务的核心基础设施。它模拟了人类的记忆机制,将信息分为短期记忆和长期记忆两个层级进行管理,使得 AI 智能体能够在会话间保持连贯的知识和用户偏好。

短期记忆

短期记忆存储当前会话中的对话历史和临时上下文,具有较高的读写速度但容量有限。其生命周期与用户会话绑定,当会话结束时,短期记忆会被压缩和归纳,重要信息会迁移到长期记忆中。

// 短期记忆配置
import { defineMemoryConfig } from 'openclaw/memory';

export default defineMemoryConfig({
  shortTerm: {
    provider: 'redis',
    ttl: 3600,            // 1 小时过期
    maxTokens: 8000,      // 上下文窗口
    compression: true,    // 启用上下文压缩
    strategy: 'sliding',  // 滑动窗口策略
  },
  longTerm: {
    provider: 'postgres',
    embedding: {
      model: 'text-embedding-3-small',
      dimensions: 1536,
    },
    index: {
      type: 'hnsw',       // 高效最近邻搜索
      m: 16,
      efConstruction: 200,
    },
  },
});

长期记忆

长期记忆使用向量数据库存储,通过语义搜索实现高效检索。它不直接存储原始文本,而是将文本转换为向量嵌入后再存储,支持基于相似度的相关性检索。

QMD 记忆搜索实现原理

QMD(Query Memory Database)是 OpenClaw 自研的高效记忆检索引擎,其工作流程如下:

  1. 用户输入查询文本
  2. 文本通过嵌入模型转换为向量
  3. 在向量数据库中执行近似最近邻搜索(ANN)
  4. 对检索结果进行相关性重排序
  5. 结合上下文权重对结果进行融合
// QMD 查询引擎实现
class QMDEngine {
  private embeddingModel: EmbeddingModel;
  private vectorStore: VectorStore;
  private ranker: RelevanceRanker;

  async query(input: string, options: {
    topK: number;
    timeDecay: number;
    sessionBoost: number;
  }): Promise<MemoryResult[]> {
    // 1. 生成查询向量
    const queryVector = await this.embeddingModel.embed(input);

    // 2. 向量检索
    const candidates = await this.vectorStore.search(queryVector, {
      topK: options.topK * 2,
    });

    // 3. 相关性重排序(融合时间衰减和会话权重)
    const ranked = this.ranker.rerank(candidates, {
      queryVector,
      timeDecay: options.timeDecay,
      sessionBoost: options.sessionBoost,
    });

    // 4. 返回 Top-K 结果
    return ranked.slice(0, options.topK);
  }
}

知识库集成

OpenClaw 的知识库系统支持从多种数据源导入知识,并将其统一为向量索引供检索使用:

数据源类型支持格式处理方式更新策略
文档文件PDF, Markdown, TXT文本提取后分段嵌入定期重建索引
FAQ 问答对JSON, CSV, YAML直接嵌入问答对增量更新
数据库PostgreSQL, MySQL定时同步 + CDC实时同步
网页HTML, Wiki爬取后清洗嵌入按需刷新
# knowledge-base-config.yaml
knowledgeBases:
  product-docs:
    type: document
    source:
      - path: ./docs/product-manual.pdf
      - path: ./docs/faq.md
      - path: ./docs/api-reference/
    chunking:
      strategy: semantic
      maxChunkSize: 512
      overlap: 64
    embedding:
      model: text-embedding-3-small

  customer-faq:
    type: faq
    source:
      path: ./data/faq-entries.json
    sync:
      schedule: '0 3 * * *'
      incremental: true

记忆检索与相关性排序

检索结果的相关性直接决定了 AI 回答的质量。OpenClaw 采用了多阶段排序策略来确保检索精度:

  • 第一阶段——向量相似度:计算查询向量与记忆向量的余弦相似度,快速筛选候选集
  • 第二阶段——时间衰减:根据记忆创建时间进行加权衰减,较新的记忆获得更高权重
  • 第三阶段——会话上下文:考虑当前会话的上下文主题,与当前话题相关的记忆获得额外加分
  • 第四阶段——用户偏好:根据用户历史交互行为,对特定类型的记忆进行个性化加权
// 相关性排序算法
function rankMemories(
  memories: MemoryItem[],
  query: QueryContext
): MemoryItem[] {
  return memories
    .map((mem) => {
      let score = mem.similarity;

      // 时间衰减因子
      const ageHours = (Date.now() - mem.createdAt) / 3600000;
      const timeDecay = Math.exp(-ageHours / (24 * query.timeDecayDays));
      score *= 0.6 + 0.4 * timeDecay;

      // 会话主题匹配加分
      if (mem.topics.some((t) => query.topics.includes(t))) {
        score *= 1.3;
      }

      return { ...mem, score };
    })
    .sort((a, b) => b.score - a.score);
}

实战:为客服 Bot 配置产品知识库

以下是一个完整的客服知识库配置方案:

# production-knowledge-config.yaml
memory:
  shortTerm:
    provider: redis
    ttl: 7200

  longTerm:
    provider: qdrant
    collection: customer-memory
    embedding:
      model: text-embedding-3-small

knowledgeBases:
  products:
    type: document
    source:
      - path: ./knowledge/products/
    chunking:
      strategy: semantic
    match:
      minScore: 0.75
      topK: 5

  policies:
    type: faq
    source:
      path: ./knowledge/policies.json
    match:
      minScore: 0.85
      topK: 3

retrieval:
  strategy: hybrid
  weights:
    semantic: 0.7
    keyword: 0.3
  rerank:
    enabled: true
    model: cross-encoder/ms-marco-MiniLM-L-6-v2

记忆管理最佳实践

  1. 定期清理过期记忆:设置合理 TTL 自动清理短期记忆中的无关信息,避免存储膨胀
  2. 分级存储策略:热点记忆放在 Redis 等高速存储中,冷数据迁移到低成本存储
  3. 隐私保护:对包含个人身份信息的记忆进行脱敏处理,遵守数据保护法规
  4. 记忆合并与去重:定期对相似度高的记忆进行合并,减少冗余并提升检索效率
  5. 建立反馈回路:根据用户对回答的满意度反馈调整检索权重,持续优化记忆召回质量
  6. 监控检索指标:关注命中率、平均检索延迟和用户满意度等核心指标,及时发现和定位问题

良好的记忆管理能够让 AI 智能体随着使用时间的增长变得越来越懂用户,实现真正的个性化智能服务。