Triplet 嵌入模型
三元组嵌入模型
相关源文件
以下文件为本维基页面的生成提供了上下文:
cognee/infrastructure/llm/prompts/extract_query_time.txtcognee/modules/graph/cognee_graph/CogneeAbstractGraph.pycognee/modules/graph/cognee_graph/CogneeGraph.pycognee/modules/graph/cognee_graph/CogneeGraphElements.pycognee/modules/graph/cognee_graph/__init__.pycognee/modules/graph/exceptions/__init__.pycognee/modules/graph/exceptions/exceptions.pycognee/modules/retrieval/base_retriever.pycognee/modules/retrieval/completion_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/temporal_retriever.pycognee/modules/retrieval/utils/brute_force_triplet_search.pycognee/modules/retrieval/utils/completion.pycognee/modules/retrieval/utils/node_edge_vector_search.pycognee/modules/users/methods/get_authenticated_user.pycognee/tests/test_search_db.pycognee/tests/unit/modules/graph/cognee_graph_elements_test.pycognee/tests/unit/modules/graph/cognee_graph_test.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/test_node_edge_vector_search.pycognee/tests/unit/modules/retrieval/triplet_retriever_test.pycognee/tests/unit/modules/users/test_conditional_authentication.py
三元组嵌入模型将图关系表示为可嵌入的文本向量,从而支持对知识图谱进行关系感知的语义搜索。该模型通过将源节点、关系和目标节点信息组合成一个单一的文本表示,将图边转换为可搜索的数据点(DataPoint),然后可以通过向量相似度进行嵌入和检索。
有关通用数据点模型和图结构的信息,请参见8.1 核心数据模型。有关使用三元组的搜索策略,请参见4.2 基于图的搜索。
概述
三元组是一种专门化的表示形式,它封装了单个图边及其源节点和目标节点信息。与表示单个文档或片段的传统向量嵌入不同,三元组嵌入捕获了实体之间关系的语义含义。
三元组模型支持以下功能:
- 对知识图谱进行关系感知的语义搜索。
- 在边上(而非仅节点上)进行向量相似度匹配。
- 使用结构化关系信息丰富大语言模型(LLM)的上下文。
- 通过嵌入相似度引导图遍历。
来源: cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46,cognee/modules/graph/cognee_graph/CogneeGraphElements.py:108-115
三元组搜索与检索
基于三元组的检索核心是brute_force_triplet_search逻辑,它根据语义相似度编排相关图边的发现过程。
架构流程:从自然语言到图三元组
下图说明了自然语言查询如何映射到特定的代码实体和图结构,以检索三元组。
标题:三元组检索架构
来源: cognee/modules/retrieval/graph_completion_retriever.py:101-136,cognee/modules/retrieval/utils/brute_force_triplet_search.py:18-20,cognee/modules/retrieval/utils/brute_force_triplet_search.py:49-61,cognee/modules/graph/cognee_graph/CogneeGraph.py:18-40
三元组重要性评分
当检索到三元组时,系统不仅会基于向量相似度返回它们。Cognee 在CogneeGraph和检索工具中应用了一种重要性评分机制,该机制会考虑以下因素:
- 向量距离:通过
NodeEdgeVectorSearch检索到的与用户查询的相似度cognee/modules/retrieval/utils/node_edge_vector_search.py:13-18。 - 三元组距离惩罚:存储在
CogneeGraph中的一个乘数(默认值为 6.5),应用于距离以归一化重要性cognee/modules/graph/cognee_graph/CogneeGraph.py:38-38。 - 反馈影响:根据通过
feedback_weight属性跟踪的历史用户交互来调整分数cognee/modules/retrieval/utils/brute_force_triplet_search.py:69-73。
来源: cognee/modules/retrieval/utils/brute_force_triplet_search.py:119-150,cognee/modules/graph/cognee_graph/CogneeGraph.py:33-40,cognee/modules/graph/cognee_graph/CogneeGraphElements.py:57-65
实现细节
三元组创建与记忆片段
三元组的创建涉及将图数据投影到CogneeGraph实例中,这通常被称为"记忆片段"。该片段是一个与当前查询上下文相关的子图,通过project_graph_from_db或project_neighborhood_from_db进行填充。
标题:三元组数据流
来源: cognee/modules/graph/cognee_graph/CogneeGraph.py:162-180,cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46,cognee/modules/graph/cognee_graph/CogneeGraphElements.py:108-115
关系感知嵌入管线
系统在cognify过程中或通过显式调用create_triplet_embeddings来生成三元组的嵌入向量。
- 提取:使用
get_graph_data或get_id_filtered_graph_data从图数据库中获取边cognee/modules/graph/cognee_graph/CogneeGraph.py:123-133。 - 格式化:
format_triplets函数将Edge及其连接的Node属性转换为字符串cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46。 - 索引:格式化后的字符串被嵌入并保存到向量数据库的
Triplet_text集合中cognee/tests/test_search_db.py:115-125。
邻域搜索
一种更高级的三元组检索形式是邻域搜索。系统不是只查看孤立的三元组,而是通过向量搜索识别"种子节点",然后遍历图到特定的neighborhood_depth,以收集一组相关的三元组。
关键参数:
neighborhood_depth:从种子节点遍历的跳数cognee/modules/retrieval/utils/brute_force_triplet_search.py:81-91。neighborhood_seed_top_k:用于邻域提取的最大种子节点数cognee/modules/retrieval/utils/brute_force_triplet_search.py:59-60。
来源: cognee/modules/retrieval/utils/brute_force_triplet_search.py:80-91,cognee/modules/graph/cognee_graph/CogneeGraph.py:228-245
高级检索变体
三元组模型支持多种高级检索模式,这些模式通过专门的检索器实现:
| 检索器类 | 逻辑 | 用例 |
|---|---|---|
GraphCompletionRetriever | 三元组搜索 + 大语言模型(LLM)补全 cognee/modules/retrieval/graph_completion_retriever.py:33-40 | 通用图问答 |
GraphCompletionCotRetriever | 迭代式思维链推理 cognee/modules/retrieval/graph_completion_cot_retriever.py:36-50 | 复杂多跳推理 |
GraphCompletionContextExtensionRetriever | 多轮三元组扩展 cognee/modules/retrieval/graph_completion_context_extension_retriever.py:14-18 | 全面上下文收集 |
TemporalRetriever | 时间过滤的语义搜索 cognee/modules/retrieval/temporal_retriever.py:19-33 | 时间敏感查询 |
TripletRetriever | 直接三元组相似度检索 cognee/tests/test_search_db.py:27-27 | 原始关系提取 |
来源: cognee/modules/retrieval/graph_completion_retriever.py:33-40,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