mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-03 03:59:42 +00:00
templates: Add neo4j semantic layer with ollama template (#17192)
A template with JSON-based agent using Mixtral via Ollama. --------- Co-authored-by: Erick Friis <erick@langchain.dev>
This commit is contained in:
59
templates/neo4j-semantic-ollama/ingest.py
Normal file
59
templates/neo4j-semantic-ollama/ingest.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from langchain_community.graphs import Neo4jGraph
|
||||
|
||||
# Instantiate connection to Neo4j
|
||||
graph = Neo4jGraph()
|
||||
|
||||
# Define unique constraints
|
||||
graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (m:Movie) REQUIRE m.id IS UNIQUE;")
|
||||
graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (u:User) REQUIRE u.id IS UNIQUE;")
|
||||
graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;")
|
||||
graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (g:Genre) REQUIRE g.name IS UNIQUE;")
|
||||
|
||||
# Import movie information
|
||||
|
||||
movies_query = """
|
||||
LOAD CSV WITH HEADERS FROM
|
||||
'https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/movies/movies.csv'
|
||||
AS row
|
||||
CALL {
|
||||
WITH 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))
|
||||
} IN TRANSACTIONS
|
||||
"""
|
||||
|
||||
graph.query(movies_query)
|
||||
|
||||
# Import rating information
|
||||
rating_query = """
|
||||
LOAD CSV WITH HEADERS FROM
|
||||
'https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/movies/ratings.csv'
|
||||
AS row
|
||||
CALL {
|
||||
WITH row
|
||||
MATCH (m:Movie {id:row.movieId})
|
||||
MERGE (u:User {id:row.userId})
|
||||
MERGE (u)-[r:RATED]->(m)
|
||||
SET r.rating = toFloat(row.rating),
|
||||
r.timestamp = row.timestamp
|
||||
} IN TRANSACTIONS OF 10000 ROWS
|
||||
"""
|
||||
|
||||
graph.query(rating_query)
|
||||
|
||||
# Define fulltext indices
|
||||
graph.query("CREATE FULLTEXT INDEX movie IF NOT EXISTS FOR (m:Movie) ON EACH [m.title]")
|
||||
graph.query(
|
||||
"CREATE FULLTEXT INDEX person IF NOT EXISTS FOR (p:Person) ON EACH [p.name]"
|
||||
)
|
Reference in New Issue
Block a user