重排序
重排序
相关源文件
本章引用的主要源码文件:
docs/components/rerankers/config.mdxdocs/components/rerankers/custom-prompts.mdxdocs/components/rerankers/models/cohere.mdxdocs/components/rerankers/models/huggingface.mdxdocs/components/rerankers/models/llm.mdxdocs/components/rerankers/models/llm_reranker.mdxdocs/components/rerankers/models/sentence_transformer.mdxdocs/components/rerankers/models/zero_entropy.mdxdocs/components/rerankers/optimization.mdxdocs/open-source/features/async-memory.mdxdocs/open-source/features/openai_compatibility.mdxdocs/open-source/features/overview.mdxmem0-ts/src/oss/src/vector_stores/pgvector.tsmem0-ts/src/oss/tests/pgvector.unit.test.tsmem0/configs/rerankers/llm.pymem0/reranker/llm_reranker.pymem0/vector_stores/azure_mysql.pymem0/vector_stores/cassandra.pytests/rerankers/conftest.pytests/rerankers/test_llm_reranker_config.pytests/rerankers/test_llm_reranker_nested_config.pytests/rerankers/test_llm_reranker_rerank.py
目的与范围
重排序通过根据与查询的相关性对从向量存储或图存储中检索到的记忆进行重新排序,从而提升搜索结果质量。向量相似性搜索提供初始结果后,重排序器会应用更复杂的模型(如交叉编码器或大语言模型)来优化排序,并呈现最相关的记忆。
本页面涵盖重排序器配置、支持的提供商(Cohere、Zero Entropy、Sentence Transformers、基于大语言模型和 HuggingFace),以及与检索管线的集成。
来源: mem0/reranker/llm_reranker.py:10-11、docs/components/rerankers/models/llm_reranker.mdx:6-9、mem0/configs/rerankers/llm.py:8-10
重排序器架构
工厂模式与提供商注册
Mem0 使用工厂模式动态实例化重排序器。该模式将提供商字符串(例如 "cohere")映射到具体的实现类及其对应的配置模型。
来源: mem0/utils/factory.py:232-245、mem0/reranker/llm_reranker.py:4-7、mem0/configs/rerankers/llm.py:8-20
支持的重排序器提供商
| 提供商 | 实现类 | 配置类 | 主要用途 |
|---|---|---|---|
cohere | CohereReranker | CohereRerankerConfig | 生产级托管重排序 API。 |
sentence_transformer | SentenceTransformerReranker | SentenceTransformerRerankerConfig | 使用交叉编码器模型进行本地重排序。 |
zero_entropy | ZeroEntropyReranker | ZeroEntropyRerankerConfig | 高性能专用重排序服务。 |
llm_reranker | LLMReranker | LLMRerankerConfig | 使用大语言模型(OpenAI、Anthropic 等)进行相关性评分。 |
huggingface | HuggingFaceReranker | HuggingFaceRerankerConfig | 通过 HuggingFace 推理 API 进行重排序。 |
来源: mem0/utils/factory.py:239-245、docs/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。
实现细节:
- 提示词:使用默认的
_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)
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
provider | str | "openai" | 大语言模型提供商(openai、anthropic 等)mem0/configs/rerankers/llm.py:30-33。 |
model | str | "gpt-4o-mini" | 用于重排序的大语言模型 mem0/configs/rerankers/llm.py:22-25。 |
scoring_prompt | str | None | 用于评分的自定义提示模板(已废弃)mem0/configs/rerankers/llm.py:46-49。 |
top_k | int | None | 重排序后返回的顶部文档数量 mem0/configs/rerankers/llm.py:34-37。 |
llm | dict | None | 嵌套的大语言模型配置,用于提供商特定字段(例如 ollama_base_url)mem0/configs/rerankers/llm.py:50-54。 |
来源: mem0/reranker/llm_reranker.py:10-169、mem0/configs/rerankers/llm.py:8-54、docs/components/rerankers/models/llm_reranker.mdx:31-43
集成与使用
检索管线
重排序步骤发生在从存储后端(如 PGVector 或 CassandraDB)进行初始检索之后。
关键词与向量搜索上下文
虽然重排序器通常对向量搜索结果进行操作,但像 PGVector 这样的提供商也支持使用 PostgreSQL 全文搜索功能(to_tsvector、plainto_tsquery)进行 keywordSearch,这可以作为重排序器的候选来源 mem0-ts/src/oss/src/vector_stores/pgvector.ts:200-231。
来源: mem0/reranker/llm_reranker.py:104-115、mem0-ts/src/oss/src/vector_stores/pgvector.ts:200-231、mem0/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-74、mem0/reranker/llm_reranker.py:61-73