• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思想人生从关注生活开始
博客园    首页    新随笔    联系   管理    订阅  订阅

OpenClaw记忆系统基石 —— memory-search.ts 中的 RAG 配置解析与合并逻辑

关键词:RAG|配置合并|向量检索|全文搜索|路径解析|数值校验

在 AI 智能体系统中,“记忆”是实现上下文延续性与知识个性化的关键能力。OpenClaw 的记忆系统不仅支持长期会话回溯,还能接入企业知识库、个人笔记甚至实时文件,形成一个动态、可扩展的混合检索引擎。

这一切的起点,是 src/agents/memory-search.ts —— 一个看似简单却高度灵活的配置解析与检索调度器。本文将揭示其如何通过四层配置合并、路径占位符解析与安全数值校验,为每个智能体构建专属的记忆策略。

一、记忆系统的三层数据源

OpenClaw 的 RAG 引擎可同时从以下来源检索信息:

image

所有数据在检索前被统一嵌入(embedding),存入 SQLite 向量数据库。

二、配置分层:四重覆盖机制

与全局配置类似,记忆系统也采用分层覆盖模型,优先级从低到高:

image

默认配置示例(L1)

// src/agents/memory-search.ts
const DEFAULT_MEMORY_CONFIG = {
  enabled: false,
  vectorWeight: 0.7,
  textWeight: 0.3,
  minSimilarity: 0.25,
  candidateMultiplier: 3,
  maxResults: 5,
  sessionMemory: {
    enabled: true,
    pathTemplate: "sessions/{sessionKey}.jsonl"
  },
  knowledgeBase: {
    enabled: false,
    pathTemplate: "knowledge/{agentId}/"
  }
}

即使用户未配置,系统也有合理默认行为。

三、配置合并与路径解析:resolveMemoryConfig()

核心函数 resolveMemoryConfig(agentId: string, sessionKey: string) 负责:

  1. 合并四层配置
  2. 解析路径中的占位符
  3. 校验数值合法性

占位符替换

配置中的路径支持动态变量:

  • {agentId} → 当前智能体 ID(如 dev-assistant)
  • {sessionKey} → 会话唯一标识(如 wa:+1234567890)
# agents/dev-assistant/config.yaml
memory:
  knowledgeBase:
    enabled: true
    pathTemplate: "knowledge/{agentId}/"  # → knowledge/dev-assistant/

这使得每个 Agent 可拥有独立知识库,实现多租户隔离。

数值校验:clampNumber() 防御非法输入

为防止用户误配导致系统异常,关键参数被严格限制:

function clampNumber(value: number, min: number, max: number, fallback: number): number {
  if (isNaN(value) || value < min || value > max) {
    console.warn(`Invalid value ${value}, using fallback ${fallback}`);
    return fallback;
  }
  return value;
}

// 使用示例
const vectorWeight = clampNumber(config.vectorWeight, 0, 1, 0.7);

image

防御性编程:不让配置错误拖垮整个检索流程。

四、混合检索权重:为什么是 70% 向量 + 30% 全文?

OpenClaw 采用加权混合检索(Hybrid Search):

  • 向量检索:基于语义相似度(使用 ONNX / OpenAI / Gemini Embedding)
  • 全文检索:基于关键词匹配(SQLite FTS5)

最终得分 = vectorScore × vectorWeight + textScore × textWeight

为何默认 0.7 / 0.3?

  • 向量主导:LLM 更擅长理解语义,而非关键词
  • 全文兜底:防止向量漂移(如“苹果” vs “Apple Inc.”)
  • 可调:用户可根据场景调整(技术文档可提高全文权重)

实测表明,该比例在多数场景下召回率与精度最佳。

五、运行时决策:何时启用记忆?

即使配置启用,memory-search.ts 也会动态判断是否执行检索:

触发条件

  • 用户问题包含指代性词汇(如“上次”、“之前提到的”)
  • 或明确请求知识库查询(如“根据文档…”)
  • 或启用了 alwaysEnableMemory(调试模式)

性能保护

  • 单次检索超时:2 秒
  • 结果过大自动截断(防 OOM)
  • 冷启动时异步构建索引,不影响首响应

记忆是增强,不是负担。

六、配置示例:企业知识库实战

# agents/hr-bot/config.yaml
memory:
  enabled: true
  vectorWeight: 0.6
  textWeight: 0.4          # HR 政策需精确关键词匹配
  knowledgeBase:
    enabled: true
    pathTemplate: "knowledge/hr-policies/"  # 公司政策库
  sessionMemory:
    enabled: true          # 也记住员工个人咨询历史

效果:
员工问:“我的产假有多少天?”
→ AI 同时检索:

  1. 公司《HR 政策手册.pdf》
  2. 该员工过往关于“生育保险”的对话
    → 综合回答,精准且个性化。

结语:配置即策略,记忆即能力

memory-search.ts 的设计哲学是:让记忆策略可声明、可组合、可安全运行。通过精细的配置分层与运行时保护,OpenClaw 既满足了开发者对灵活性的需求,又保障了生产环境的稳定性。

在下一篇中,我们将深入向量检索实现,解析 OpenClaw 如何高效融合向量与全文搜索。

下一篇预告:
第 8 篇:向量检索实战 —— OpenClaw 如何实现混合搜索(向量 + 全文)

您的 AI 助手,从此由您定义。若感兴趣可以浏览本书其他章节内容:

第 1 篇:OpenClaw 是什么?—— 工业级 AI 智能体网关的定位与愿景

第 2 篇:三位一体架构详解 —— 网关层、协议层、智能体系如何协同工作

第 3 篇:ACP 协议设计哲学 —— 为什么 OpenClaw 选择自研 Agent Client Protocol

第 4 篇:启动与配置体系 —— openclaw.mjs、config.yaml 与环境变量管理

第 5 篇:run.ts 上篇 —— 模型调度、账号轮询与上下文守护机制

第 6 篇:run.ts 下篇 —— 故障转移、重试策略与结果封装

第 7 篇:记忆系统基石 —— memory-search.ts 中的 RAG 配置解析与合并逻辑

第 8 篇:向量检索实战 —— OpenClaw 如何实现混合搜索(向量 + 全文)

第 9 篇:长期记忆与会话同步 —— 如何让 AI “记住”跨天对话

第 10 篇:exec.ts 上篇 —— 安全执行 Shell 命令的三层隔离模型

第 11 篇:exec.ts 下篇 —— 用户审批、后台任务与权限提升控制

第 12 篇:process.ts —— AI 如何像开发者一样管理后台进程

第 13 篇:安全边界设计 —— OpenClaw 如何防范 AI 滥用系统权限

第 14 篇:server-channels.ts —— 渠道插件生命周期管理器

第 15 篇:WhatsApp 深度集成 —— session.ts 与 Baileys 的健壮连接管理

第 16 篇:消息流入中枢 —— monitor-inbox.ts 如何解析、去重与防抖

第 17 篇:聊天 RPC 接口 —— chat.ts 中的历史查询、发送与中止逻辑

第 18 篇:Skills System —— 为什么“文档即工具”是 OpenClaw 的扩展灵魂

第 19 篇:可观测性工程 —— ws-log.ts 如何让 WebSocket 日志可读可用

第 20 篇:从零部署 OpenClaw —— 实战:接入 WhatsApp + 创建自定义 Skill

posted @ 2026-03-13 13:55  JackYang  阅读(4)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3