agentic_huge_data_base / wiki
页面 Mem0 · 11.2 遥测与分析·DeepWiki 中文全文译文

11.2 · 遥测与分析(Telemetry and Analytics)

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节11.2 状态全文译文 模块界面与交互、系统架构、测试、发布与运维、文档对象与元数据
源码线索
  • mem0-ts/package.json
  • mem0-ts/src/client/config.ts
  • mem0-ts/src/client/index.ts
  • mem0-ts/src/client/mem0.ts
  • mem0-ts/src/client/mem0.types.ts
  • mem0-ts/src/client/telemetry.ts
  • mem0-ts/src/client/telemetry.types.ts
  • mem0-ts/src/client/tests/memoryClient.webhooks.test.ts
  • mem0-ts/src/client/tests/telemetry-aliasing.test.ts
  • mem0/memory/setup.py
模块标签
  • 界面与交互
  • 系统架构
  • 测试、发布与运维
  • 文档对象与元数据
  • 接口与服务契约

章节正文

遥测与分析

遥测与分析

相关源文件

本章引用的主要源码文件:

  • mem0-ts/package.json
  • mem0-ts/src/client/config.ts
  • mem0-ts/src/client/index.ts
  • mem0-ts/src/client/mem0.ts
  • mem0-ts/src/client/mem0.types.ts
  • mem0-ts/src/client/telemetry.ts
  • mem0-ts/src/client/telemetry.types.ts
  • mem0-ts/src/client/tests/memoryClient.webhooks.test.ts
  • mem0-ts/src/client/tests/telemetry-aliasing.test.ts
  • mem0/memory/setup.py
  • mem0/memory/telemetry.py
  • tests/test_telemetry_aliasing.py

本文档描述了 Mem0 的遥测与分析系统,该系统通过 PostHog 收集使用指标以改进产品。关于 API 客户端的配置选项,请参见客户端 SDK。关于自托管部署配置,请参见部署模型

目的与范围

Mem0 的遥测系统从 SDK 客户端(包括平台 API 客户端和自托管实例)捕获匿名化的使用指标,以了解功能采用情况、识别问题并改善开发者体验。该系统默认启用(选择退出),并与 PostHog 集成以进行事件处理和分析。

架构总览

遥测架构由 Python 中的核心 AnonymousTelemetry 类和 TypeScript 中的 UnifiedTelemetry 类组成。这些类与 PostHog 交互以传输事件数据。

Python 遥测架构
Mem0 · Python 遥测架构 · 图 1
Mem0 · Python 遥测架构 · 图 1

来源: mem0/memory/telemetry.py:73-132, mem0/memory/telemetry.py:186-210, mem0-ts/src/client/telemetry.ts:26-75

PostHog 集成

Mem0 使用 PostHog 作为其分析后端。在 Python 中,它使用 posthog 库;在 TypeScript 中,它通过 fetch 进行直接 API 集成。

配置常量(Python)
常量文件位置
PROJECT_API_KEYphc_hgJkUVJFYtmaJqrvf6CYN67TIQ8yhXAkWzUn9AMU4yXmem0/memory/telemetry.py:15
HOSThttps://us.i.posthog.commem0/memory/telemetry.py:16
MEM0_TELEMETRYTrue(默认值)mem0/memory/telemetry.py:14

MEM0_TELEMETRY 环境变量控制遥测是否启用。它接受布尔型字符串:"true""1""yes"mem0/memory/telemetry.py:18-22

配置常量(TypeScript)
常量文件位置
POSTHOG_API_KEYphc_hgJkUVJFYtmaJqrvf6CYN67TIQ8yhXAkWzUn9AMU4yXmem0-ts/src/client/telemetry.ts:15
POSTHOG_HOSThttps://us.i.posthog.com/i/v0/e/mem0-ts/src/client/telemetry.ts:16

来源: mem0/memory/telemetry.py:14-22, mem0-ts/src/client/telemetry.ts:11-16

遥测系统组件

AnonymousTelemetry 类(Python)

AnonymousTelemetry 类处理 PostHog 客户端的生命周期。它包含一个 capture_event 方法,该方法在发送前使用系统信息(操作系统、Python 版本、处理器)丰富数据。mem0/memory/telemetry.py:98-110

