agentic_huge_data_base / wiki
页面 Mem0 · 6.5 重排序·DeepWiki 中文全文译文

6.5 · 重排序(Reranking)

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

项目Mem0 章节6.5 状态全文译文 模块检索、召回与索引、模型调用与提供方适配、系统架构、记忆与上下文
源码线索
  • docs/components/rerankers/config.mdx
  • docs/components/rerankers/custom-prompts.mdx
  • docs/components/rerankers/models/cohere.mdx
  • docs/components/rerankers/models/huggingface.mdx
  • docs/components/rerankers/models/llm.mdx
  • docs/components/rerankers/models/llm_reranker.mdx
  • docs/components/rerankers/models/sentence_transformer.mdx
  • docs/components/rerankers/models/zero_entropy.mdx
  • docs/components/rerankers/optimization.mdx
  • docs/open-source/features/async-memory.mdx
模块标签
  • 检索、召回与索引
  • 模型调用与提供方适配
  • 系统架构
  • 记忆与上下文
  • 界面与交互

章节正文

重排序

重排序

相关源文件

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

  • docs/components/rerankers/config.mdx
  • docs/components/rerankers/custom-prompts.mdx
  • docs/components/rerankers/models/cohere.mdx
  • docs/components/rerankers/models/huggingface.mdx
  • docs/components/rerankers/models/llm.mdx
  • docs/components/rerankers/models/llm_reranker.mdx
  • docs/components/rerankers/models/sentence_transformer.mdx
  • docs/components/rerankers/models/zero_entropy.mdx
  • docs/components/rerankers/optimization.mdx
  • docs/open-source/features/async-memory.mdx
  • docs/open-source/features/openai_compatibility.mdx
  • docs/open-source/features/overview.mdx
  • mem0-ts/src/oss/src/vector_stores/pgvector.ts
  • mem0-ts/src/oss/tests/pgvector.unit.test.ts
  • mem0/configs/rerankers/llm.py
  • mem0/reranker/llm_reranker.py
  • mem0/vector_stores/azure_mysql.py
  • mem0/vector_stores/cassandra.py
  • tests/rerankers/conftest.py
  • tests/rerankers/test_llm_reranker_config.py
  • tests/rerankers/test_llm_reranker_nested_config.py
  • tests/rerankers/test_llm_reranker_rerank.py

目的与范围

重排序通过根据与查询的相关性对从向量存储或图存储中检索到的记忆进行重新排序,从而提升搜索结果质量。向量相似性搜索提供初始结果后,重排序器会应用更复杂的模型(如交叉编码器或大语言模型)来优化排序,并呈现最相关的记忆。

本页面涵盖重排序器配置、支持的提供商(Cohere、Zero Entropy、Sentence Transformers、基于大语言模型和 HuggingFace),以及与检索管线的集成。

来源: mem0/reranker/llm_reranker.py:10-11docs/components/rerankers/models/llm_reranker.mdx:6-9mem0/configs/rerankers/llm.py:8-10

重排序器架构

工厂模式与提供商注册

Mem0 使用工厂模式动态实例化重排序器。该模式将提供商字符串(例如 "cohere")映射到具体的实现类及其对应的配置模型。

Mem0 · 工厂模式与提供商注册 · 图 1
Mem0 · 工厂模式与提供商注册 · 图 1

来源: mem0/utils/factory.py:232-245mem0/reranker/llm_reranker.py:4-7mem0/configs/rerankers/llm.py:8-20

支持的重排序器提供商

提供商实现类配置类主要用途
cohereCohereRerankerCohereRerankerConfig生产级托管重排序 API。
sentence_transformerSentenceTransformerRerankerSentenceTransformerRerankerConfig使用交叉编码器模型进行本地重排序。
zero_entropyZeroEntropyRerankerZeroEntropyRerankerConfig高性能专用重排序服务。
llm_rerankerLLMRerankerLLMRerankerConfig使用大语言模型(OpenAI、Anthropic 等)进行相关性评分。
huggingfaceHuggingFaceRerankerHuggingFaceRerankerConfig通过 HuggingFace 推理 API 进行重排序。

