本体集成
本体集成
相关源文件
本章引用的主要源码文件:
cognee/api/v1/ontologies/__init__.pycognee/api/v1/ontologies/ontologies.pycognee/api/v1/ontologies/routers/__init__.pycognee/api/v1/ontologies/routers/get_ontology_router.pycognee/eval_framework/corpus_builder/task_getters/get_cascade_graph_tasks.pycognee/eval_framework/corpus_builder/task_getters/get_default_tasks_by_indices.pycognee/modules/graph/utils/expand_with_nodes_and_edges.pycognee/modules/ontology/base_ontology_resolver.pycognee/modules/ontology/get_default_ontology_resolver.pycognee/modules/ontology/matching_strategies.pycognee/modules/ontology/models.pycognee/modules/ontology/ontology_config.pycognee/modules/ontology/ontology_env_config.pycognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.pycognee/tasks/graph/extract_graph_from_data.pycognee/tasks/graph/extract_graph_from_data_v2.pycognee/tests/test_cognee_server_start.pycognee/tests/unit/api/test_ontology_endpoint.pycognee/tests/unit/eval_framework/test_get_default_tasks_by_indices.pycognee/tests/unit/modules/ontology/test_ontology_adapter.pycognee/tests/unit/tasks/graph/test_extract_graph_from_data_v2.py
Cognee 提供了一个全面的系统,用于将正式本体集成到知识图谱构建过程中。这种集成确保提取的实体和关系遵循预定义的语义结构,从而提高数据一致性并支持推理能力。
架构总览
本体系统围绕 BaseOntologyResolver 抽象构建,该抽象管理自然语言实体与正式本体定义之间的映射。默认实现 RDFLibOntologyResolver 使用 rdflib 库处理 OWL 和 RDF 文件。
自然语言到代码实体的映射
下图展示了系统在 cognify 过程中如何弥合原始文本数据与结构化本体空间之间的差距。
本体引导的提取流程
来源:cognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.py:20-25,cognee/modules/graph/utils/expand_with_nodes_and_edges.py:114-146
本体解析器
系统支持使用不同的策略将实体解析到本体。
RDFLibOntologyResolver
这是处理标准本体格式的主要实现。它支持:
- 从文件路径、类文件对象或原始字符串加载本体
cognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.py:27-53。 - 使用
rdflib解析 RDF/XML 和 OWL 格式cognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.py:55-62。 - 构建类和个体的内部查找字典,以实现快速检索
cognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.py:118-143。
匹配策略
解析器使用 MatchingStrategy 将提取的文本链接到本体术语。
FuzzyMatchingStrategy:如果未找到精确匹配,则使用字符串相似度(通过difflib)在本体中查找最佳匹配cognee/modules/ontology/matching_strategies.py:18-25。- 截断值配置:可以通过截断值参数调整模糊匹配的灵敏度
cognee/tests/unit/modules/ontology/test_ontology_adapter.py:194-198。
来源:cognee/modules/ontology/rdf_xml/RDFLibOntologyResolver.py:20-154,cognee/modules/ontology/matching_strategies.py:1-25
与 Cognify 管线的集成
本体验证发生在 cognify 工作流的图提取阶段。
integrate_chunk_graphs
此函数是提取的大语言模型(LLM)图与本体解析器相遇的中心点。
- 它遍历文档片段及其对应的提取图
cognee/tasks/graph/extract_graph_from_data.py:100-103。 - 它调用
expand_with_nodes_and_edges,并传递ontology_resolvercognee/tasks/graph/extract_graph_from_data.py:110-112。 - 匹配本体的实体被标记为
ontology_valid=Truecognee/modules/graph/utils/expand_with_nodes_and_edges.py:49-60。
数据流图
下图显示了提取数据与本体集成期间的函数调用序列。
函数执行流程
来源:cognee/tasks/graph/extract_graph_from_data.py:56-125,cognee/modules/graph/utils/expand_with_nodes_and_edges.py:110-162
本体管理 API
Cognee 提供了 REST 端点来管理每个用户的本体文件。
| 端点 | 方法 | 描述 |
|---|---|---|
/api/v1/ontologies | POST | 上传一个带有唯一 ontology_key 的 .owl 文件 cognee/api/v1/ontologies/routers/get_ontology_router.py:17-38。 |
/api/v1/ontologies | GET | 列出所有已上传的本体及其元数据 cognee/api/v1/ontologies/routers/get_ontology_router.py:116-125。 |
/api/v1/ontologies/{key} | DELETE | 从系统中移除一个本体文件 cognee/api/v1/ontologies/routers/get_ontology_router.py:83-97。 |
上传逻辑
OntologyService 处理这些文件的持久化:
- 文件存储在
data_root_directory中特定于用户的目录下cognee/api/v1/ontologies/ontologies.py:31-34。 - 元数据(文件名、大小、上传时间)存储在相同目录下的
metadata.json文件中cognee/api/v1/ontologies/ontologies.py:36-49。 - 目前 API 仅接受
.owl文件cognee/api/v1/ontologies/ontologies.py:56-57。
来源:cognee/api/v1/ontologies/ontologies.py:22-86,cognee/api/v1/ontologies/routers/get_ontology_router.py:12-141
配置
本体行为可以通过环境变量配置,或直接传递给 cognify 调用。
基于环境的设置
get_ontology_resolver_from_env 函数允许根据环境设置动态实例化解析器:
ontology_resolver:支持的值 "rdflib"cognee/modules/ontology/get_default_ontology_resolver.py:20-21。matching_strategy:支持的值 "fuzzy"cognee/modules/ontology/get_default_ontology_resolver.py:22-23。ontology_file_path:本地文件的路径或以逗号分隔的路径列表cognee/modules/ontology/get_default_ontology_resolver.py:24-26。
直接注入
使用 cognify API 时,可以以数组形式提供 ontology_key。系统会检索这些键的内容,并在管线执行期间初始化解析器 cognee/tests/test_cognee_server_start.py:158-164。
来源:cognee/modules/ontology/get_default_ontology_resolver.py:10-48,cognee/api/v1/ontologies/ontologies.py:129-157