DeepSeek Harness Hub
← 返回列表

智能体持久记忆mem9-ai/mem9

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

面向 AI 智能体的持久记忆。

暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/16 · 已提供中文文档

OpenClaw 的无限记忆

综合分
70.1
GitHub 分
70.1
用户评分
★ Stars
1216
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add mem9-ai/mem9
仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
🟢实装验证通过· 2026/9/16
由 dsh-plugin-verify(GitHub Actions)在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包mem9(未发布到 npm,仅可源码安装)
Node 引擎未声明 engines.node
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

仓库缺少 package.json,无法用 dsh 插件安装命令安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/16 05:59:45

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

面向 AI 智能体的持久记忆。
你的智能体会在会话之间遗忘一切。mem9 通过跨会话、跨机器的持久记忆、面向多智能体工作流的共享记忆,以及带可视化仪表盘的混合召回,解决了这个问题。

对于 OpenClaw 和 ClawHub 安装,请从这里开始:mem9.ai/openclaw-memory

Hermes Agent、Claude Code、OpenCode、Codex、DeepSeek Harness 和 Dify 指南见下文。

快速开始

1. 选择你的 mem9 端点。

- 托管 API:https://api.mem9.ai
- 自托管:应用匹配的控制平面 schema,然后启动 mnemo-server:

cd server
MNEMO_DSN="user:pass@tcp(host:4000)/mnemos?parseTime=true" go run ./cmd/mnemo-server

有关特定后端的设置细节,请参阅自托管;有关配置,请参阅 API 参考。

2. 选择你的集成指南。

- OpenClaw / ClawHub
- Hermes Agent
- Claude Code
- OpenCode
- Codex
- DeepSeek Harness
- Dify
- 任意 HTTP 客户端 / 自定义运行时

3. 设置你的凭据。

Hosted API
export MEM9_API_URL="https://api.mem9.ai"
export MEM9_API_KEY=""

Self-hosted
export MEM9_API_URL="http://localhost:8080"
export MEM9_API_KEY=""

对于自托管部署,请使用你的服务器 URL,以及由你的配置流程返回或配置的 mem9 API 密钥。

为什么选择 mem9

mem9 为编码智能体提供一个共享记忆层,而不是彼此分离的本地笔记本和一次性提示文件。
| mem9 为你提供什么 | 为什么这很重要 |
|---|---|
| 跨会话和跨机器的持久记忆 | 你的上下文在重启、切换笔记本电脑和长期运行的项目中得以保留 |
| 跨智能体和工作流平台的共享记忆 | OpenClaw、Hermes Agent、Claude Code、OpenCode、Codex、DeepSeek Harness、Dify 应用和自定义客户端可以召回相同的事实 |
| 无状态集成 | 运行时插件保持轻量,因为存储、搜索、摄取和策略都位于服务器中 |
| 混合召回和可视化仪表盘 | 语义搜索、关键词搜索和检查工作流都集中在一个系统中 |

支持的平台和智能体运行时

| 平台 | 集成形式 | 安装 / 文档 |
|---|---|---|
| OpenClaw | 用于服务器支持的共享记忆的 kind: "memory" 插件 | OpenClaw / ClawHub 安装指南 |
| Hermes Agent | 带设置和激活流程的记忆提供程序插件 | mem9-hermes-plugin README |
| Claude Code | 带钩子和技能的市场插件 | claude-plugin/README.md |
| OpenCode | 从 opencode.json 加载的插件 SDK 集成 | opencode-plugin/README.md |
| Codex | 带托管钩子和项目覆盖的市场插件 | codex-plugin/README.md |
| DeepSeek Harness | 原生 DSH/Cordis 捆绑包,带召回、智能摄取和记忆工具 | dsh-plugin/README.md |
| Dify | 用于 Dify Agent 应用和工作流应用的工具插件,支持单空间和多空间授权 | mem9-dify-plugin README |
| 任何 HTTP 客户端 / 自定义运行时 | 直接 REST API 集成 | API 参考 |

