Understanding Text2CypherRetriever
The Text2CypherRetriever
simplifies the retrieval process by translating natural language queries into Cypher queries using a large language model (LLM). This approach eliminates the need for manual Cypher query writing and complex embedding setups, making data retrieval more intuitive and accessible.
What is Text2Cypher?
Text2Cypher converts natural language into Cypher queries. The Text2CypherRetriever
leverages this by generating precise Cypher queries based on user input, executing them against the Neo4j database, and using the results to inform the language model’s responses. This method allows users to interact with the database using plain language, enhancing ease of use and flexibility.
Try this Cypher command in sandbox:
MATCH (actor:Actor {name: "Hugo Weaving"})-[:ACTED_IN]->(movie:Movie)
RETURN movie.title AS movie_title, movie
When to Use Text2CypherRetriever
-
Simplicity:
-
Avoid manual Cypher query writing.
-
-
Natural Interaction:
-
Allow users to interact with the database using natural language.
-
-
Accessibility:
-
Enable developers of all skill levels to easily retrieve data without a deep understanding of Cypher.
-
Setting Up Text2CypherRetriever
Follow these steps to set up and use the Text2CypherRetriever
.
Open the 2-neo4j-graphrag\text2cypher_retriever.py
file in your code editor.
1. Initialize the Text2CypherRetriever
Set up the Text2CypherRetriever
to connect your Neo4j database with the LLM:
from neo4j_graphrag.retrievers import Text2CypherRetriever
from neo4j_graphrag.llm import OpenAILLM
# Create LLM object
t2c_llm = OpenAILLM(model_name="gpt-3.5-turbo")
# (Optional) Specify your own Neo4j schema
neo4j_schema = """
Node properties:
Person {name: STRING, born: INTEGER}
Movie {tagline: STRING, title: STRING, released: INTEGER}
Relationship properties:
ACTED_IN {roles: LIST}
REVIEWED {summary: STRING, rating: INTEGER}
The relationships:
(:Person)-[:ACTED_IN]->(:Movie)
(:Person)-[:DIRECTED]->(:Movie)
(:Person)-[:PRODUCED]->(:Movie)
(:Person)-[:WROTE]->(:Movie)
(:Person)-[:FOLLOWS]->(:Person)
(:Person)-[:REVIEWED]->(:Movie)
"""
# Provide user input/query pairs for the LLM to use as examples
examples = [
"USER INPUT: 'Which actors starred in the Matrix?' QUERY: MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WHERE m.title = 'The Matrix' RETURN p.name"
]
# Build the retriever
retriever = Text2CypherRetriever(
driver=driver,
llm=t2c_llm,
neo4j_schema=neo4j_schema,
examples=examples,
)
-
driver
: Neo4j database driver. -
llm
: Large language model for query generation. -
neo4j_schema
: (Optional) Schema definition for better query accuracy. -
examples
: (Optional) Example queries to guide the LLM.
2. Using the Retriever
Integrate the Text2CypherRetriever
with GraphRAG to perform data retrieval using natural language queries:
from neo4j_graphrag.generation import GraphRAG
llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})
rag = GraphRAG(retriever=retriever, llm=llm)
query_text = "Which movies did Hugo Weaving star in?"
response = rag.search(query_text=query_text)
print(response.answer)
Expected Output
Hugo Weaving starred in "Cloud Atlas," "V for Vendetta," "The Matrix," and "The Adventures of Priscilla, Queen of the Desert."
Tips for Effective Use
-
Schema Definition:
-
Provide a clear Neo4j schema to improve query accuracy.
-
-
Example Queries:
-
Supply example queries to guide the LLM in generating accurate Cypher queries.
-
-
Handle Errors:
-
Be prepared to handle
Text2CypherRetrievalError
if the generated query is incorrect.
-
Continue
When you are ready, you can move on to the next task.
Summary
You’ve learned how to use Text2CypherRetriever
to perform natural language-based data retrieval in Neo4j, simplifying your RAG pipeline by translating user queries into precise Cypher queries. This approach enhances accessibility and efficiency in integrating Neo4j with generative AI models.