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