高级召回策略
高级检索策略
相关源文件
本章引用的主要源码文件:
CLAUDE.mdcognee/infrastructure/databases/graph/postgres/__init__.pycognee/infrastructure/databases/graph/postgres/adapter.pycognee/infrastructure/databases/graph/postgres/tables.pycognee/infrastructure/llm/prompts/extract_query_time.txtcognee/modules/retrieval/base_retriever.pycognee/modules/retrieval/completion_retriever.pycognee/modules/retrieval/cypher_search_retriever.pycognee/modules/retrieval/graph_completion_context_extension_retriever.pycognee/modules/retrieval/graph_completion_cot_retriever.pycognee/modules/retrieval/graph_completion_retriever.pycognee/modules/retrieval/graph_summary_completion_retriever.pycognee/modules/retrieval/natural_language_retriever.pycognee/modules/retrieval/temporal_retriever.pycognee/modules/retrieval/utils/completion.pycognee/tasks/temporal_awareness/index_graphiti_objects.pycognee/tests/integration/retrieval/test_chunks_retriever.pycognee/tests/integration/retrieval/test_graph_completion_retriever.pycognee/tests/integration/retrieval/test_graph_completion_retriever_context_extension.pycognee/tests/integration/retrieval/test_graph_completion_retriever_cot.pycognee/tests/integration/retrieval/test_structured_output.pycognee/tests/integration/retrieval/test_summaries_retriever.pycognee/tests/integration/retrieval/test_temporal_retriever.pycognee/tests/integration/retrieval/test_triplet_retriever.pycognee/tests/unit/modules/retrieval/chunks_retriever_test.pycognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.pycognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.pycognee/tests/unit/modules/retrieval/graph_completion_retriever_test.pycognee/tests/unit/modules/retrieval/rag_completion_retriever_test.pycognee/tests/unit/modules/retrieval/summaries_retriever_test.pycognee/tests/unit/modules/retrieval/temporal_retriever_test.pycognee/tests/unit/modules/retrieval/test_brute_force_triplet_search.pycognee/tests/unit/modules/retrieval/triplet_retriever_test.py
本文档介绍了 Cognee 中除基本图搜索和向量搜索之外的高级检索策略。这些策略通过多次大语言模型(LLM)交互、上下文扩展、查询分解和时间推理,实现了迭代优化模式,以提升检索质量。
关于基本检索概念和 SearchType 枚举,请参阅检索类型概览。关于基于图的搜索基础,请参阅基于图的搜索。关于向量搜索和检索增强生成(RAG),请参阅向量搜索和检索增强生成(RAG)。
高级检索器概述
Cognee 提供了多种高级检索策略,这些策略扩展了基础 GraphCompletionRetriever 或实现了专门的逻辑:
| 检索器类 | 主要策略 | 使用场景 |
|---|---|---|
GraphCompletionCotRetriever | 带验证的思维链推理 | 需要多步推理的复杂查询 |
GraphCompletionContextExtensionRetriever | 迭代上下文扩展 | 初始上下文可能不完整的查询 |
TemporalRetriever | 时间感知过滤和事件检索 | 时间相关查询("2024 年发生了什么?") |
所有基于图的高级检索器都遵循三阶段检索模式:
- get_retrieved_objects() - 获取原始图元素(三元组、事件或子查询结果)。
- get_context_from_objects() - 将检索到的数据转换为文本上下文。
- get_completion_from_context() - 生成最终的大语言模型(LLM)响应。
来源: cognee/modules/retrieval/graph_completion_cot_retriever.py:36-50,cognee/modules/retrieval/graph_completion_context_extension_retriever.py:14-18,cognee/modules/retrieval/temporal_retriever.py:19-33
类层次结构和继承关系
下图展示了基础检索类与高级实现之间的关系。
来源: cognee/modules/retrieval/base_retriever.py:1-20,cognee/modules/retrieval/graph_completion_retriever.py:33-60,cognee/modules/retrieval/graph_completion_cot_retriever.py:36-95,cognee/modules/retrieval/graph_completion_context_extension_retriever.py:14-54,cognee/modules/retrieval/temporal_retriever.py:19-65
思维链(CoT)检索器
概念
GraphCompletionCotRetriever 通过验证和后续问题实现迭代优化。在生成初始答案后,系统会根据可用上下文验证响应,并生成后续问题以从图中检索更多信息。此过程会重复 max_iter 轮(默认值:4)。
架构
思维链(CoT)检索器管理答案生成与推理驱动检索之间的循环。
来源: cognee/modules/retrieval/graph_completion_cot_retriever.py:144-176,cognee/modules/retrieval/graph_completion_cot_retriever.py:180-210
关键组件
QueryState 管理
思维链(CoT)检索器使用 QueryState 对象来跟踪批处理中每个查询的状态。该状态包含累积的 triplets、当前的 context_text 以及最新的 completion。 来源: cognee/modules/retrieval/graph_completion_cot_retriever.py:166-168,cognee/modules/retrieval/utils/query_state.py:1-15
提示模板
检索器依赖特定的提示文件来实现验证和后续逻辑:
cot_validation_system_prompt.txtcot_validation_user_prompt.txtcot_followup_system_prompt.txtcot_followup_user_prompt.txt
来源: cognee/modules/retrieval/graph_completion_cot_retriever.py:56-59,cognee/modules/retrieval/graph_completion_cot_retriever.py:90-93
上下文扩展检索器
概念
GraphCompletionContextExtensionRetriever 通过将生成的补全结果作为新的搜索查询,实现迭代上下文扩展。它会根据上一轮的输出检索额外的三元组,直到找不到新的三元组或达到最大轮数。
架构
来源: cognee/modules/retrieval/graph_completion_context_extension_retriever.py:56-98,cognee/modules/retrieval/graph_completion_context_extension_retriever.py:102-130
时间检索器
概念
TemporalRetriever 处理时间感知查询,通过提取时间间隔并根据时间戳过滤图元素,然后执行语义排序。
实现细节
- 时间提取:使用
LLMGateway.acreate_structured_output和QueryInterval模型从查询中提取starts_at和ends_at。 - 事件收集:使用
collect_time_ids和collect_events根据识别的时间戳查询unified_engine.graph。 - 向量重排序:对
Event_name集合执行向量搜索,并使用filter_top_k_events过滤和排序事件。 - 回退机制:如果查询中未识别出时间戳,则回退到对实体和事件的标准
get_triplets搜索。
来源: cognee/modules/retrieval/temporal_retriever.py:84-104,cognee/modules/retrieval/temporal_retriever.py:119-154
数据流和代码实体
下图将自然语言查询过程映射到 TemporalRetriever 中使用的具体代码实体。
来源: cognee/modules/retrieval/temporal_retriever.py:99-104,cognee/modules/retrieval/temporal_retriever.py:122-126,cognee/modules/retrieval/temporal_retriever.py:150-154,cognee/infrastructure/databases/graph/postgres/adapter.py:24-33
共享检索工具
高级检索器依赖共享逻辑来生成补全结果并将图元素解析为文本。
补全工具
位于 cognee/modules/retrieval/utils/completion.py 中,这些函数封装了 LLMGateway 调用:
generate_completion():使用用户/系统提示生成单个响应。generate_completion_batch():使用asyncio.gather并行生成多个补全结果。summarize_text():对检索到的上下文进行摘要,以符合 Token 限制。
来源: cognee/modules/retrieval/utils/completion.py:9-38,cognee/modules/retrieval/utils/completion.py:41-64,cognee/modules/retrieval/utils/completion.py:162-181
边解析
resolve_edges_to_text() 函数将原始的 Edge 对象(三元组)转换为人类可读的字符串。 来源: cognee/modules/retrieval/graph_completion_retriever.py:138-152
会话集成
所有高级检索器都会检查会话缓存。如果启用了会话缓存,它们会使用 get_session_manager() 检索对话历史记录,并将其注入到 system_prompt 中。 来源: cognee/modules/retrieval/graph_completion_retriever.py:81-85,cognee/modules/retrieval/graph_completion_cot_retriever.py:114-127,cognee/modules/retrieval/completion_retriever.py:127-147