对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}")
写入后的数据如图所示
以世界杯的数据来作测试。使用了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组有法国、塞内加尔、伊拉克和挪威。
"""
附测试数据:
2026年世界杯共有48支国家队参赛,首次扩军,分为12个小组(A-L组),由美国、加拿大和墨西哥联合主办。
东道主与首次参赛球队:
1. 东道主:美国、加拿大、墨西哥
2. 首次晋级的新军:乌兹别克斯坦、约旦、佛得角、库拉索
小组分组(A-L组)
- A组:墨西哥、南非、韩国、捷克
- B组:加拿大、波黑、卡塔尔、瑞士
- C组:巴西、摩洛哥、海地、苏格兰
- D组:美国、巴拉圭、澳大利亚、土耳其
- E组:德国、库拉索、科特迪瓦、厄瓜多尔
- F组:荷兰、日本、瑞典、突尼斯
- G组:比利时、埃及、伊朗、新西兰
- H组:西班牙、佛得角、沙特阿拉伯、乌拉圭
- I组:法国、塞内加尔、伊拉克、挪威
- J组:阿根廷、阿尔及利亚、奥地利、约旦
- K组:葡萄牙、刚果(金)、乌兹别克斯坦、哥伦比亚
- L组:英格兰、克罗地亚、加纳、巴拿马
赛制与晋级规则
- 小组赛:12个小组,每组4队,前两名及成绩最好的8个第三名晋级32强淘汰赛
- 淘汰赛:32强-16强-8强-半决赛-决赛
- 总比赛场次:104场,赛事周期39天(6月12日开赛,7月20日决赛)
- 2026年世界杯不仅是历史上规模最大的一届赛事,也是全球足球版图变化最明显的一届,涵盖传统豪门与首次晋级的新军,呈现真正的全球足球盛会