当前位置: 首页 > news >正文

如何结合langchain、neo4j搭建关联检索问答

langchain时llm应用最流行的开发工具之一,neo4j时应用最广泛的图数据库管理工具。

这里尝试结合langchain和neo4j,示例关联检索的实现过程。

以下内容中的测试例和代码,整理和修改自网络资料。

1 工具安装

这里安装neo4j、langchain工具包等必要工具。

1.1 neo4j安装

为简化操作这里采用docker安装neo4j,并假设docker和neo4j已经安装。

安装过程参考参考如下链接

neo4j安装

https://blog.csdn.net/liliang199/article/details/153691513

apoc安装

https://blog.csdn.net/liliang199/article/details/153693401

1.2 langchain包安装

基于conda构建langchain的测试环境,安装neo4j相关依赖包。

包括cmake、ninja、rust、gcc/g++、tiktoken等。

conda create -n langchain python=3.10

conda activate langchain

conda install cmake

conda install ninja

conda install -c conda-forge gcc=12 gxx=12

conda install conda-forge::rust

pip install tiktoken  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install langchain-neo4j -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install langchain langchain-openai langgraph  -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3 ollama安装

建议安装如下版本,避免版本之间的冲突。

 pip install langchain-core==0.3.78 -i https://pypi.tuna.tsinghua.edu.cn/simple
 pip install langchain_ollama==0.3.10  -i https://pypi.tuna.tsinghua.edu.cn/simple

2 数据准备

2.1 设置neo4j连接

neo4j连接信息以环境变量的方式设置,代码示例如下。

import os
os.environ["NEO4J_URI"] = "bolt://localhost:7687"
os.environ["NEO4J_USERNAME"] = "neo4j"
os.environ["NEO4J_PASSWORD"] = "12345678"

2.2 导入数据

测试数据来源于blog-datasets的movies_small.csv,连接如下。

https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/movies/movies_small.csv

由于github访问受限,下载movies_small.csv后使用minso创建一个本地的下载链接,假设为

http://host_ip:9000/tomasonjo.blog-datasets/movies/movies_small.csv

minio和neo4j是docker分别部署的,其中ip需要设置为宿主机ip,因为neo4j容器不能直接访问minio容器的链接。

from langchain_neo4j import Neo4jGraph
graph = Neo4jGraph()
# Import movie information
movies_query = """
LOAD CSV WITH HEADERS FROM
'http://host_ip:9000/tomasonjo.blog-datasets/movies/movies_small.csv'
AS row
MERGE (m:Movie {id:row.movieId})
SET m.released = date(row.released),m.title = row.title,m.imdbRating = toFloat(row.imdbRating)
FOREACH (director in split(row.director, '|') |MERGE (p:Person {name:trim(director)})MERGE (p)-[:DIRECTED]->(m))
FOREACH (actor in split(row.actors, '|') |MERGE (p:Person {name:trim(actor)})MERGE (p)-[:ACTED_IN]->(m))
FOREACH (genre in split(row.genres, '|') |MERGE (g:Genre {name:trim(genre)})MERGE (m)-[:IN_GENRE]->(g))
"""
graph.query(movies_query)

3 功能验证

这里示例基于langchain+neo4j的基础关联检索。

3.1 展示图schema

通过以下代码,输出图graph schema。

graph.refresh_schema()
print(graph.schema)

graph schema如下所示

Node properties:
Person {name: STRING, age: INTEGER}
Movie {imdbRating: FLOAT, id: STRING, released: DATE, title: STRING}
Genre {name: STRING}
Relationship properties:

The relationships:
(:Person)-[:knows]->(:Person)
(:Person)-[:DIRECTED]->(:Movie)
(:Person)-[:ACTED_IN]->(:Movie)
(:Movie)-[:IN_GENRE]->(:Genre)

将enhanced_schema设置为True,表示输出propertiy,获取更多的scheme信息。

enhanced_graph = Neo4jGraph(enhanced_schema=True)
print(enhanced_graph.schema)

输出如下

Node properties:
- **Person**
  - `name`: STRING Example: "张三"
  - `age`: INTEGER Min: 30, Max: 30
- **Movie**
  - `imdbRating`: FLOAT Min: 2.4, Max: 9.3
  - `id`: STRING Example: "1"
  - `released`: DATE Min: 1964-12-16, Max: 1996-09-15
  - `title`: STRING Example: "Toy Story"
- **Genre**
  - `name`: STRING Example: "Adventure"
Relationship properties:

The relationships:
(:Person)-[:knows]->(:Person)
(:Person)-[:DIRECTED]->(:Movie)
(:Person)-[:ACTED_IN]->(:Movie)
(:Movie)-[:IN_GENRE]->(:Genre)

