GraphRAG + Ollama + Groq 构建知识库 续篇 利用neo4j显示知识库

GraphRAG + Ollama + Groq 构建知识库

在上一篇文章中,我们详细介绍了如何创建一个知识库。尽管知识库已经建立,但其内容的可视化展示尚未实现。我们无法直接看到知识库中的数据,也就无法判断这些数据是否符合我们的预期。为了解决这个问题,本文将向你展示如何使用Neo4j这一强大的图形数据库,将知识库中的数据以图形化的形式呈现出来。

0. 环境准备
pip install yfiles_jupyter_graphs --quiet

确保安装 Docker 和 Docker Compose
docker --version
docker-compose --version
如果没有安装,请根据您的操作系统访问 Docker 官方网站 进行安装。https://docs.docker.com/get-started/get-docker/

要使用您提供的 Docker Compose 配置文件来启动 Neo4j 数据库,请按照以下步骤操作:

1. 确保安装 Docker 和 Docker Compose
  • 确保您的系统上已安装 Docker 和 Docker Compose。您可以在终端中运行以下命令以检查是否已安装:
bash 复制代码
docker --version
docker-compose --version

如果没有安装,请根据您的操作系统访问 Docker 官方网站 进行安装。

window 启动docker desktop

2. 创建项目目录

在您的工作目录中,创建一个新的文件夹来存放 Neo4j 数据库相关的文件:

bash 复制代码
mkdir neo4j_project # 此目录和前回文章中的graphRAG目录是平级的
cd neo4j_project
3. 创建必要的子目录

根据您的配置,您需要创建以下目录:

bash 复制代码
mkdir -p data\neo4j logs import
4. 创建 docker-compose.yml 文件

neo4j_project 目录中创建一个名为 docker-compose.yml 的文件,并将您提供的内容粘贴到该文件中:

yaml 复制代码
version: "3.0"
services:
  neo4j:
    image: "neo4j:5.24-community"
    restart: always
    ports:
      - "7474:7474"
      - "7687:7687"
    volumes:
      - ./data/neo4j:/data
      - ./logs:/var/lib/neo4j/logs
      - ./import:/var/lib/neo4j/import
    environment:
      - NEO4J_AUTH=neo4j/123456

您可以使用文本编辑器(如 VS Code、Notepad++ 或任何其他)来创建和编辑此文件。

5. 启动 Neo4j 服务

在终端中,确保您仍在 neo4j_project 目录下,然后运行以下命令以启动 Neo4j 服务:

bash 复制代码
docker-compose up -d neo4j
  • -d 参数表示在后台运行容器。
6. 访问 Neo4j 浏览器

一旦服务启动,您可以通过浏览器访问 Neo4j 浏览器,通常地址为:

http://localhost:7474/browser/

使用用户名 neo4j 和密码 123456 登录。

7. 验证服务状态

如果需要查看正在运行的容器,可以使用以下命令:

bash 复制代码
docker-compose ps

这将显示所有由 Docker Compose 管理的服务及其状态。

通过以上步骤,您应该能够成功搭建并运行 Neo4j 图数据库。如果在过程中遇到任何问题,请检查 Docker 日志以获取更多信息:

bash 复制代码
docker-compose logs neo4j

这将帮助您诊断可能出现的问题。

8.导入数据
8.1 把前回文章中,graphRAG生成的parquet文件,转换成csv文件

display_graph\parquet转csv.py

import os
import pandas as pd

# 定义一个函数,用于处理parquet文件
def process_parquet_files(path):
    # 遍历指定路径下的所有文件
    for root, dirs, files in os.walk(path):
        for file in files:
            # 如果文件以.parquet结尾,则进行处理
            if file.endswith('.parquet'):
                # 获取文件的完整路径
                file_path = os.path.join(root, file)
                # 读取parquet文件
                df = pd.read_parquet(file_path)
                # 打印正在处理的文件路径
                print(f"Processing file: {file_path}")
                # 定义输出文件的路径
                out_path = os.path.join(root, r'.\display_graph\neo4j_project\import', str(file).replace('parquet', 'csv'))
                # 将parquet文件转换为csv文件
                df.to_csv(out_path, index=False)

# 指定要处理的文件路径,graphRAG生成的parquet文件目录
path = r'.\graphRAG\output\20241012-003213\artifacts'
# 调用函数处理文件
process_parquet_files(path)
8.2 导入csv文件到neo4j,cypher语句批量导入csv文件。

节点导入:

LOAD CSV WITH HEADERS FROM 'file:///create_final_entities.csv' AS row
CREATE (n:PERSON)
SET 
    n.id = row.id,
    n.name = row.name,
    n.type = row.type,
    n.description = row.description,
    n.humanReadableId = row.human_readable_id;

关系导入:

LOAD CSV WITH HEADERS FROM 'file:///create_final_relationships.csv' AS row
MATCH (s:PERSON { name: toString(row.source) })
MATCH (t:PERSON { name: toString(row.target) }) 
CREATE (t)-[r:REL]->(s)
SET 
    r.weight = row.weight, 
    r.description = row.description,
    r.textUnitIds = split(row.text_unit_ids, ','), 
    r.id = row.id,
    r.humanReadableId = row.human_readable_id,
    r.sourceDegree = toInteger(row.source_degree), 
    r.targetDegree = toInteger(row.target_degree), 
    r.rank = toInteger(row.rank);

我们的每一步进步,都是站在前人的肩膀上取得的。正如饮水思源,我们在享受成果的同时,不应忘记那些辛勤挖掘井泉的人。前人种下树木,后人得以乘凉。我们应带着感恩的心,继续传承和发扬无私分享的精神。

参照连接

https://blog.csdn.net/Johntill/article/details/142380487

https://www.cnblogs.com/222wan/p/18212878

相关推荐
UMS攸信技术1 小时前
汽车电子行业数字化转型的实践与探索——以盈趣汽车电子为例
人工智能·汽车
测试老哥1 小时前
Python+Selenium+Pytest+POM自动化测试框架封装(完整版)
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
ws2019071 小时前
聚焦汽车智能化与电动化︱AUTO TECH 2025 华南展,以展带会,已全面启动,与您相约11月广州!
大数据·人工智能·汽车
Ws_1 小时前
蓝桥杯 python day01 第一题
开发语言·python·蓝桥杯
神雕大侠mu2 小时前
函数式接口与回调函数实践
开发语言·python
堇舟2 小时前
斯皮尔曼相关(Spearman correlation)系数
人工智能·算法·机器学习
爱写代码的小朋友2 小时前
使用 OpenCV 进行人脸检测
人工智能·opencv·计算机视觉
Cici_ovo3 小时前
摄像头点击器常见问题——摄像头视窗打开慢
人工智能·单片机·嵌入式硬件·物联网·计算机视觉·硬件工程
萧鼎3 小时前
【Python】高效数据处理:使用Dask处理大规模数据
开发语言·python
互联网杂货铺3 小时前
Python测试框架—pytest详解
自动化测试·软件测试·python·测试工具·测试用例·pytest·1024程序员节