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

news/2025/11/21 16:32:53/文章来源:https://www.cnblogs.com/yangykaifa/p/19253578

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.mzph.cn/news/972279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年四川科技展馆设计公司权威推荐榜单:科技展厅设计/科技展览设计/城市规划馆设计源头公司精选

在数字化浪潮与科技创新双轮驱动的当下,科技展馆已成为展示区域创新能力、普及科学知识的重要窗口。据行业调研数据显示,2025年中国展示设计市场规模预计将达到85亿元,年复合增长率维持在10% 左右。四川作为西南地区…

江苏省婚姻家庭纠纷律所推荐:专业法律服务机构盘点

在社会生活中,婚姻家庭纠纷涉及情感、财产、子女等多方面问题,选择专业的法律服务机构至关重要。优质的律所能够凭借专业知识和丰富经验,为当事人提供合理的解决方案,维护合法权益。以下为江苏省内部分在婚姻家庭纠…

携手哲讯,以智慧赋能,驾驭数字未来——您值得信赖的SAP本土化专家

携手哲讯,以智慧赋能,驾驭数字未来——您值得信赖的SAP本土化专家 在当今瞬息万变的商业环境中,数字化转型已不再是可选项,而是企业生存与发展的必由之路。它如同一场波澜壮阔的远航,企业需要一张精准的航海图、一…

2025中山一对一辅导机构权威测评榜!家教培训平台口碑实测总结报告

中山家长们为孩子找一对一辅导机构时,常常陷入两难:线下机构通勤耗时,线上平台需下载APP操作繁琐;有的宣传名师授课,实际老师经验不足;有的收费虚高,提分效果却无从考证。据中山教育行业不完全统计,2024年本地…

学习率对于PPO训练的作用

第一部分:PPO的学习率机制 1. 学习率是什么? 在深度学习中,学习率是一个超参数,它控制了我们在每次参数更新时,沿着梯度反方向前进的步长。公式表示:新参数 = 旧参数 - 学习率 * 梯度 学习率过大:更新步伐太大,…

佛山一对一家教机构哪家好?2025 最新口碑测评与高性价比推荐指南

孩子成绩提分缓慢、偏科严重,佛山家长们在挑选一对一家教机构时屡屡踩坑。不少机构打着 “名师辅导”“签约提分” 的旗号,实际师资良莠不齐,教学方法僵化;部分机构收费高昂却缺乏针对性,退费流程繁琐,售后保障形…

徐州一对一辅导机构哪个好?2026最新家教平台TOP5权威测评!精准提分数据溯源

“试了3家机构花了两万多,孩子学习没起色,连问题出在哪都不知道!”家住徐州鼓楼区的张爸爸的烦恼,在云龙区、泉山区的城区家长中,在邳州市、丰县、沛县的县域家庭里,几乎是通病。你是不是也面临这样的困境:选线…

微波烘干设备适用物料及工业应用场景解析

