Creare la catena Graph RAG

Retrieval Augmented Generation (RAG) con LangChain

Meri Nova

Machine Learning Engineer

Progettare l'architettura Graph RAG

Un database a grafo.

Retrieval Augmented Generation (RAG) con LangChain

Progettare l'architettura Graph RAG

I documenti vengono trasformati in documenti grafo e archiviati nel database a grafo.

Retrieval Augmented Generation (RAG) con LangChain

Progettare l'architettura Graph RAG

Una query Cypher recupera i documenti grafo dal database. Sono mostrati un input utente e una risposta in linguaggio naturale.

Retrieval Augmented Generation (RAG) con LangChain

Progettare l'architettura Graph RAG

Un traduttore da linguaggio naturale a Cypher converte l'input in linguaggio naturale in una query Cypher e i documenti grafo recuperati di nuovo in linguaggio naturale.

Retrieval Augmented Generation (RAG) con LangChain

Dagli input utente alle query Cypher

Un semplice grafo con tre nodi e tre relazioni. Due nodi rappresentano persone e un altro un luogo visitato da James.

Retrieval Augmented Generation (RAG) con LangChain

Dagli input utente alle query Cypher

Un input utente che chiede «Where has James visited?».

Retrieval Augmented Generation (RAG) con LangChain

Dagli input utente alle query Cypher

La query Cypher è generata usando lo schema del grafo e l'input utente.

Retrieval Augmented Generation (RAG) con LangChain

GraphCypherQAChain

L'architettura Graph RAG che traduce gli input utente in query Cypher e restituisce una risposta in linguaggio naturale.

Retrieval Augmented Generation (RAG) con LangChain

GraphCypherQAChain

L'architettura Graph RAG con evidenziate la catena di generazione di Cypher e la catena di sintesi dei risultati.

Retrieval Augmented Generation (RAG) con LangChain

Aggiornare lo schema

graph.refresh_schema()
print(graph.get_schema)
Proprietà dei nodi:
Document {title: STRING, id: STRING, text: STRING, summary: STRING, source: STRING}
Concept {id: STRING}
Organization {id: STRING}
Proprietà delle relazioni:

Relazioni:
(:Document)-[:MENTIONS]->(:Organization)
(:Concept)-[:DEVELOPED_BY]->(:Person)
Retrieval Augmented Generation (RAG) con LangChain

Interrogare il grafo

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) con LangChain

Interrogare il grafo

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) con LangChain

Personalizzazione

chain = GraphCypherQAChain.from_llm(
    llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True
)
  • qa_prompt: Template del prompt per generare i risultati
  • cypher_prompt: Template del prompt per generare Cypher
  • cypher_llm: LLM per generare Cypher
  • qa_llm: LLM per generare i risultati
Retrieval Augmented Generation (RAG) con LangChain

Esercitiamoci!

Retrieval Augmented Generation (RAG) con LangChain

Preparing Video For Download...