agentic_huge_data_base / wiki
页面 Cognee · 8.3 Triplet 嵌入模型·DeepWiki 中文全文译文

8.3 · Triplet 嵌入模型(Triplet Embedding Model)

记忆管道与知识图谱构建 · 聚焦本章的模块关系、源码依据与实现要点。

项目Cognee 章节8.3 状态全文译文 模块检索、召回与索引、图谱与关系、模型调用与提供方适配、系统架构
源码线索
  • cognee/infrastructure/llm/prompts/extract_query_time.txt
  • cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py
  • cognee/modules/graph/cognee_graph/CogneeGraph.py
  • cognee/modules/graph/cognee_graph/CogneeGraphElements.py
  • cognee/modules/graph/cognee_graph/__init__.py
  • cognee/modules/graph/exceptions/__init__.py
  • cognee/modules/graph/exceptions/exceptions.py
  • cognee/modules/retrieval/base_retriever.py
  • cognee/modules/retrieval/completion_retriever.py
  • cognee/modules/retrieval/graph_completion_context_extension_retriever.py
模块标签
  • 检索、召回与索引
  • 图谱与关系
  • 模型调用与提供方适配
  • 系统架构
  • 记忆与上下文

章节正文

Triplet 嵌入模型

三元组嵌入模型

相关源文件

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

  • cognee/infrastructure/llm/prompts/extract_query_time.txt
  • cognee/modules/graph/cognee_graph/CogneeAbstractGraph.py
  • cognee/modules/graph/cognee_graph/CogneeGraph.py
  • cognee/modules/graph/cognee_graph/CogneeGraphElements.py
  • cognee/modules/graph/cognee_graph/__init__.py
  • cognee/modules/graph/exceptions/__init__.py
  • cognee/modules/graph/exceptions/exceptions.py
  • cognee/modules/retrieval/base_retriever.py
  • cognee/modules/retrieval/completion_retriever.py
  • cognee/modules/retrieval/graph_completion_context_extension_retriever.py
  • cognee/modules/retrieval/graph_completion_cot_retriever.py
  • cognee/modules/retrieval/graph_completion_retriever.py
  • cognee/modules/retrieval/graph_summary_completion_retriever.py
  • cognee/modules/retrieval/temporal_retriever.py
  • cognee/modules/retrieval/utils/brute_force_triplet_search.py
  • cognee/modules/retrieval/utils/completion.py
  • cognee/modules/retrieval/utils/node_edge_vector_search.py
  • cognee/modules/users/methods/get_authenticated_user.py
  • cognee/tests/test_search_db.py
  • cognee/tests/unit/modules/graph/cognee_graph_elements_test.py
  • cognee/tests/unit/modules/graph/cognee_graph_test.py
  • cognee/tests/unit/modules/retrieval/chunks_retriever_test.py
  • cognee/tests/unit/modules/retrieval/graph_completion_retriever_context_extension_test.py
  • cognee/tests/unit/modules/retrieval/graph_completion_retriever_cot_test.py
  • cognee/tests/unit/modules/retrieval/graph_completion_retriever_test.py
  • cognee/tests/unit/modules/retrieval/rag_completion_retriever_test.py
  • cognee/tests/unit/modules/retrieval/summaries_retriever_test.py
  • cognee/tests/unit/modules/retrieval/temporal_retriever_test.py
  • cognee/tests/unit/modules/retrieval/test_brute_force_triplet_search.py
  • cognee/tests/unit/modules/retrieval/test_node_edge_vector_search.py
  • cognee/tests/unit/modules/retrieval/triplet_retriever_test.py
  • cognee/tests/unit/modules/users/test_conditional_authentication.py

三元组嵌入模型将图关系表示为可嵌入的文本向量,从而支持对知识图谱进行关系感知的语义搜索。该模型通过将源节点、关系和目标节点信息组合成一个单一的文本表示,将图边转换为可搜索的数据点(DataPoint),然后可以通过向量相似度进行嵌入和检索。

