Créer la chaîne Graph RAG

Retrieval Augmented Generation (RAG) avec LangChain

Meri Nova

Machine Learning Engineer

Concevoir l'architecture Graph RAG

Une base de données orientée graphe.

Retrieval Augmented Generation (RAG) avec LangChain

Concevoir l'architecture Graph RAG

Des documents transformés en documents de graphe et stockés dans la base de données de graphe.

Retrieval Augmented Generation (RAG) avec LangChain

Concevoir l'architecture Graph RAG

Une requête Cypher permet de récupérer des documents de graphe de la base. Une saisie d'utilisateur et une réponse en langage naturel sont aussi montrées.

Retrieval Augmented Generation (RAG) avec LangChain

Concevoir l'architecture Graph RAG

Un traducteur langage naturel → Cypher convertit l'entrée en langage naturel en requête Cypher et les documents de graphe récupérés en langage naturel.

Retrieval Augmented Generation (RAG) avec LangChain

Des entrées utilisateur aux requêtes Cypher

Un petit graphe avec trois nœuds et trois relations. Deux nœuds représentent des personnes et un autre un lieu visité par James.

Retrieval Augmented Generation (RAG) avec LangChain

Des entrées utilisateur aux requêtes Cypher

Une saisie d'utilisateur demandant « Where has James visited? ».

Retrieval Augmented Generation (RAG) avec LangChain

Des entrées utilisateur aux requêtes Cypher

La requête Cypher est générée à partir du schéma du graphe et de la saisie de l'utilisateur.

Retrieval Augmented Generation (RAG) avec LangChain

GraphCypherQAChain

L'architecture Graph RAG qui traduit les entrées utilisateur en requêtes Cypher et retourne une réponse en langage naturel.

Retrieval Augmented Generation (RAG) avec LangChain

GraphCypherQAChain

L'architecture Graph RAG avec la chaîne de génération de Cypher et la chaîne de synthèse des résultats mises en évidence.

Retrieval Augmented Generation (RAG) avec LangChain

Actualiser le schéma

graph.refresh_schema()
print(graph.get_schema)
Node properties:
Document {title: STRING, id: STRING, text: STRING, summary: STRING, source: STRING}
Concept {id: STRING}
Organization {id: STRING}
Relationship properties:

The relationships:
(:Document)-[:MENTIONS]->(:Organization)
(:Concept)-[:DEVELOPED_BY]->(:Person)
Retrieval Augmented Generation (RAG) avec LangChain

Interroger le graphe

from langchain_community.chains.graph_qa.cypher import GraphCypherQAChain

chain = GraphCypherQAChain.from_llm( llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True )
result = chain.invoke({"query": "What is the most accurate model?"})
1 https://api.python.langchain.com/en/latest/chains/langchain_community.chains.graph_qa.cypher. GraphCypherQAChain.html
Retrieval Augmented Generation (RAG) avec LangChain

Interroger le graphe

print(f"Final answer: {result['result']}")
> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (m:Model)
RETURN m
ORDER BY m.accuracy DESC
LIMIT 1;
Full Context:
[{'m': {'id': 'Artificial Neural Networks'}}]

> Finished chain.


Final answer: Artificial Neural Networks
Retrieval Augmented Generation (RAG) avec LangChain

Personnalisation

chain = GraphCypherQAChain.from_llm(
    llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True
)
  • qa_prompt : Gabarit d'invite pour générer les résultats
  • cypher_prompt : Gabarit d'invite pour générer le Cypher
  • cypher_llm : LLM pour générer le Cypher
  • qa_llm : LLM pour générer les résultats
Retrieval Augmented Generation (RAG) avec LangChain

Passons à la pratique !

Retrieval Augmented Generation (RAG) avec LangChain

Preparing Video For Download...