身份拼接(别名)

Python 和 TypeScript SDK 都支持身份拼接,以将匿名本地 ID 与平台用户身份(电子邮件)合并。这确保了当使用 API 密钥初始化 MemoryClient 时,来自 CLI 或本地 OSS 实例的使用情况可以与平台账户关联。

  • 机制: SDK 会触发一个 $identify 事件,并将 $anon_distinct_id 设置为本地匿名 ID。mem0/memory/telemetry.py:116-131, mem0-ts/src/client/telemetry.ts:77-113
  • 持久化: 为避免冗余的身份识别调用,标记会存储在 ~/.mem0/config.json 中。mem0/memory/setup.py:100-119, mem0-ts/src/client/config.ts:140-165
采样机制(Python OSS)

为减少噪音和成本,Mem0 在 OSS Python SDK 中为"热路径"事件实现了采样机制。

  • 默认采样率: 0.1(10% 的事件)。mem0/memory/telemetry.py:31
  • 配置: 通过 MEM0_TELEMETRY_SAMPLE_RATE 环境变量控制。mem0/memory/telemetry.py:47
  • 生命周期事件: 某些事件会绕过采样,始终以 100% 的概率触发。这些事件包括 mem0.initmem0.resetmem0._create_procedural_memory$identifymem0/memory/telemetry.py:52
Mem0 · 采样机制(Python OSS) · 图 2
Mem0 · 采样机制(Python OSS) · 图 2

来源: mem0/memory/telemetry.py:31-70

事件属性

捕获的元数据(Python)

Python SDK 捕获广泛的系统元数据:

属性来源
client_source硬编码为 "python"
client_versionmem0.__version__
python_versionsys.version
ossys.platform
os_versionplatform.version()
processorplatform.processor()

来源: mem0/memory/telemetry.py:99-110

捕获的元数据(TypeScript 客户端)

当为 MemoryClient 捕获事件时,系统会记录:

  • function:实例的构造函数名称(例如 MemoryClient)。
  • method:被调用的具体方法(例如 add)。
  • api_host:API 调用的目标主机。
  • client_version:在构建时注入。

来源: mem0-ts/src/client/telemetry.ts:136-150

事件命名约定

事件根据 SDK 和部署方式遵循命名模式:

  • 平台客户端(Python/TS): client.{method_name}(例如 client.initclient.addmem0-ts/src/client/telemetry.ts:148
  • OSS SDK(Python): mem0.{method_name}(例如 mem0.initmem0.addmem0/memory/telemetry.py:186

隐私与选择退出

禁用遥测

可以通过将 MEM0_TELEMETRY 环境变量设置为 False(Python)或 false(TS)来禁用遥测。

  • Python:AnonymousTelemetry.__init__capture_event 中处理。mem0/memory/telemetry.py:14-22, mem0/memory/telemetry.py:75-78
  • TypeScript:UnifiedTelemetry.captureEventisTelemetryEnabled 中处理。mem0-ts/src/client/telemetry.ts:11-14, mem0-ts/src/client/telemetry.ts:40
用户标识

用于遥测的 user_id 由 Python 中的 get_or_create_user_id 和 TypeScript 中的 getOrCreateMem0UserId 管理。

  1. 它首先检查 MEM0_DIR(默认为 ~/.mem0)中的本地 config.json 文件。mem0/memory/setup.py:9-11, mem0-ts/src/client/config.ts:37
  2. 在 Python 中,如果提供了 vector_store,它会尝试检索或持久化一个 user_identity 向量,以在使用相同数据库的不同环境中维护稳定的 ID。mem0/memory/setup.py:122-154

来源: mem0/memory/setup.py:122-154, mem0-ts/src/client/config.ts:81-96

实现细节

线程安全单例(Python)

OSS 遥测使用线程安全的惰性单例模式,以确保每个进程只存在一个 PostHog 客户端。它使用 threading.Lock() 进行实例化,并使用 atexit.register() 确保后台工作线程在进程退出时被干净地关闭。

来源: mem0/memory/telemetry.py:139-168

TypeScript 构建时版本控制

TypeScript SDK 在构建时注入版本号。在非打包环境(如测试)中,它会回退到 "dev"

来源: mem0-ts/src/client/telemetry.ts:7-8