有关通用数据点模型和图结构的信息,请参见8.1 核心数据模型。有关使用三元组的搜索策略,请参见4.2 基于图的搜索

概述

三元组是一种专门化的表示形式,它封装了单个图边及其源节点和目标节点信息。与表示单个文档或片段的传统向量嵌入不同,三元组嵌入捕获了实体之间关系的语义含义。

三元组模型支持以下功能:

  • 对知识图谱进行关系感知的语义搜索。
  • 在边上(而非仅节点上)进行向量相似度匹配。
  • 使用结构化关系信息丰富大语言模型(LLM)的上下文。
  • 通过嵌入相似度引导图遍历。

来源: cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46cognee/modules/graph/cognee_graph/CogneeGraphElements.py:108-115

三元组搜索与检索

基于三元组的检索核心是brute_force_triplet_search逻辑,它根据语义相似度编排相关图边的发现过程。

架构流程:从自然语言到图三元组

下图说明了自然语言查询如何映射到特定的代码实体和图结构,以检索三元组。

标题:三元组检索架构

Cognee · 架构流程:从自然语言到图三元组 · 图 1
Cognee · 架构流程:从自然语言到图三元组 · 图 1

来源: cognee/modules/retrieval/graph_completion_retriever.py:101-136cognee/modules/retrieval/utils/brute_force_triplet_search.py:18-20cognee/modules/retrieval/utils/brute_force_triplet_search.py:49-61cognee/modules/graph/cognee_graph/CogneeGraph.py:18-40

三元组重要性评分

当检索到三元组时,系统不仅会基于向量相似度返回它们。Cognee 在CogneeGraph和检索工具中应用了一种重要性评分机制,该机制会考虑以下因素:

  1. 向量距离:通过NodeEdgeVectorSearch检索到的与用户查询的相似度 cognee/modules/retrieval/utils/node_edge_vector_search.py:13-18
  2. 三元组距离惩罚:存储在CogneeGraph中的一个乘数(默认值为 6.5),应用于距离以归一化重要性 cognee/modules/graph/cognee_graph/CogneeGraph.py:38-38
  3. 反馈影响:根据通过feedback_weight属性跟踪的历史用户交互来调整分数 cognee/modules/retrieval/utils/brute_force_triplet_search.py:69-73

来源: cognee/modules/retrieval/utils/brute_force_triplet_search.py:119-150cognee/modules/graph/cognee_graph/CogneeGraph.py:33-40cognee/modules/graph/cognee_graph/CogneeGraphElements.py:57-65

实现细节

三元组创建与记忆片段

三元组的创建涉及将图数据投影到CogneeGraph实例中,这通常被称为"记忆片段"。该片段是一个与当前查询上下文相关的子图,通过project_graph_from_dbproject_neighborhood_from_db进行填充。

标题:三元组数据流

Cognee · 三元组创建与记忆片段 · 图 2
Cognee · 三元组创建与记忆片段 · 图 2

来源: cognee/modules/graph/cognee_graph/CogneeGraph.py:162-180cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46cognee/modules/graph/cognee_graph/CogneeGraphElements.py:108-115

关系感知嵌入管线

系统在cognify过程中或通过显式调用create_triplet_embeddings来生成三元组的嵌入向量。

  1. 提取:使用get_graph_dataget_id_filtered_graph_data从图数据库中获取边 cognee/modules/graph/cognee_graph/CogneeGraph.py:123-133
  2. 格式化format_triplets函数将Edge及其连接的Node属性转换为字符串 cognee/modules/retrieval/utils/brute_force_triplet_search.py:29-46
  3. 索引:格式化后的字符串被嵌入并保存到向量数据库的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-91cognee/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-40cognee/modules/retrieval/graph_completion_cot_retriever.py:36-50cognee/modules/retrieval/graph_completion_context_extension_retriever.py:14-18cognee/modules/retrieval/temporal_retriever.py:19-33