所有支持的运行时和平台集成都暴露相同的核心记忆流程:针对 mem9 服务器 API 进行存储、搜索、获取、更新和删除。

为什么选择托管 API

托管 mem9 API 是将持久记忆置于智能体集群背后的最快方式,同时保留以后自托管的选项。

| 托管 API 能力 | 为什么团队从这里开始 |
|---|---|
| 托管 mem9 API,支持即时空间配置 | 你可以先安装智能体集成,而无需在第一天就搭建基础设施 |
| 跨运行时和平台的共享记忆 | 一个空间可以同时服务 OpenClaw、Hermes Agent、Claude Code、OpenCode、Codex、DeepSeek Harness、Dify 应用和自定义客户端 |
| 托管搜索和存储 | 混合召回开箱即用,无需单独的向量栈或同步层 |
| TiDB Cloud Starter 基础 | 托管路径受益于即时配置、原生向量搜索、全文搜索、服务器端自动嵌入、混合搜索和 MySQL 兼容的操作语义 |
| 与自托管 mem9 相同的 API 契约 | 迁移到你自己的部署只需更改基础 URL 和凭据,而不是重写插件 |
| 可视化仪表盘与产品入门 | 团队无需先构建内部工具即可检查和管理记忆 |

在底层,托管的 mem9 API 运行着与本仓库中呈现的相同的 mem9 服务器模型,由 TiDB Cloud Starter 提供托管式配置、原生向量搜索、全文搜索、服务端自动嵌入、混合搜索以及 MySQL 兼容的存储语义。

API 参考

在已认证的记忆、导入和会话消息请求中设置 X-Mnemo-Agent-Id,以便服务器区分在同一 mem9 空间内写入和召回记忆的是哪个运行时或代理实例。这适用于租户路径的 v1alpha1 路由和 v1alpha2 API 密钥路由。

配置

当你希望 mem9 自动配置一个新的 TiDB 支持的空间时,请使用此端点。

| 方法 | 路径 | 描述 |
|--------|------|-------------|
| POST | /v1alpha1/mem9s | 配置了配置器时的 TiDB 自动配置端点。TiDB Zero 在 tidb 上默认启用此路径;TiDB Cloud Pool 使用 MNEMO_TIDB_ZERO_ENABLED=false 以及 MNEMO_TIDBCLOUD_API_KEY 和 MNEMO_TIDBCLOUD_API_SECRET。手动引导部署使用预先存在的租户,而不是此路径。返回 { "id" }。接受可选的 utm_ 查询参数用于归因日志记录 |

所有新集成请优先使用 v1alpha2。它使用 X-API-Key,是当前运行时的主要 API 接口。

首选 API(v1alpha2)

| 方法 | 路径 | 描述 |
|--------|------|-------------|
| POST | /v1alpha2/mem9s/memories | 首选统一写入端点。需要 X-API-Key 请求头 |
| GET | /v1alpha2/mem9s/memories | 首选搜索端点。需要 X-API-Key 请求头 |
| GET | /v1alpha2/mem9s/memories/{id} | 首选按 ID 获取端点。需要 X-API-Key 请求头 |
| PUT | /v1alpha2/mem9s/memories/{id} | 首选更新端点。需要 X-API-Key 请求头 |
| DELETE | /v1alpha2/mem9s/memories/{id} | 首选删除端点。需要 X-API-Key 请求头 |
| GET/POST | /v1alpha2/mem9s/webhooks | 空间 webhook 管理。需要空间 X-API-Key |
| GET/PATCH/DELETE | /v1alpha2/mem9s/webhooks/{webhookID} | 获取、更新或删除空间 webhook |
| POST | /v1alpha2/mem9s/webhooks/{webhookID}/test | 排队一次已签名的测试投递 |
| POST | /v1alpha2/mem9s/webhooks/{webhookID}/rotate-secret | 轮换 webhook 签名密钥。新密钥仅返回一次 |
| GET | /v1alpha2/mem9s/webhook-deliveries | 列出最近的空间 webhook 投递 |
| GET/POST | /v1alpha2/space-chains/{chainID}/webhooks | 空间链 webhook 管理。需要在 X-API-Key 中提供 chain_ 管理密钥 |
| GET | /v1alpha2/space-chains/{chainID}/webhook-deliveries | 列出最近的空间链 webhook 投递 |