3.2 GraphQACypherChain

langchain结合graph图,回答用户问题的流程如下所示。

GraphQACypherChain接收用户问题,使用llm转化为cypher、运行cypher查询、将查询结果使用llm转化为对用户问题的回答。

以下是示例代码

import os
os.environ['OPENAI_API_KEY'] = "sk-xxxx"
os.environ['OPENAI_BASE_URL'] = "https://llm_provider/v1"
from langchain_neo4j import GraphCypherQAChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="deepseek-v3", temperature=0)
chain = GraphCypherQAChain.from_llm(graph=enhanced_graph, llm=llm, verbose=True, allow_dangerous_requests=True
)
response = chain.invoke({"query": "What was the cast of the Casino?"})
response

输出如下

> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: "Casino"})
RETURN p.name AS cast_member
Full Context:
[{'cast_member': 'Joe Pesci'}, {'cast_member': 'Robert De Niro'}, {'cast_member': 'Sharon Stone'}, {'cast_member': 'James Woods'}]

> Finished chain.
{'query': 'What was the cast of the Casino?',
 'result': 'The cast of *Casino* includes Joe Pesci, Robert De Niro, Sharon Stone, and James Woods.'}

reference

---

Getting started with Neo4j in Docker

https://neo4j.com/docs/operations-manual/current/docker/introduction/

Build a Question Answering application over a Graph Database

https://python.langchain.com/docs/tutorials/graph/

blog-datasets

https://github.com/tomasonjo/blog-datasets

使用docker搭建minio文件存储服务

https://blog.csdn.net/liliang199/article/details/153695399

http://www.gsyq.cn/news/56467.html

相关文章:

  • 2025年四川科技展馆设计公司权威推荐榜单:科技展厅设计/科技展览设计/城市规划馆设计源头公司精选
  • 学习率对于PPO训练的作用
  • 2025 最新推荐碳纤木门厂家口碑排行榜:PUR 无缝封边 + 45 磁吸静音技术领衔,环保无甲醛优质企业全解析耐磨防刮/环保无甲醛/防污易清洁/耐腐蚀/铝/LVL 龙骨/复合碳纤木门公司推荐
  • 2025年牛粪有机肥翻抛机供应商权威推荐榜单:轮盘式翻抛机/链式翻抛机/槽式翻抛机设备源头厂家精选
  • 2025年电力电缆生产厂家权威盘点(11月新):中低、低压、中压、变频、聚乙烯绝缘、聚氯乙烯绝缘电缆生产厂家推荐
  • 卡码网47:Djikstra算法
  • CF2165F Arctic Acquisition 题解
  • 2025年哈尔滨心理咨询学校权威推荐榜单:特殊教育/早教中心/口肌训练源头学校精选
  • Day30:2025年10月20日,星期一,值班,诸事皆顺。
  • 绍兴一对一家教辅导机构推荐:2025权威测评排行榜,第一个性价比最高
  • 天门一对一家教机构终极推荐:2026最新辅导机构口碑TOP榜单!真实反馈闭眼选
  • 计算机视觉:YOLO实现目标识别+目标跟踪技术 pyqt界面 OpenCV 计算机视觉 深度学习 计算机(建议收藏)✅ - 指南
  • 潜江一对一课外补习机构推荐:2026 最新教育机构天花板榜单!提分快还省钱
  • 2025恩施一对一家教机构综合推荐,提分优选:靠谱方案推荐排行榜
  • SATA接口调试问题记录
  • 镜头分辨率如何匹配工业相机的分辨率
  • 洛谷 B4410:[GESP202509 一级] 金字塔 ← 循环结构
  • CF246E bfs 序上莫队
  • 小型食品厂省心了!CLC-S22R 控温又省成本​
  • 2025 最新推荐装盒机厂家权威排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机技术创新与整线配套能力测评
  • Galera Cluster部署 - 详解
  • 模拟机问题
  • 2025年主流学习机品牌差异化分析与选购指南
  • 6667
  • 2025年铁基络合剂源头厂家权威推荐榜单:铁基催化剂/络合铁脱硫催化剂/高效脱硫剂源头厂家精选
  • 学习差的孩子适合用学习机吗?有推荐的品牌吗?​ 2025年学困生专用AI学习机评估与推荐
  • 2025年AI学习机与线下补课效果对比分析
  • FCN全卷积网络 (Fully Convolutional Network)——第一个成功地将深度学习应用于语义分割
  • 写给0-1岁的初创公司合伙人(48):运气与概率——区分“赌博”与“投资”
  • 2025年PET收缩机源头厂家权威推荐榜单:PET自动收缩机/PP收缩机/PE收缩机源头厂家精选