来源: mem0/utils/factory.py:239-245docs/components/rerankers/models/llm_reranker.mdx:71-150

基于大语言模型的重排序

LLMReranker 是一种专用实现,允许使用任何受支持的语言模型作为重排序器。它利用 LlmFactory 创建底层的大语言模型实例 mem0/reranker/llm_reranker.py:59-59

大语言模型重排序的数据流

rerank 方法遍历候选文档,将输入截断至 _MAX_INPUT_LEN(4000 个字符)以防止提示溢出,并从大语言模型响应中提取数值分数 mem0/reranker/llm_reranker.py:89-102

Mem0 · 大语言模型重排序的数据流 · 图 2
Mem0 · 大语言模型重排序的数据流 · 图 2

实现细节:

  • 提示词:使用默认的 _SYSTEM_PROMPT,该提示词定义了从 0.0(不相关)到 1.0(完全相关)的评分范围 mem0/reranker/llm_reranker.py:75-86
  • 分数提取:使用正则表达式 r'\b([01](?:\.\d+)?)\b' 在大语言模型的文本响应中查找十进制数字,并将结果限制在 0.0 到 1.0 之间 mem0/reranker/llm_reranker.py:91-102
  • 回退机制:如果评分失败,则分配中性回退分数 0.5 mem0/reranker/llm_reranker.py:102-102
配置参数(LLMRerankerConfig
参数类型默认值描述
providerstr"openai"大语言模型提供商(openai、anthropic 等)mem0/configs/rerankers/llm.py:30-33
modelstr"gpt-4o-mini"用于重排序的大语言模型 mem0/configs/rerankers/llm.py:22-25
scoring_promptstrNone用于评分的自定义提示模板(已废弃)mem0/configs/rerankers/llm.py:46-49
top_kintNone重排序后返回的顶部文档数量 mem0/configs/rerankers/llm.py:34-37
llmdictNone嵌套的大语言模型配置,用于提供商特定字段(例如 ollama_base_urlmem0/configs/rerankers/llm.py:50-54

来源: mem0/reranker/llm_reranker.py:10-169mem0/configs/rerankers/llm.py:8-54docs/components/rerankers/models/llm_reranker.mdx:31-43

集成与使用

检索管线

重排序步骤发生在从存储后端(如 PGVectorCassandraDB)进行初始检索之后。

Mem0 · 检索管线 · 图 3
Mem0 · 检索管线 · 图 3
关键词与向量搜索上下文

虽然重排序器通常对向量搜索结果进行操作,但像 PGVector 这样的提供商也支持使用 PostgreSQL 全文搜索功能(to_tsvectorplainto_tsquery)进行 keywordSearch,这可以作为重排序器的候选来源 mem0-ts/src/oss/src/vector_stores/pgvector.ts:200-231

来源: mem0/reranker/llm_reranker.py:104-115mem0-ts/src/oss/src/vector_stores/pgvector.ts:200-231mem0/vector_stores/cassandra.py:146-160

自定义提示词

你可以使用 LLMRerankerConfig 中的 scoring_prompt 参数提供自定义提示模板。该提示词现在用作系统消息 mem0/reranker/llm_reranker.py:61-71

必需变量:

  • {query}:搜索查询。
  • {document}:正在评分的记忆条目。

配置示例:

config = {
    "reranker": {
        "provider": "llm_reranker",
        "config": {
            "provider": "openai",
            "model": "gpt-4o-mini",
            "scoring_prompt": "从 0.0 到 1.0 对 {document} 与 {query} 的相关性进行评分。"
        }
    }
}

来源: docs/components/rerankers/custom-prompts.mdx:30-74mem0/reranker/llm_reranker.py:61-73