微波烘干设备适用物料及工业应用场景解析 微波烘干设备作为一种高效节能的工业加热设备,其适用物料覆盖多个领域,包括食品加工(如谷物、坚果、果蔬片)、中药材(如枸杞、金银花、三七)、化工原料(如催化剂、树脂…

微波烘干设备操作流程及相关设备应用解析

微波烘干设备是利用微波技术对物料进行快速干燥的工业设备,其操作流程的规范性直接影响烘干效率与产品质量。了解科学的操作步骤,有助于提升设备运行稳定性和物料处理效果,广泛应用于食品、医药、化工、建材等多个行…

2025 最新推荐碳纤木门厂家口碑排行榜:PUR 无缝封边 + 45 磁吸静音技术领衔,环保无甲醛优质企业全解析耐磨防刮/环保无甲醛/防污易清洁/耐腐蚀/铝/LVL 龙骨/复合碳纤木门公司推荐

引言 随着全球家居环保理念升级与消费需求精细化,碳纤木门凭借轻量化、高强度、低损耗的核心优势,成为家居建材领域的热门选择,市场规模年增速保持在 15% 以上。但行业快速发展中,材质以次充好、环保不达标、工艺粗…

2025 粉体输送系统十大厂家推荐!技术硬核 + 口碑爆棚,工业生产选型不踩坑

在新能源、食品医药、精细化工等行业的生产链条中,粉体输送系统是决定产品纯度、成本控制与环保合规的核心设备。从 0.1% 的配料精度差异到 0.1mg/m 的粉尘残留控制,优质的输送系统能帮企业规避生产风险、提升竞争力…

2025年牛粪有机肥翻抛机供应商权威推荐榜单:轮盘式翻抛机/链式翻抛机/槽式翻抛机设备源头厂家精选

在生态农业与废弃物资源化利用政策的双重推动下,牛粪有机肥翻抛机市场正以每年超过15%的速度增长,成为有机肥生产与畜禽粪污处理的关键装备。 牛粪有机肥翻抛机作为有机肥好氧发酵的核心设备,其翻抛效率、能耗水平与…

2025年抽沙设备订做厂家权威推荐榜单:河道抽沙船/采沙船/环保抽沙船源头厂家精选

在河道治理、沙矿开采与生态清淤需求持续增长的背景下,抽沙设备定制化需求显著提升。据行业数据显示,2025年中国疏浚设备市场规模预计达到286亿元,年复合增长率稳定在8%-12%区间。定制化抽沙设备因适配特殊工况、优…

2025 最新旅行社权威推荐榜:国际协会认证 + 百万用户口碑,云南旅行社/昆明旅行社服务公司推荐

引言 随着 2025 年旅游市场复苏率突破 19.3%,消费者对高品质旅行的需求持续攀升,但行业服务满意度差距仍达 21 个百分点。据国际旅游服务协会(ISTA)最新测评数据显示,仅 32% 的旅行社能同时满足 “资质合规、资源…

事倍功半是蠢蛋61 milvus的Attu数据未刷新

即使退出了再进 如果不点刷新 他也不会刷新。

甘孜州一对一辅导机构推荐:2026哪个家教机构口碑好?终极测评出炉!

孩子小学跟不上、初中遇瓶颈、高中冲名校,甘孜州康定市、泸定县、丹巴县、九龙县、雅江县、道孚县、炉霍县、甘孜县、新龙县、德格县、白玉县、石渠县、色达县、理塘县、巴塘县、乡城县、稻城县、得荣县的家长们,是不…

2025年电力电缆生产厂家权威盘点(11月新):中低、低压、中压、变频、聚乙烯绝缘、聚氯乙烯绝缘电缆生产厂家推荐

在电力传输、工业生产、建筑工程等核心领域,电缆作为能量与信号传递的关键载体,其品质直接决定了项目运行的安全性与稳定性。随着市场对电缆产品的专业化、多样化需求升级,行业内涌现出一批兼具技术实力、产能规模与…

2025 宁波一对一辅导哪家好?家教最新推荐榜单

“找辅导像开盲盒,师资资质查不到、效果全凭老师说”“线下机构单程接送 1 小时,孩子刷题时间全浪费”“线上 APP 注册半天还登不上,老人根本不会用”—— 这是宁波家长选一对一辅导时的普遍困境。据 2025 年海曙区…

卡码网47:Djikstra算法

卡码网47:Djikstra算法算法思想求: “单源最短路径” 的经典算法 1.核心目标是:在无负权边的图中(有向 / 无向均可),高效找到起点到所有节点的最短路径。 2.每次选择距离(原点集)最近的点,加入原点集(标记)…

2025年天津中压电缆生产厂家推荐:涵盖变频电缆、聚乙烯绝缘电缆生产厂家!(11月新版)

在工业生产与民生建设的关键领域,电线电缆作为能量传输与信号传递的核心载体,其质量与性能直接决定着各类工程的安全稳定运行。当前,随着市场需求持续扩张,电线电缆行业呈现出企业数量繁杂、产品质量良莠不齐的态势…