Langchain + deepseek +neo4j 构建电影知识图谱智能问答
发布于 8 天前 作者 pangguoming 20 次浏览 最后一次编辑是 7 天前 来自 LangChain

安装LangChain 依赖

pip install --upgrade --quiet  langchain langchain-community langchain-openai neo4j

安装Neo4j

https://neo4j.com/deployment-center/ 下载安装 neo4j-community-5.26.4 解压到任意目录

安装Neo4j Apoc 插件

https://github.com/neo4j/apoc/releases?page=1 下载安装apoc-5.26.6-core.jar 复制到neo4j安装目录 plugins目录下 修改Neo4j配置文件,启用Neo4j Apoc 插件:到neo4j安装目录 plugins目录下修改\conf\neo4j.conf,添加如下两行

dbms.security.procedures.unrestricted=apoc.*
dbms.security.procedures.allowlist=apoc.*

启动Neo4j

命令行到neo4j安装目录\bin下运行:

neo4j console

langchain + deepseek +neo4j 构建电影知识图谱智能问答

import getpass
import os
from langchain.chains import GraphCypherQAChain
from langchain_openai import ChatOpenAI
from langchain_community.graphs import Neo4jGraph

os.environ["OPENAI_API_KEY"] = "您的DeepSeek API 秘钥"
os.environ["NEO4J_URI"] = "bolt://localhost:7687"
os.environ["NEO4J_USERNAME"] = "neo4j"
os.environ["NEO4J_PASSWORD"] = "您的Neo4j密码"

llm = ChatOpenAI(
    model='deepseek-chat',
    base_url="https://api.deepseek.com/v1"
)

graph = Neo4jGraph()

# Import movie information

movies_query = """
LOAD CSV WITH HEADERS FROM 
'https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/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))
"""
#用Loadcsv 在线下载并构建电影知识图谱数据

graph.query(movies_query)
graph.refresh_schema() #刷新schema


chain = GraphCypherQAChain.from_llm(graph=graph,allow_dangerous_requests=True,llm=llm, verbose=True)
response = chain.invoke({"query": "What was the cast of the Casino?"}) #提问
print(response) #回答

回答如下:

 Entering new GraphCypherQAChain chain...
Generated Cypher:
cypher
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'Casino'})
RETURN p.name

Full Context:
[{'p.name': 'James Woods'}, {'p.name': 'Joe Pesci'}, {'p.name': 'Robert De Niro'}, {'p.name': 'Sharon Stone'}]

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