
告别知识孤岛:用CocoIndex+LLM,轻松构建你的专属知识图谱!
CocoIndex利用LLM从文档提取关系,构建并维护Neo4j知识图谱,支持增量更新。通过定义节点和关系类型,实现数据收集、处理和知识图谱构建。
使用 CocoIndex 构建知识图谱
核心概念:
- CocoIndex 简化了知识图谱的构建和维护,支持持续的源数据更新。
- 使用 LLM (大型语言模型) 从文档中提取概念之间的关系。
两种关系类型:
- 主谓宾关系: 例如,“CocoIndex 支持增量处理”。
- 实体提及: 例如,“core/basics.mdx” 提到了
CocoIndex
和Incremental Processing
。
数据流程:
- 添加文档作为数据源: 从本地文件目录 (例如
docs/core
) 读取 Markdown 文件。 - 添加数据收集器:
document_node
:收集文档信息 (例如文件名)。entity_relationship
:收集实体关系 (主语、谓语、宾语)。entity_mention
:收集实体在文档中的提及 (例如,哪个文档提到了哪个实体)。
- 处理文档并提取摘要: 使用 LLM 提取文档的标题和摘要。
- 提取关系: 使用 LLM 从文档中提取实体关系,定义
Relationship
数据类 (包含subject
,predicate
,object
)。 - 收集关系: 将提取的关系和实体提及收集到相应的数据收集器中。
- 构建知识图谱:
- 使用 Neo4j 图数据库存储知识图谱。
- 定义节点标签 (例如
Document
,Entity
) 和主键 (例如filename
用于Document
节点)。 - 将数据从收集器导出到 Neo4j,创建节点和关系。
关键步骤详解:
- 使用
cocoindex.functions.ExtractByLlm
: 用于从文档内容中提取结构化信息 (摘要、关系)。可以通过instruction
参数指定 LLM 的提取规则。 Relationship
数据类: 用于定义知识图谱中的关系,包含subject
,predicate
,object
三个属性。建议在类级别的文档字符串中提供详细的指令,以帮助 LLM 正确提取关系。- Neo4j 节点映射:
- 如果有一个专门用于节点的收集器,可以直接将其导出到 Neo4j。
- 如果只有关系收集器,则可以从关系收集器中的特定字段映射节点。必须声明节点标签和主键字段。
cocoindex.storages.Relationships
: 用于声明如何在 Neo4j 中映射关系,包括源节点、目标节点和关系类型。
快速开始:
- 安装 PostgreSQL 和 Neo4j。
- 配置 OpenAI API 密钥 (或使用 Ollama 本地运行 LLM 模型)。
- 安装依赖:
pip install -e .
- 运行以下命令设置和更新索引:
python main.py cocoindex setup python main.py cocoindex update
- 使用 Neo4j Browser (http://localhost:7474) 浏览知识图谱。用户名:
neo4j
,密码:cocoindex
。运行 Cypher 查询MATCH p=()-->() RETURN p
查看所有关系。
可选工具:
- CocoInsight:用于故障排除和理解数据血缘关系 (免费 Beta 版)。