Published on

OpenClaw 原生长期记忆功能解析

Authors

openclaw memory

1. 对外入口与核心类型

  • index.d.ts:模块总出口(MemoryIndexManager、类型、manager 工厂)。
  • types.d.ts:公共类型(搜索结果、状态、同步进度、manager 接口)。
  • search-manager.d.ts:根据配置创建/返回 memory search manager。

2. 配置与后端选择

  • backend-config.d.ts:解析 memory backend 配置(builtin/qmd、qmd 集合/更新/限制)。

3. Embedding Provider 抽象与实现

  • embeddings.d.ts:embedding 抽象接口、provider 选择与回退。
  • embeddings-openai.d.ts:OpenAI provider/client 构建。
  • embeddings-gemini.d.ts:Gemini provider/client 构建。
  • embeddings-voyage.d.ts:Voyage provider/client 构建。
  • embeddings-mistral.d.ts:Mistral provider/client 构建。
  • embeddings-remote-client.d.ts:统一远程鉴权客户端构建。
  • embeddings-remote-provider.d.ts:远程 provider 通用适配。
  • embeddings-remote-fetch.d.ts:远程 embedding 向量请求。
  • embeddings-debug.d.ts:embedding 调试日志。
  • node-llama.d.ts:本地 node-llama-cpp 动态导入与模型路径解析。
  • embedding-model-limits.d.ts:不同 provider 的输入 token 上限解析。
  • embedding-chunk-limits.d.ts:按 token 限制过滤/裁剪 chunk。
  • embedding-input-limits.d.ts:UTF-8 字节估算与文本切分。

4. Batch Embedding 能力

  • batch-runner.d.ts:批任务分组、并发执行、轮询、超时控制。
  • batch-provider-common.d.ts:批处理通用状态类型与常量。
  • batch-utils.d.ts:批处理请求头、baseUrl、请求分组工具。
  • batch-http.d.ts:带重试的 JSON POST。
  • batch-upload.d.ts:上传 JSONL 批处理文件。
  • batch-output.d.ts:解析批处理输出行并回填向量。
  • batch-error-utils.d.ts:提取和格式化批处理错误。
  • batch-openai.d.ts:OpenAI 批量 embedding 执行。
  • batch-voyage.d.ts:Voyage 批量 embedding 执行。
  • batch-gemini.d.ts:Gemini 批量 embedding 执行。

5. 检索与排序算法

  • manager-search.d.ts:SQLite 向量检索、关键词检索、chunk 列举。
  • hybrid.d.ts:向量+关键词混合排序(含权重合并)。
  • mmr.d.ts:MMR 多样性重排。
  • temporal-decay.d.ts:时间衰减打分。
  • query-expansion.d.ts:FTS-only 查询扩展(关键词抽取/可选 LLM)。

6. Index Manager 主流程(builtin backend)

  • manager-sync-ops.d.ts:索引同步底座(schema、watcher、增量同步、meta、回退)。
  • manager-embedding-ops.d.ts:embedding 相关同步流程(缓存、批量、超时、重试)。
  • manager.d.tsMemoryIndexManager 主类(search/sync/status/read/close)。
  • memory-schema.d.ts:初始化 memory 索引 schema(FTS/缓存表等)。
  • sqlite-vec.d.ts:加载 sqlite-vec 扩展。
  • sqlite.d.tsnode:sqlite 引入。

7. QMD Backend 相关

  • qmd-manager.d.ts:QMD manager(集合管理、update/embed、搜索、session 导出、scope)。
  • qmd-query-parser.d.ts:解析 QMD 查询 JSON 输出。
  • qmd-scope.d.ts:QMD scope 校验与会话通道类型推导。

8. 文件与会话处理工具

  • internal.d.ts:通用内部工具(文件扫描、hash、markdown chunk、相似度、并发)。
  • fs-utils.d.ts:文件 stat 与 ENOENT 判断。
  • session-files.d.ts:session 文件扫描、文本提取、entry 构建与行号映射。

9. 网络与 HTTP 工具

  • post-json.d.ts:通用 JSON POST 与 payload 解析。
  • remote-http.d.ts:远程 HTTP 调用包装与 SSRF 策略支持。

系统架构图


OpenClaw Memory Architecture (ASCII)