Webhook 事件和投递行为记录在 docs/webhooks-api-design.md 中。v1 会发出 memory.added、memory.deleted 和 space_chain.fact_routed。
空间链管理

空间链让你能够编排有序的多空间召回与路由管道。使用创建时返回的 chain_ 管理密钥作为以下所有管理端点的 X-API-Key。通过各节点自己的空间 X-API-Key 读取节点。

| 方法 | 路径 | 描述 |
|--------|------|-------------|
| POST | /v1alpha2/space-chains | 创建一个空间链。无需 X-API-Key —— 管理密钥(chain_ 前缀)会在响应体中返回。所有后续管理端点都需要此密钥 |
| GET | /v1alpha2/space-chains/by-key | 通过管理密钥查找空间链。需要在 X-API-Key 中提供 chain_ 密钥 |
| GET | /v1alpha2/space-chains/{chainID} | 获取空间链详情。需要 chain_ 管理密钥 |
| PATCH | /v1alpha2/space-chains/{chainID} | 更新空间链名称/描述。需要 chain_ 管理密钥 |
| DELETE | /v1alpha2/space-chains/{chainID} | 软删除一个空间链。需要 chain_ 管理密钥 |
| GET | /v1alpha2/space-chains/{chainID}/nodes | 列出链中的所有节点(按位置排序)。需要 chain_ 管理密钥 |
| PUT | /v1alpha2/space-chains/{chainID}/nodes | 替换链中的所有节点(完全替换)。需要 chain_ 管理密钥 |
| PUT | /v1alpha2/space-chains/{chainID}/nodes/{nodeID}/routing-policy | 更新特定链节点的路由策略。需要 chain_ 管理密钥 |
| GET | /v1alpha2/space-chains/{chainID}/bindings | 列出链的所有 API 密钥绑定。需要 chain_ 管理密钥 |
| POST | /v1alpha2/space-chains/{chainID}/bindings | 为链创建一个新的 API 密钥绑定。需要 chain_ 管理密钥 |
| PATCH | /v1alpha2/space-chains/{chainID}/bindings/{bindingID} | 禁用一个 API 密钥绑定。需要 chain_ 管理密钥 |

其他 v1alpha2 端点

| 方法 | 路径 | 描述 |
|--------|------|-------------|
| POST | /v1alpha2/mem9s/memories/batch-delete | 批量软删除记忆(最多 1000 条)。接受 {"ids": ["..."]}。需要 X-API-Key |
| GET | /v1alpha2/mem9s/session-messages | 列出已持久化的会话消息。需要 X-API-Key。查询参数:session_id、limit_per_session |
| POST | /v1alpha2/mem9s/imports | 上传 JSON 文件以进行异步摄取(multipart,最大 50MB)。file_type:memory 或 session。需要 X-API-Key |
| GET | /v1alpha2/mem9s/imports | 列出上传任务及其聚合状态。需要 X-API-Key |
| GET | /v1alpha2/mem9s/imports/{id} | 获取单个上传任务的详情。需要 X-API-Key |
| GET | /v1alpha2/status | 验证 X-API-Key 请求头。返回密钥状态(active/inactive),不解析租户 |

旧版租户路径 API(v1alpha1)

仅当你需要与旧版租户 ID 在路径中的客户端兼容时,才使用这些端点。

