lemooljiang avatar

langchain对neo4j进行交互,写入和查询数据 / ai #53

lemooljiang

Published: 18 Jun 2026 › Updated: 18 Jun 2026

langchain对neo4j进行交互,写入和查询数据 / ai #53

对neo4j有了基本了解,就可以上手实操啰。这里采用langchain的集成方案,写入和查询都集成得很好,几条命令就可搞定。

写入数据

# 安装包
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install langchain-openai langchain-community langchain-experimental
pip install langchain-neo4j

from langchain_core.documents import Document
from dotenv import dotenv_values
from langchain_openai import ChatOpenAI
from langchain_neo4j import Neo4jGraph
from langchain_experimental.graph_transformers import LLMGraphTransformer


env_vars = dotenv_values('.env')
OPENAI_KEY = env_vars['OPENAI_API_KEY'] 
OPENAI_BASE_URL = env_vars['OPENAI_API_BASE'] 


# 打开文件,并赋予读取模式 'r' 
def readTxt():
    with open('./ball.txt', 'r', encoding='gbk') as file:
        content = file.read()
        documents = [Document(page_content=content)]
        #print(123, documents)
        return documents

# 创建图数据库实例
graph = Neo4jGraph(url='neo4j+s://a2f9xcxx.databases.neo4j.io', 
      username="a2f9xxxx", 
      password="gh7EJn9Ik1xxxxx.xx",
      database="a2f9xxxx"
)  

graph_llm = ChatOpenAI(temperature=0, model_name="gpt-5.4-mini", api_key=OPENAI_KEY, base_url=OPENAI_BASE_URL)

# 图转换器配置
graph_transformer = LLMGraphTransformer(llm=graph_llm)  #可以使用默认设置
"""
#或者是添加节点和关系边
graph_transformer = LLMGraphTransformer(
    llm=graph_llm,
    allowed_nodes=["", "", "16"],    # 可以自定义节点
    allowed_relationships=["", "", "", ""],  # 可以自定义关系
)
"""

documents = readTxt()
graph_documents = graph_transformer.convert_to_graph_documents(documents)
graph.add_graph_documents(graph_documents)  

print(f"Graph documents: {len(graph_documents)}")
print(f"Nodes from 1st graph doc:{graph_documents[0].nodes}")
print(f"Relationships from 1st graph doc:{graph_documents[0].relationships}")

neo4j3.jpg

neo4j4.jpg

写入后的数据如图所示

以世界杯的数据来作测试。使用了langchain的默认配置。从图中可以看出,langchain可以很好地默认提取出节点和关系,快速写入图数据库中。当然也可以定义好节点和边的关系,可操作性可能会更好些。

查询数据

from langchain_core.documents import Document
from dotenv import dotenv_values
from langchain_openai import ChatOpenAI
from langchain_neo4j import Neo4jGraph
from langchain_experimental.graph_transformers import LLMGraphTransformer
from langchain_neo4j import GraphCypherQAChain


env_vars = dotenv_values('.env')
OPENAI_KEY = env_vars['OPENAI_API_KEY'] 
OPENAI_BASE_URL = env_vars['OPENAI_API_BASE'] 


# 创建图数据库实例
graph = Neo4jGraph(url='neo4j+s://a2f9xcxx.databases.neo4j.io', 
      username="a2f9xxxx", 
      password="gh7EJn9Ik1xxxxx.xx",
      database="a2f9xxxx"
)

graph_llm = ChatOpenAI(temperature=0, model_name="gpt-5.4-mini", api_key=OPENAI_KEY, base_url=OPENAI_BASE_URL)

cypher_chain = GraphCypherQAChain.from_llm(
    graph=graph,
    cypher_llm=graph_llm,
    qa_llm=graph_llm,
    validate_cypher=True, 
    verbose=True,
    allow_dangerous_requests=True
)

response = cypher_chain.invoke({"query": "I组有哪些队"})
# response = cypher_chain.invoke({"query": "美国在哪个小组"})
print(response["result"])
"""
> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (g:Group {id: 'I组'})-[:HAS_TEAM]->(c:Country)
RETURN c.id AS team
Full Context:
[{'team': '法国'}, {'team': '塞内加尔'}, {'team': '伊拉克'}, {'team': '挪威'}]
> Finished chain.
I组有法国、塞内加尔、伊拉克和挪威。
"""

附测试数据:

20264812A-L西

:
1. 西
2. 

A-L
- A西
- B
- C西
- D
- E
- F
- G西
- H西
- I
- J
- K
- L


- 124832
- 32-16-8--
- 10439612720
- 2026

Leave langchain对neo4j进行交互,写入和查询数据 / ai #53 to:

Written by

Designer , Poet , Technology enthusiasts

Read more #cn posts


Best Posts From lemooljiang

We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From lemooljiang