昨天手动完成知识图谱数据的系列操作,今天借助 Docker 与 Docker Compose 实现批量化、简化的数据处理流程。
本系列旨在将数据导入知识图谱,进而构建 RAG 应用。
知识图谱质量决定 RAG 应用能力,此前手动创建点和边效率低、易出错,企业数据量大时建模生产效率极低,所以引入 ETL 管道很有必要。
下面对比手动与 ETL 管道两种方式:
系列实践安排如下:
day1:数据处理,转为知识图谱标准数据。
day2:构建知识图谱,存入 Neo4J。
day3:企业批量创建,工程化处理知识数据(本篇)。
day4:深入学习 langchain 核心。
day5:与 GraphRAG 融合,构建 kg + rag 应用。
前言
今日实操让 LLM 生成公司多方面数据,此前医疗数据庞大且格式单一,本次数据更复杂多样。通过创建 Dockerfile 代码,实现数据自动加载、清洗、合并及导入,执行docker - compose up -- build即可。
这里不深入原理,直接实操,内容涵盖:
数据准备及前置工作。
代码及背后原理。
运用 Cypher 操作 neo4j。
数据准备及前置工作
需电脑安装并启动 docker。
数据准备
开始前要在 neo4j 清空已有数据库,不会操作可回顾昨天内容。本次准备企业日常 csv 格式数据,也可用自己公司数据实操。
代码及背后原理
操作过程
进入工作目录:cd app。
下载 Python 镜像:docker pull python:3.11 - slim。
执行任务:docker - compose up -- build。
代码工作流程
加载 dockerfile + env
:执行docker - compose up -- build后,docker 读取.yml 配置文件,加载 dockerfile 和.env 环境变量,环境变量含数据库连接、文件路径等关键信息,若未加载,打包镜像时无法确定路径和文件。
打包独立 docker 镜像
:Dockerfile 定义容器镜像构建步骤,示例如下:
运行代码
通过 sh 脚本python3 ETL_pipelines/main_etl.py运行。
核心代码
读取合并 csv 文件
从产品、类别、供应商 CSV 文件读取数据,基于特定列合并,清理缺失值。
导入 neo4j
在 Neo4j 创建产品节点,合并类别和供应商节点,建立关系。
插入关系与边
导入订单相关数据,创建并合并多类节点和关系,关联员工与管理者。
代码在独立 docker 镜像运行,避免依赖冲突,日后更新修改配置文件即可。
运用 Cypher 操作 neo4j
Cypher 是 Neo4j 图形查询语言,类似 SQL,容易学习。常用语句示例:
控制结果数量
MATCH (o: Order) RETURN o LIMIT 10;,最多返回 10 个订单节点。
查询特定节点
MATCH (o: Order) WHERE o.orderID = 10249 RETURN o;,查询编号 10249 的订单节点。
查询关联数据
MATCH (s: Shipper)<-[sr: SHIPPED_BY ]-(o: Order{orderID: 10249})-[cr: ORDERED_BY]->(c: Customer) RETURN s, sr, o, c, cr;,查询与 10249 订单相关的发货人和客户及关系。
查询深度关联
MATCH (o: Order)-[r]-(n) WHERE o.orderID = 10249 RETURN o, r, n;,查询与 10249 订单节点相连的所有节点和关系。
更多操作可参考官方文档,节点和关系包括客户、订单、员工等及它们之间的创建、包含等关联。明天将实体图谱接入 langchain 构建 RAG 应用。
领取专属 10元无门槛券
私享最新 技术干货