| 方法 | 路径 | 描述 |
|--------|------|-------------|
| POST | /v1alpha1/mem9s/{tenantID}/memories | 旧版统一写入端点。租户密钥通过 URL 路径传递 |
| GET | /v1alpha1/mem9s/{tenantID}/memories | 面向已配置 tenantID 的客户端的旧版搜索端点 |
| GET | /v1alpha1/mem9s/{tenantID}/memories/{id} | 旧版按 ID 获取端点 |
| PUT | /v1alpha1/mem9s/{tenantID}/memories/{id} | 旧版更新端点。可选的 If-Match 用于版本检查 |
| DELETE | /v1alpha1/mem9s/{tenantID}/memories/{id} | 旧版删除端点 |

自托管

首次启动前,请应用与你的后端匹配的控制平面 schema:server/schema.sql、server/schema_pg.sql 或 server/schema_db9.sql。

mem9 server 支持多种存储后端。将 MNEMO_DB_BACKEND 设置为 tidb、postgres 或 db9,将 MNEMO_DSN 指向该后端,其余运行时契约对你的 agents 保持不变。TiDB 支持三种租户流程:TiDB Zero 自动预配在 tidb 上默认启用;TiDB Cloud Pool 自动预配使用 MNEMO_TIDB_ZERO_ENABLED=false 以及 MNEMO_TIDBCLOUD_API_KEY 和 MNEMO_TIDBCLOUD_API_SECRET;手动引导使用预存在租户模式。postgres 和 db9 使用高级手动引导路径,这需要在控制平面 DB 中有一条活跃的租户记录,并在其背后有一个可用的租户数据库和 schema。在 v1alpha2 中,X-API-Key 通过 ID 查找来解析租户。

构建与运行

make build
cd server
MNEMO_DSN="user:pass@tcp(host:4000)/mnemos?parseTime=true" ./bin/mnemo-server

用于本地开发,在服务器源码变更时自动重新构建并重启:

MNEMO_DSN="user:pass@tcp(host:4000)/mnemos?parseTime=true" make dev

对于 PostgreSQL 或 db9 部署,在启动服务器前导出 MNEMO_DB_BACKEND=postgres 或 MNEMO_DB_BACKEND=db9。

Docker

make docker 将镜像标记为 ${REGISTRY}/mnemo-server:${COMMIT}。此本地示例构建 local/mnemo-server:dev:

make docker REGISTRY=local COMMIT=dev
docker run -e MNEMO_DSN="..." -e MNEMO_DB_BACKEND="tidb" -p 8080:8080 local/mnemo-server:dev

环境变量

最小运行时配置是 MNEMO_DSN。其他所有内容都是可选的,或仅适用于特定的部署模式。

