agentic_huge_data_base / wiki
页面 Mem0 · 4.5 Similarity Thresholds·DeepWiki 中文全文译文

4.5 · Similarity Thresholds

长期记忆与上下文管理 · 本章是 Mem0 DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目Mem0 章节4.5 状态全文译文 模块检索、召回与索引、界面与交互、图谱与关系、系统架构
源码线索
  • docs/components/vectordbs/dbs/milvus.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
模块标签
  • 检索、召回与索引
  • 界面与交互
  • 图谱与关系
  • 系统架构
  • 测试、发布与运维

中文译文

Similarity Thresholds(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/4.5-similarity-thresholds
翻译时间:2026-05-27T08:44:55.289Z
翻译模型:deepseek-chat
原文字符数:7687
项目:Mem0 (mem0)

---

相似度阈值

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • docs/components/vectordbs/dbs/milvus.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
  • mem0/utils/scoring.py
  • mem0/vector_stores/chroma.py
  • mem0/vector_stores/milvus.py
  • mem0/vector_stores/qdrant.py
  • tests/configs/test_prompts.py
  • tests/memory/test_main.py
  • tests/test_chatty_llm_parsing.py
  • tests/test_main.py
  • tests/test_memory.py
  • tests/test_proxy.py
  • tests/utils/test_scoring.py
  • tests/vector_stores/test_chroma.py
  • tests/vector_stores/test_milvus.py
  • tests/vector_stores/test_qdrant.py

相似度阈值控制 Mem0 的图记忆系统如何判断两个实体是否足够相似,从而被视为同一节点。这种基于阈值的匹配机制可以防止知识图谱中出现重复实体,同时允许合理的变体作为独立节点存在。

适用范围:本页介绍图记忆中用于实体去重和节点匹配的向量相似度阈值。有关记忆检索中的向量搜索阈值,请参见记忆操作。有关图记忆架构总览,请参见图记忆概述

概述

在向图谱添加实体时,Mem0 会对每个实体名称生成嵌入向量,并使用余弦相似度与现有节点进行比较。相似度阈值决定了新实体应该复用现有节点还是创建新节点。这可以防止图谱中充斥着诸如 "john_smith"、"john_s" 和 "j_smith" 这类指向同一人物的近似重复节点。

默认阈值0.7(可通过 graph_store.threshold 配置)

来源:mem0/memory/main.py:155-161, mem0/utils/scoring.py:57-65

相似度阈值的工作原理

该阈值作用于实体嵌入向量之间的归一化余弦相似度分数。系统计算的分数范围为 [0, 1](或 [-1, 1],取决于后端),数值越高表示相似度越大。

graph LR
    A["新实体<br/>'john_smith'"] --> B["生成嵌入向量"]
    B --> C["搜索现有节点"]
    C --> D["计算余弦相似度"]
    D --> E{"相似度 >= 阈值?"}
    E -->|是| F["复用现有节点"]
    E -->|否| G["创建新节点"]

    H["现有节点<br/>'john_s'"] --> D
    I["阈值<br/>默认值: 0.7"] --> E

校验逻辑

mem0/memory/main.py 中的 _validate_search_params 函数确保用户提供的阈值是介于 0 和 1 之间的有效数值。

来源:mem0/memory/main.py:144-161

阈值取值与权衡

不同的阈值取值会在记忆系统中产生不同的行为:

阈值行为使用场景
0.9-1.0严格匹配——仅合并近乎相同的实体需要高精度,实体有严格定义
0.7-0.9平衡匹配——合并相似实体默认值——通用图谱构建
0.5-0.7宽松匹配——合并大致相似的实体激进去重,实体名称非正式
< 0.5非常宽松——存在错误合并风险不推荐

来源:mem0/memory/main.py:158-161, mem0/utils/scoring.py:60-70

混合检索评分

除了图实体匹配之外,Mem0 还在向量存储层利用阈值和加性评分进行混合检索。这涉及结合语义分数、BM25 分数和实体提升分数。

加性评分逻辑

mem0/utils/scoring.py 中的 score_and_rank 函数实现了最终的排序逻辑。它在将语义分数与其他信号组合之前,先对语义分数应用阈值过滤。

graph TD
    A["来自 VectorStoreBase 的语义结果"] --> B["按阈值过滤"]
    B --> C["检查信号可用性<br/>(BM25, 实体)"]
    C --> D["计算 max_possible"]

    D --> E["遍历候选结果"]
    E --> F["combined = (semantic + bm25 + entity_boost) / max_possible"]
    F --> G["将分数限制在 1.0 以内"]
    G --> H["排序并返回 Top K"]

    subgraph "除数逻辑"
    D1["仅语义: 1.0"]
    D2["语义 + BM25: 2.0"]
    D3["语义 + 实体: 1.5"]
    D4["全部: 2.5"]
    end

自适应除数

评分系统根据活跃信号自适应调整除数,以将分数保持在 [0, 1] 范围内:

  • 仅语义max_possible = 1.0
  • 语义 + BM25max_possible = 2.0
  • 语义 + BM25 + 实体max_possible = 2.5(实体提升权重 ENTITY_BOOST_WEIGHT0.5

来源:mem0/utils/scoring.py:44-48, mem0/utils/scoring.py:57-93, mem0/utils/scoring.py:101-110

BM25 归一化

BM25 分数是原始且无界的。Mem0 通过 normalize_bm25 中的逻辑斯谛 Sigmoid 函数将其归一化到 [0, 1] 范围。该 Sigmoid 函数的参数(中点和陡度)会根据查询中的词项数量动态调整。

查询词项数中点陡度
<= 35.00.7
4 - 67.00.6
7 - 99.00.5
10 - 1510.00.5
> 1512.00.5

来源:mem0/utils/scoring.py:16-40, mem0/utils/scoring.py:43-54

向量存储中的实现

不同的向量存储使用各自的本地查询语言来实现过滤和阈值处理。

Qdrant 实现

mem0/vector_stores/qdrant.py 中的 Qdrant.search 使用 query_points,并根据提供的元数据过滤器构建 Filter 对象。

来源:mem0/vector_stores/qdrant.py:214-235, mem0/vector_stores/qdrant.py:273-300

Milvus 实现

mem0/vector_stores/milvus.py 中的 MilvusDB.search 将过滤器转换为字符串表达式(例如 (metadata["user_id"] == "alice")),并将其传递给 MilvusClient.search 方法。

来源:mem0/vector_stores/milvus.py:139-155, mem0/vector_stores/milvus.py:186-218

ChromaDB 实现

mem0/vector_stores/chroma.py 中的 ChromaDB.search 使用 where 子句进行过滤,并通过 _parse_output 解析输出,以确保一致的 OutputData 格式。

来源:mem0/vector_stores/chroma.py:76-107, mem0/vector_stores/chroma.py:143-161

---

相关页面