Créer la chaîne Graph RAG

Retrieval Augmented Generation (RAG) avec LangChain

Meri Nova

Machine Learning Engineer

Construire l’architecture Graph RAG

Une base de données graphe.

Retrieval Augmented Generation (RAG) avec LangChain

Construire l’architecture Graph RAG

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

Retrieval Augmented Generation (RAG) avec LangChain

Construire l’architecture Graph RAG

Une requête Cypher récupère des documents graphe de la base. Une saisie utilisateur et une réponse en langage naturel sont aussi affichées.

Retrieval Augmented Generation (RAG) avec LangChain

Construire l’architecture Graph RAG

Un traducteur langage naturel → Cypher convertit la saisie en requête Cypher puis les documents graphe récupérés en langage naturel.

Retrieval Augmented Generation (RAG) avec LangChain

Des saisies 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 où James est allé.

Retrieval Augmented Generation (RAG) avec LangChain

Des saisies utilisateur aux requêtes Cypher

Une saisie utilisateur demandant « Où James est-il allé ? ».

Retrieval Augmented Generation (RAG) avec LangChain

Des saisies utilisateur aux requêtes Cypher

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

Retrieval Augmented Generation (RAG) avec LangChain

GraphCypherQAChain

L’architecture Graph RAG qui traduit les saisies utilisateur en requêtes Cypher et renvoie 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: Modèle de prompt pour générer les réponses
  • cypher_prompt: Modèle de prompt pour générer le Cypher
  • cypher_llm: LLM pour générer le Cypher
  • qa_llm: LLM pour générer les réponses
Retrieval Augmented Generation (RAG) avec LangChain

Passons à la pratique !

Retrieval Augmented Generation (RAG) avec LangChain

Preparing Video For Download...