使用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 | |
2. 安装Neo4j数据库
参考neo4j官方文档Debian-based distributions。Neo4J的dep安装包可从Neo4j官网下载。
1 | |
从非结构化数据构建知识图谱
三个问题,参见Neo4J开发人员博客。
- Extracting nodes and relationships
- Entity disambiguation
- Importing into Neo4j
Extracting nodes and relationships
将inout text分割成适合context window大小的chunk,输入LLM,使其提取出entities和relations,并按一定格式输出,每个chunk与前一个chunk设置有重叠部分,以保证entities和relations的完整性。为了保持跨块不同类型实体的标记的一致性,向LLM提供了在先前块中提取的节点类型列表。
Entity disambiguation
将entities按类型分组,将每一组分别提供给LLM,借助LLM消除重复实体并合并属性。
Importing into Neo4j
将LLM输出的entities和relations转为CSV格式,借助neo4j的LOAD CSV命令导入到neo4j中。
使用Neo4j和LangChain集成非结构化和图知识增强QA
https://wenzhaoabc.github.io/llm/mistral-langchain-neo4j/