このチュートリアルでは、MongoDB Atlas と LangChain を使用して GraphRAG を実装する方法を示します。GraphRAG は従来の RAG に代わるアプローチで、データをベクトル埋め込みではなく知識グラフとして構造化します。LLMと組み合わせることで、このアプローチは関係を意識した検索とマルチホップ推論を可能にします。
このチュートリアルの実行可能なバージョンを Python エディタとして操作します。
バックグラウンド
GraphRAGは、従来のRAGに代わるアプローチであり、データをベクトル埋め込みではなく、エンティティとその関係性の知識グラフとして構造化します。ベクトルベースの RAG はクエリに対して意味的に類似したドキュメントを見つけますが、GraphRAG はクエリに関連するエンティティを見つけ、グラフ内の関係をたどって関連情報を検索します。
このアプローチは関係がベースとなる質問で特に役立ちます。たとえば、「A 会社と B 会社のつながりは何ですか?」や「X さんのマネージャーは誰ですか?」などの質問です。
MongoDBGraphStore
は、LangChain MongoDB 統合内のコンポーネントであり、エンティティ(ノード)とその関係(エッジ)を MongoDB コレクションに保存することで GraphRAG を実装できるようにします。コレクション内の他のドキュメントを参照する関係フィールドのあるドキュメントとして各エンティティを保存し、$graphLookup
集計ステージを使用してクエリを実行します。
前提条件
Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。
次のいずれかのMongoDBクラスター タイプ
MongoDB バージョン 6.0.11、7.0.2、またはそれ以降を実行している Atlas クラスター。IP アドレスが Atlas プロジェクトのアクセスリストに含まれていることを確認する。
Atlas CLI を使用して作成されたローカル Atlas 配置。詳細については、「Atlas 配置のローカル配置の作成」を参照してください。
Search とベクトル検索がインストールされたMongoDB Community または Enterprise クラスター。
OpenAI APIキー。APIリクエストに使用できるクレジットを持つ OpenAI アカウントが必要です。OpenAI アカウントの登録の詳細については、OpenAI APIウェブサイト を参照してください。
環境を設定する
このチュートリアルの環境を設定します。 .ipynb
拡張機能のファイルを保存して、インタラクティブPythonノートを作成します。 このノートはPythonコード スニペットを個別に実行でき、このチュートリアルのコードを実行するために使用します。
ノートク環境を設定するには、次の手順に従います。
環境変数を定義してください。
次のコード例をコピーし、変数を独自の値に置き換えてから、コードを実行します。
| あなたの OpenAI API キー |
| MongoDBクラスターの SRV接続文字列 |
import os os.environ["OPENAI_API_KEY"] = "<api-key>" MONGODB_URI = "<connection-string>" DB_NAME = "langchain_db" # MongoDB database to store the knowledge graph COLLECTION = "wikipedia" # MongoDB collection to store the knowledge graph
注意
<connection-string>
を Atlas クラスターまたはローカル Atlas 配置の接続文字列に置き換えます。
接続stringには、次の形式を使用する必要があります。
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
詳しくは、ドライバーを使用してクラスターに接続する を参照してください。
接続stringには、次の形式を使用する必要があります。
mongodb://localhost:<port-number>/?directConnection=true
詳細については、「接続文字列 」を参照してください。
MongoDB を知識グラフとして使用
このセクションでは、 MongoDB をGraphRAG の知識グラフとして使用する方法を説明します。ノートに次のコードを貼り付けて実行します。
サンプル データをロードします。
このチュートリアルでは、Wikipedia から公開されているデータをデータソースとして使用します。サンプルデータをロードするには、次のコードスニペットを実行します。その手順は次のとおりです:
クエリ
Sherlock Holmes
でフィルターされたWikipedia ページのサブセットを検索します。テキストスプリッターを使用して、データをより小さなドキュメントに分割します。
各ドキュメント内の文字数および、連続する 2 つのドキュメント間で重複させる文字数を決定するチャンクパラメーターを指定します。
from langchain_community.document_loaders import WikipediaLoader from langchain.text_splitter import TokenTextSplitter wikipedia_pages = WikipediaLoader(query="Sherlock Holmes", load_max_docs=3).load() text_splitter = TokenTextSplitter(chunk_size=1024, chunk_overlap=0) wikipedia_docs = text_splitter.split_documents(wikipedia_pages)
グラフストアをインスタンス化します。
MongoDBGraphStore
クラスを使用して知識グラフを構築し、 MongoDBクラスターにロードします。
from langchain_mongodb.graphrag.graph import MongoDBGraphStore graph_store = MongoDBGraphStore.from_connection_string( connection_string = MONGODB_URI, database_name = DB_NAME, collection_name = COLLECTION, entity_extraction_model = chat_model )
ナレッジグラフにドキュメントを追加します。
add_documents
メソッドを使用してコレクションにドキュメントを追加します。新しいドキュメントを追加すると、このメソッドは既存のエンティティを見つけて更新するか、存在しない場合は新しいエンティティを作成します。
この手順には数分かかる可能性があります。出力に表示される警告は無視しても構いません。
graph_store.add_documents(wikipedia_docs)
サンプルコードを実行した後、documents.wikipedia
コレクションに移動して Atlas UI でデータがどのように保存されているかを確認できます。
(任意)知識グラフを視覚化します。
networkx
と pyvis
ライブラリを使用してグラフ構造を視覚化できます。例については、ノート を参照してください。
お客様のデータに関する質問に答えてください
質問に答えるためには、知識グラフを呼び出します。知識グラフを呼び出すには、 chat_response
メソッドを使用します。MongoDBから関連ドキュメントを検索し、指定したチャット モデルを使用して 自然言語で応答を生成します。
具体的には、チャット モデルはクエリからエンティティを抽出し、 MongoDB は$graphLookup
ステージを使用して接続されたエンティティを見つけるために知識グラフを走査し、最も近いエンティティとその関係はクエリとともにチャット モデルに送信され、応答を生成します。
query = "Who inspired Sherlock Holmes?" answer = graph_store.chat_response(query) print(answer.content)
Sherlock Holmes was inspired by Dr. Joseph Bell, a physician known for his keen observation and deductive reasoning, as acknowledged by Sir Arthur Conan Doyle, Holmes' creator.
ビデオで学ぶ
このチュートリアルで使用するコードのデモについては、このビデオをご覧ください。
所要時間: 2分