核心服务器

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_DSN | 是 | — | 数据库连接字符串 |
| MNEMO_PORT | 否 | 8080 | HTTP 监听端口 |
| MNEMO_DB_BACKEND | 否 | tidb | 数据库后端:tidb、postgres 或 db9 |
| MNEMO_RATE_LIMIT | 否 | 100 | 每个 IP 每秒请求数 |
| MNEMO_RATE_BURST | 否 | 200 | 突发大小 |
| MNEMO_UPLOAD_DIR | 否 | ./uploads | 用于上传文件存储的目录 |
| MNEMO_WORKER_CONCURRENCY | 否 | 5 | 异步上传摄取 worker 的并行度 |
| MNEMO_UTM_ENABLED | 否 | false | 启用 UTM 活动跟踪。启用后,配置请求上的 utm_ 查询参数会存储在控制平面数据库中。需要 tenant_utm 表存在 |
| MNEMO_ENV | 否 | development | 部署环境。控制默认 CORS 源集合(生产环境为 https://mem9.ai;开发环境为 https://mem9.ai,http://localhost:4321,http://127.0.0.1:4321)。也可通过 APP_ENV 设置 |
| MNEMO_CORS_ALLOWED_ORIGINS | 否 | 生产环境为 https://mem9.ai;开发环境为 https://mem9.ai,http://localhost:4321,http://127.0.0.1:4321 | 逗号分隔的允许 CORS 源。覆盖基于 MNEMO_ENV 的默认值 |

嵌入与摄取

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_EMBED_AUTO_MODEL | 否 | — | TiDB/db9 EMBED_TEXT() 模型名称。设置后,其优先级高于客户端嵌入 |
| MNEMO_EMBED_AUTO_DIMS | 否 | 1024 | MNEMO_EMBED_AUTO_MODEL 的向量维度 |
| MNEMO_EMBED_API_KEY | 否 | — | 客户端嵌入提供商 API 密钥。当设置了 MNEMO_EMBED_BASE_URL 时,对于本地 OpenAI 兼容端点可选 |
| MNEMO_EMBED_BASE_URL | 否 | 启用客户端嵌入时为 https://api.openai.com/v1 | 自定义 OpenAI 兼容嵌入端点 |
| MNEMO_EMBED_MODEL | 否 | text-embedding-3-small | 客户端嵌入模型名称 |
| MNEMO_EMBED_DIMS | 否 | 1536 | 客户端嵌入向量维度 |
| MNEMO_LLM_API_KEY | 否 | — | LLM 提供商 API 密钥。如果未设置,智能摄取会回退到原始摄取行为 |
| MNEMO_LLM_BASE_URL | 否 | 启用 LLM 摄取时为 https://api.openai.com/v1 | 自定义 OpenAI 兼容聊天端点 |
| MNEMO_LLM_MODEL | 否 | gpt-4o-mini | 用于智能摄取的 LLM 模型 |
| MNEMO_LLM_TEMPERATURE | 否 | 0.1 | 用于智能摄取的 LLM 温度 |
| MNEMO_INGEST_MODE | 否 | smart | 摄取模式:smart 或 raw |
| MNEMO_FACT_EXTRACTION_INCLUDE_ASSISTANT | 否 | false | 在智能摄取期间包含助手轮次中断言的持久事实;系统和工具轮次仍被排除 |
| MNEMO_DISABLE_SESSION_SAVE | 否 | false | 禁用消息摄取的原始会话行持久化,同时仍提取和协调事实 |
| MNEMO_FTS_ENABLED | 否 | false | 启用 TiDB 全文搜索路径。仅在支持 TiDB FTS 的集群上设置此项 |

搜索来源轮次

MEM9_SOURCE_TURN_* 变量控制作为上下文装饰附加到搜索结果中的来源轮次对话数量。

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MEM9_SOURCE_TURN_MIN_SCORE | 否 | 2 | 来源轮次被包含在搜索结果装饰中的最小词频相关性分数 |
| MEM9_SOURCE_TURN_PER_MEMORY_LIMIT | 否 | 2 | 搜索结果中附加到单个记忆的最大来源轮次数 |
| MEM9_SOURCE_TURN_TOTAL_LIMIT | 否 | 12 | 单个搜索响应中所有记忆的源轮次总数上限 |

空间链召回

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_CHAIN_RECALL_STOP_SCORE | 否 | 0.8 | 仅当符合条件的查询具有达到或高于此阈值的最高归一化置信度时,才停止查询后续空间链节点。原始搜索 score 值不会触发链停止。必须介于 0 和 1 之间 |
| MNEMO_RECALL_REQUEST_TIMEOUT | 否 | 1m | 服务器拥有的召回请求总预算,包括响应组装和写入时间 |
| MNEMO_RECALL_RESPONSE_RESERVE | 否 | 5s | 召回请求预算中为响应组装和写入预留的时间;必须短于 MNEMO_RECALL_REQUEST_TIMEOUT |

预配与池化

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_TIDB_ZERO_ENABLED | 否 | true | 为 tidb 后端启用 TiDB Zero 自动预配。启用后,其优先级高于 TiDB Cloud Pool 预配 |
| MNEMO_TIDB_ZERO_API_URL | 否 | https://zero.tidbapi.com/v1alpha1 | TiDB Zero API 基础 URL |
| MNEMO_TIDBCLOUD_API_URL | 否 | https://serverless.tidbapi.com | TiDB Cloud Pool API 基础 URL |
| MNEMO_TIDBCLOUD_POOL_ID | 否 | 2 | 用于集群接管的 TiDB Cloud Pool ID |
| MNEMO_TIDBCLOUD_API_KEY | 否 | — | TiDB Cloud Pool API 密钥。仅在 MNEMO_TIDB_ZERO_ENABLED=false、MNEMO_DB_BACKEND=tidb 且需要池接管时使用 |
| MNEMO_TIDBCLOUD_API_SECRET | 否 | — | 用于摘要认证的 TiDB Cloud Pool API 密钥。条件与 MNEMO_TIDBCLOUD_API_KEY 相同 |
| MNEMO_TIDBCLOUD_PREFER_PRIVATELINK | 否 | false | 当下面配置了其 AWS PrivateLink 服务名称时,在 Pool 预配期间优先使用 TiDB Cloud 私有端点 |
| MNEMO_TIDBCLOUD_PRIVATELINK_SERVICE_NAMES | 否 | — | 此 mem9-server 可访问的 AWS PrivateLink 服务名称,以逗号分隔。当返回的服务名称不存在时,预配会回退到公共端点 |
| MNEMO_TENANT_POOL_MAX_IDLE | 否 | 5 | 进程内租户池中保留的最大空闲租户数据库连接数 |
| MNEMO_TENANT_POOL_MAX_OPEN | 否 | 10 | 每个租户数据库句柄的最大打开连接数 |
| MNEMO_TENANT_POOL_CONNECT_TIMEOUT | 否 | 3s | 租户池冷连接 ping/打开尝试的超时时间 |
| MNEMO_TENANT_POOL_IDLE_TIMEOUT | 否 | 10m | 租户数据库句柄的空闲超时时间 |
| MNEMO_TENANT_POOL_TOTAL_LIMIT | 否 | 200 | 整个进程中允许的租户数据库句柄总数 |
| MNEMO_CLUSTER_BLACKLIST | 否 | — | TiDB 集群 ID,以逗号分隔;这些集群的支出限制错误应转换为 HTTP 429 而不是 503 |

自动支出限制
这些变量控制 TiDB Cloud 集群在达到上限时自动提高支出限额。该功能会逐步将限额提高至 MNEMO_AUTO_SPEND_LIMIT_MAX,每次递增之间可配置冷却时间。

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_AUTO_SPEND_LIMIT_ENABLED | 否 | false | 为 TiDB Cloud 集群启用自动支出限额提高。需要有效的 MNEMO_TIDBCLOUD_API_KEY 和 MNEMO_TIDBCLOUD_API_SECRET |
| MNEMO_AUTO_SPEND_LIMIT_INCREMENT | 否 | 500 | 每次递增时支出限额的增加量(以美元分为单位:500 = $5.00) |
| MNEMO_AUTO_SPEND_LIMIT_MAX | 否 | 10000 | 允许的最大支出限额(以美元分为单位:10000 = $100.00)。必须大于递增量 |
| MNEMO_AUTO_SPEND_LIMIT_COOLDOWN | 否 | 1h | 同一集群连续提高支出限额之间的最短时间 |

计量

这些变量配置旧版服务端 API 计量写入器。它会为成功的召回和摄取操作发出 mem9-api 事件,并且独立于运行时使用配额计量。

计量位置配置为单个目标 URL。支持的方案有:

- s3://// 用于 S3 中的压缩 JSON 批次
- http://... 或 https://... 用于 JSON 批次 webhook

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_METERING_ENABLED | 否 | false | 启用计量写入器。当为 false 时,写入器为空操作 |
| MNEMO_METERING_URL | 否 | — | 计量目标 URL。支持的形式:s3:////、http://... 或 https://...。如果为空,即使 MNEMO_METERING_ENABLED=true,写入器也保持禁用 |
| MNEMO_METERING_FLUSH_INTERVAL | 否 | 10s | 计量写入器的内存批次刷新间隔 |

运行时使用配额和计量

运行时使用默认禁用。启用后,服务器会在内存召回/写入操作之前预留配额,在操作失败后释放预留,在操作成功后提交预留,并向运行时使用服务发送控制台计量事件。此路径使用 MNEMO_RUNTIME_USAGE_BASE_URL,不使用 MNEMO_METERING_URL。

运行时使用发件箱使用控制平面的 runtime_usage_outbox 表进行待处理的预留最终化和计量投递。当运行时使用启用时,它默认启用。
预留重试需要以下精确响应之一,且带有 details.retryable: true:409 registry_conflict;429 operation_in_progress、429 registry_busy 或 429 reservation_concurrency_limited,并带有正的十进制整数秒 Retry-After;或 503 unavailable。预留调用总共最多尝试三次。第一次重试从基础延迟到中点之间采样,第二次从中点到最大延迟之间采样。可重试的 429 响应使用采样延迟和 Retry-After 中的较大者。在故障关闭处理停止后,已识别或未知的 429 响应保持为 429,而耗尽的 409/503 响应、终态 409 operation_conflict 以及未知的 409 响应变为 503。

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_RUNTIME_USAGE_ENABLED | 否 | false | 为内存召回/写入操作启用运行时用量配额门控和控制台计量 |
| MNEMO_RUNTIME_USAGE_PROVIDER_ID | 否 | — | 在运行时状态响应中返回的运行时用量提供方判别值。Mem9 官方托管部署设置为 mem9-official;自托管部署通常留空或使用自己的提供方 id。上游对象形式的 providerData 会独立返回,并由识别该提供方 id 的消费者解释 |
| MNEMO_RUNTIME_USAGE_BASE_URL | 启用时必需 | — | 运行时用量服务基础 URL。必须为 http 或 https;查询和片段会被拒绝 |
| MNEMO_RUNTIME_USAGE_INTERNAL_SECRET | 启用时必需 | — | 用于内部运行时用量服务调用的 Bearer 令牌 |
| MNEMO_RUNTIME_USAGE_TIMEOUT | 否 | 3s | 配额预留和最终化请求的超时时间 |
| MNEMO_RUNTIME_USAGE_RESERVATION_RETRY_BASE_DELAY | 否 | 500ms | 预留重试抖动的下界。可接受范围:300ms 到 1s |
| MNEMO_RUNTIME_USAGE_RESERVATION_RETRY_MAX_DELAY | 否 | 1s | 预留重试抖动的上界。可接受范围:600ms 到 2s;必须大于基础延迟 |
| MNEMO_RUNTIME_USAGE_METERING_TIMEOUT | 否 | 5s | 控制台计量事件投递请求的超时时间 |
| MNEMO_RUNTIME_USAGE_RESERVATION_TTL | 否 | 30m | 会解析到服务器配置中,但目前不会发送到预留请求;更改它不会改变预留生命周期 |
| MNEMO_RUNTIME_USAGE_OPERATION_TTL | 否 | 30m | 会解析到服务器配置中,但目前不用于使运行时用量发件箱行过期;更改它不会改变发件箱生命周期 |
| MNEMO_RUNTIME_USAGE_FAIL_OPEN | 否 | false | 当配额预留因可重试的运行时用量服务错误而失败时允许操作。配额拒绝和操作冲突仍会故障关闭 |
| MNEMO_RUNTIME_USAGE_OUTBOX_ENABLED | 否 | 与 MNEMO_RUNTIME_USAGE_ENABLED 相同 | 持久化待处理的预留和计量步骤以便重试。如果在启用运行时用量时显式设置为 false,则 MNEMO_RUNTIME_USAGE_FAIL_OPEN 必须为 true |
| MNEMO_RUNTIME_USAGE_NOTICE_TIMEOUT | 否 | 1s | 仅用于成功响应通知的尽力而为运行时状态查询超时时间 |
| MNEMO_RUNTIME_USAGE_NOTICE_CACHE_ENABLED | 否 | true | 为成功响应运行时状态通知启用按 API 密钥作用域缓存 |
| MNEMO_RUNTIME_USAGE_NOTICE_CACHE_TTL | 否 | 30s | 成功响应运行时状态通知缓存条目的新鲜 TTL |
| MNEMO_RUNTIME_USAGE_NOTICE_STALE_TTL | 否 | 2m | 当状态提供程序不可用时,用于成功通知的最大陈旧缓存时长 |

安全与调试

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_ENCRYPT_TYPE | 否 | plain | 租户数据库密码的加密类型:plain、md5 或 kms。一次性部署决策。 |
| MNEMO_ENCRYPT_KEY | 否 | — | 用于 md5 的加密密钥,或用于 kms 的 KMS 密钥 ID。当 MNEMO_ENCRYPT_TYPE 不是 plain 时必需 |
| MNEMO_DEBUG_LLM | 否 | false | 记录原始 LLM 响应以调试解析错误。仅在开发/测试中使用,因为响应可能包含用户数据 |

AWS KMS 环境

这些仅在 MNEMO_ENCRYPT_TYPE=kms 时相关。服务器使用 AWS SDK 默认配置链;代码中引用的常见基于环境的输入包括:

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| AWS_ACCESS_KEY_ID | 否 | — | 使用基于环境的 AWS 凭证时,用于 KMS 认证的 AWS 访问密钥 ID |
| AWS_SECRET_ACCESS_KEY | 否 | — | 使用基于环境的 AWS 凭证时,用于 KMS 认证的 AWS 秘密访问密钥 |
| AWS_REGION | 否 | — | 用于创建 KMS 客户端的 AWS 区域 |

仅测试用

| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| MNEMO_TEST_DSN | 否 | 回退到 MNEMO_DSN | 服务器仓库测试使用的集成测试 DSN |

仓库地图

| 路径 | 角色 |
|---|---|
| server/ | 核心 Go REST API,以及空间、记忆、搜索、摄取和租户配置的权威来源 |
| cli/ | 用于演练 mem9 API 和摄取流程的独立 Go CLI |
| openclaw-plugin/ | OpenClaw 记忆插件 |
| opencode-plugin/ | OpenCode 插件 |
| claude-plugin/ | Claude Code 钩子和技能集成 |
| codex-plugin/ | Codex 市场插件和托管钩子 |
| dsh-plugin/ | DeepSeek Harness DSH/Cordis 捆绑包 |
| site/ | 公共 mem9.ai 站点和已发布的入门资源 |
| dashboard/ | 仪表板产品前端和支持性产品文档 |
| benchmark/ | 用于 mem9 评估的基准测试工具和数据集 |
| e2e/ | 针对运行中的 mem9 服务器的实时端到端脚本 |
| docs/ | 架构说明、设计文档和功能规格 |

相关仓库

| 仓库 | 负责内容 | 何时查看那里 |
|---|---|---|
| mem9 | 核心 Go API 服务器、agent 插件、CLI、站点、仪表盘前端、基准测试工具和文档 | 你正在处理共享内存服务器、插件集成或主要产品文档 |
| mem9-node | 仪表盘分析后端、异步任务和 worker 流程 | 某个仪表盘功能依赖于后端 API、后台任务或分析流水线 |
| mem9-hermes-plugin | Hermes Agent 插件打包、安装流程和 Hermes 专属文档 | 你正在更改 Hermes 的安装、激活或运行时特定行为 |
| mem9-dify-plugin | Dify 工具插件、记忆工具、授权模式和 Dify 专属文档 | 你正在更改 Dify Agent 应用、Workflow 应用或多空间插件行为 |

贡献

开发环境搭建和指南请参见 CONTRIBUTING.md。

许可证

Apache-2.0

基于 TiDB Cloud Starter 构建,用于共享内存、向量搜索和托管云资源开通。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群