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

相关推荐
WeiJingYu.几秒前
机器学习——决策树
人工智能·决策树·机器学习
励志成为糕手11 分钟前
动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)
人工智能·计算机视觉·目标跟踪
这里有鱼汤15 分钟前
用卡尔曼滤波器计算个股票相对大盘的相关性——β值
后端·python
m0_5587901424 分钟前
GPU算力平台评测
服务器·人工智能·python·深度学习·神经网络·目标检测·机器学习
2501_9247319933 分钟前
驾驶场景玩手机识别:陌讯行为特征融合算法误检率↓76% 实战解析
开发语言·人工智能·算法·目标检测·智能手机
Kyln.Wu1 小时前
【python实用小脚本-169】『Python』所见即所得 Markdown 编辑器:写完即出网页预览——告别“写完→保存→刷新”三连
开发语言·python·编辑器
爱掉发的小李1 小时前
Linux 环境下 Docker 安装与简单使用指南
java·linux·运维·c++·python·docker·php
数据知道1 小时前
机器翻译的分类:规则式、统计式、神经式MT的核心区别
人工智能·分类·机器翻译
siliconstorm.ai1 小时前
AWS 算力瓶颈背后:生成式 AI 的基础设施战争
大数据·人工智能·chatgpt
paid槮1 小时前
机器学习——逻辑回归
人工智能·机器学习·逻辑回归