+--------------------------------------------------------------+
|                        Caller / Agent                        |
|                   (search / sync / status)                   |
+------------------------------+-------------------------------+
                               |
                               v
+--------------------------------------------------------------+
|                    search-manager.d.ts                       |
|         getMemorySearchManager(cfg, agentId, purpose)        |
+------------------------------+-------------------------------+
                               |
                 +-------------+-------------+
                 |                           |
                 v                           v
+-------------------------------+   +---------------------------+
|     Builtin Backend Path      |   |      QMD Backend Path     |
|       manager.d.ts            |   |      qmd-manager.d.ts     |
|      MemoryIndexManager       |   |      QmdMemoryManager     |
+---------------+---------------+   +------------+--------------+
                |                                |
                | search/sync/status/read        | search/sync/status/read
                v                                v
+-------------------------------+   +---------------------------+
| manager-sync-ops.d.ts         |   | qmd-query-parser.d.ts     |
| - schema/watch/incremental    |   | qmd-scope.d.ts            |
| - source/session sync         |   | backend-config.d.ts       |
+---------------+---------------+   +------------+--------------+
                |
                v
+-------------------------------+
| manager-embedding-ops.d.ts    |
| - cache / retry / timeout     |
| - provider batch + fallback   |
+---------------+---------------+
                |
                v
+-------------------------------+
| embeddings.d.ts               |
| createEmbeddingProvider(...)  |
+-------+-----------+-----------+-------------------------------+
        |           |           |               |
        v           v           v               v
+-----------+ +-----------+ +-----------+ +---------------------+
| openai    | | gemini    | | voyage    | | mistral / local     |
| embeddings| | embeddings| | embeddings| | node-llama          |
+-----+-----+ +-----+-----+ +-----+-----+ +----------+----------+
      |             |             |                   |
      +-------------+-------------+-------------------+
                    |
                    v
+--------------------------------------------------------------+
| Batch Pipeline (optional)                                    |
| batch-runner / batch-openai / batch-voyage / batch-gemini    |
| batch-upload / batch-output / batch-error-utils / batch-http |
+------------------------------+-------------------------------+
                               |
                               v
+--------------------------------------------------------------+
| Search + Ranking                                               |
| manager-search (vector/fts) -> hybrid -> mmr -> temporal      |
| query-expansion (fts-only helper)                             |
+------------------------------+-------------------------------+
                               |
                               v
+--------------------------------------------------------------+
| Storage Layer                                                  |
| sqlite + sqlite-vec + memory-schema                           |
| Sources: memory files + session-files                         |
| Utilities: internal / fs-utils / post-json / remote-http      |
+--------------------------------------------------------------+

架构总览

                      +-------------------------+
                      |   index.ts / types.ts   |
                      |   对外 API 与类型导出     |
                      +------------+------------+
                                   |
                    +--------------v----------------+
                    |      MemoryIndexManager        |
                    |          manager.ts            |
                    +------+---------------+---------+
                           |               |
            +--------------v--+       +----v------------------+
            | manager-sync-ops |       | manager-embedding-ops |
            | 扫描/同步/watch   |       | 向量生成/批处理写入      |
            +---------+--------+       +-----------+-----------+
                      |                            |
          +-----------v-----------+      +---------v-----------------------+
          | internal/session-files |      | embeddings.ts + provider family |
          | 文件发现/分块/会话抽取  |      | openai/gemini/voyage/...       |
          +-----------+-----------+      +---------+-----------------------+
                      |                            |
          +-----------v-------------+   +----------v----------------+
          | sqlite.ts/sqlite-vec.ts |   | batch-*.ts / post-json.ts |
          | 索引库与向量扩展加载      |   | 远端批处理、HTTP 与结果回填   |
          +-----------+-------------+   +----------+----------------+
                      |                            |
          +-----------v----------------------------v---------+
          | manager-search.ts + hybrid.ts + mmr.ts + decay.ts |
          | 向量检索 + 关键词检索 + 混排重排 + 时间衰减          |
          +----------------------+----------------------------+
                                 |
             +-------------------v--------------------+
             | search-manager.ts / qmd-manager.ts      |
             | backend 分发(builtin / qmd)与 fallback |
             +-----------------------------------------+