Graph RAGチェーンの作成

LangChain による検索拡張生成(RAG)

Meri Nova

Machine Learning Engineer

Graph RAGアーキテクチャの構築

グラフデータベース。

LangChain による検索拡張生成(RAG)

Graph RAGアーキテクチャの構築

ドキュメントをグラフドキュメントに変換し、グラフデータベースに格納する様子。

LangChain による検索拡張生成(RAG)

Graph RAGアーキテクチャの構築

Cypherクエリでグラフドキュメントを取得し、ユーザー入力と自然言語応答を示す図。

LangChain による検索拡張生成(RAG)

Graph RAGアーキテクチャの構築

自然言語入力をCypherクエリに変換し、取得したグラフドキュメントを自然言語に変換するトランスレーター。

LangChain による検索拡張生成(RAG)

ユーザー入力からCypherクエリへ

3つのノードと3つの関係を持つ簡単なグラフ。2つのノードは人物、1つはJamesが訪れた場所を表す。

LangChain による検索拡張生成(RAG)

ユーザー入力からCypherクエリへ

「Jamesはどこを訪れましたか?」というユーザー入力。

LangChain による検索拡張生成(RAG)

ユーザー入力からCypherクエリへ

グラフスキーマとユーザー入力を使用してCypherクエリを生成。

LangChain による検索拡張生成(RAG)

GraphCypherQAChain

ユーザー入力をCypherクエリに変換し、自然言語で回答するGraph RAGアーキテクチャ。

LangChain による検索拡張生成(RAG)

GraphCypherQAChain

Cypherチェーン生成と結果要約チェーンが強調表示されたGraph RAGアーキテクチャ。

LangChain による検索拡張生成(RAG)

スキーマの更新

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)
LangChain による検索拡張生成(RAG)

グラフへのクエリ

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
LangChain による検索拡張生成(RAG)

グラフへのクエリ

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
LangChain による検索拡張生成(RAG)

カスタマイズ

chain = GraphCypherQAChain.from_llm(
    llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True
)
  • qa_prompt: 結果生成用プロンプトテンプレート
  • cypher_prompt: Cypher生成用プロンプトテンプレート
  • cypher_llm: Cypher生成用LLM
  • qa_llm: 結果生成用LLM
LangChain による検索拡張生成(RAG)

練習しましょう!

LangChain による検索拡張生成(RAG)

Preparing Video For Download...