使用Neo4j和LangChain集成非结构化和图知识增强QA

使用Neo4j和LangChain集成非结构化和图知识增强QA

前言

本文是对项目使用Neo4j和LangChain集成非结构化和图知识增强QA的复现。该项目主要目的是借助向量索引加快构建知识图谱。

前置知识

LangChain

LangChain加速大语言模型应用开发的套件,其集成了本地数据加载,LLM模型的调用等,方便LLM对外部数据源的调用,方便进行与LLM的交互。对于LLM的使用,可参考LangChain中文入门教程.

Neo4j

Neo4j是一个高性能的图数据库,它将结构化数据存储在网络上而不是表中。关于Neo4j的使用,可参考Neo4j官方文档.

Mistral

Mistral是一个较新的大语言模型,尤其是mistral-7B,是目前综合性能最好的7B模型。关于Mistral的使用,可参考Mistral官方文档.

复现流程

1. 安装依赖

1
pip install langchain openai wikipedia tiktoken neo4j python-dotenv transformers

2. 安装Neo4j数据库

参考neo4j官方文档Debian-based distributions。Neo4J的dep安装包可从Neo4j官网下载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装JDK17
sudo apt install openjdk-17-jdk-headless

# 添加Neo4j的源
wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
echo 'deb https://debian.neo4j.com stable 4.3' | sudo tee -a /etc/apt/sources.list.d/neo4j.list
sudo apt-get update

# 安装neo4j的dep文件
dpkg -i neo4j_5.14.0_all.deb

# 启动neo4j
neo4j start

# 注意,安装neo4j的dep文件时,可能会遇到依赖缺失的问题,执行下述命令补全依赖即可
sudo apt --fix-broken install

# 修改默认密码
neo4j-admin dbms set-initial-password pwdofneo4j

从非结构化数据构建知识图谱

三个问题,参见Neo4J开发人员博客

  1. Extracting nodes and relationships
  2. Entity disambiguation
  3. Importing into Neo4j

Extracting nodes and relationships

inout text分割成适合context window大小的chunk,输入LLM,使其提取出entitiesrelations,并按一定格式输出,每个chunk与前一个chunk设置有重叠部分,以保证entitiesrelations的完整性。为了保持跨块不同类型实体的标记的一致性,向LLM提供了在先前块中提取的节点类型列表。

Entity disambiguation

entities按类型分组,将每一组分别提供给LLM,借助LLM消除重复实体并合并属性。

Importing into Neo4j

将LLM输出的entitiesrelations转为CSV格式,借助neo4j的LOAD CSV命令导入到neo4j中。


使用Neo4j和LangChain集成非结构化和图知识增强QA
https://wenzhaoabc.github.io/llm/mistral-langchain-neo4j/
作者
wenzhaoabc
发布于
2023年12月3日
许可协议