Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

MongoDB と LangChain を使用した GraphRAG

このチュートリアルでは、 MongoDB Atlasと Lgachein を使用して GraphRAG を実装する方法を説明します。GraphRAG は、ベクトル埋め込みとしてではなく、知識グラフとしてデータを構造化する従来の RG の代替アプローチです。 このアプローチを LM と組み合わせると、 関係を認識する検索 と マルチホスト ベースの理由付けが可能になります。

このチュートリアルの実行可能なバージョンをPythonノートとして操作します。

GraphRAG は、ベクトル埋め込みとしてではなく、エンティティとその関係の知識グラフとしてデータを構造化する従来の RAG の代替アプローチです。ベクトルベースの RAG はクエリにセマンティックに類似するドキュメントを検索しますが、GraphRAG はクエリに接続されたエンティティを検索し、グラフ内の関係を走査して関連情報を検索します。

このアプローチは関係がベースとなる質問で特に役立ちます。たとえば、「A 会社と B 会社のつながりは何ですか?」や「X さんのマネージャーは誰ですか?」などの質問です。

MongoDBGraphStore は、LangChain MongoDB 統合内のコンポーネントであり、エンティティ(ノード)とその関係(エッジ)を MongoDB コレクションに保存することで GraphRAG を実装できるようにします。コレクション内の他のドキュメントを参照する関係フィールドのあるドキュメントとして各エンティティを保存し、$graphLookup 集計ステージを使用してクエリを実行します。

Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。

  • 次のいずれかのMongoDBクラスター タイプ

  • OpenAI APIキー。APIリクエストに使用できるクレジットを持つ OpenAI アカウントが必要です。OpenAI アカウントの登録の詳細については、OpenAI APIウェブサイト を参照してください。

  • VS CodeColab. などのインタラクティブPythonノートを実行するための環境。

このチュートリアルの環境を設定します。 .ipynb 拡張機能のファイルを保存して、インタラクティブPythonノートを作成します。 このノートはPythonコード スニペットを個別に実行でき、このチュートリアルのコードを実行するために使用します。

ノートク環境を設定するには、次の手順に従います。

1

次のコマンドを実行します:

pip install --quiet --upgrade pymongo langchain_community wikipedia langchain_openai langchain_mongodb
2

次のコード例をコピーし、変数を独自の値に置き換えてから、コードを実行します。

<api-key>

あなたの OpenAI API キー

<connection-string>

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 をGraphRAG の知識グラフとして使用する方法を説明します。ノートに次のコードを貼り付けて実行します。

1

Lm を初期化するには、L Shein の init_chat_model メソッドを使用します。

from langchain_openai import OpenAI
from langchain.chat_models import init_chat_model
chat_model = init_chat_model("gpt-4o", model_provider="openai", temperature=0)
2

このチュートリアルでは、Wikipedia から公開されているデータをデータソースとして使用します。サンプルデータをロードするには、次のコードスニペットを実行します。その手順は次のとおりです:

  • クエリ Sherlock Holmes でフィルターされたWikipedia ページのサブセットを検索します。

  • テキストスプリッターを使用して、データをより小さなドキュメントに分割します。

  • 各ドキュメント内の文字数および、連続する 2 つのドキュメント間で重複させる文字数を決定するチャンクパラメーターを指定します。

from langchain_community.document_loaders import WikipediaLoader
from langchain_text_splitters 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)
3

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
)
4

add_documents メソッドを使用してコレクションにドキュメントを追加します。新しいドキュメントを追加すると、このメソッドは既存のエンティティを見つけて更新するか、存在しない場合は新しいエンティティを作成します。

この手順には数分かかる可能性があります。出力に表示される警告は無視しても構いません。

graph_store.add_documents(wikipedia_docs)

サンプルコードを実行した後、documents.wikipedia コレクションに移動して Atlas UI でデータがどのように保存されているかを確認できます。

5

networkxpyvis ライブラリを使用してグラフ構造を視覚化できます。例については、ノート を参照してください。

質問に答えるためには、知識グラフを呼び出します。知識グラフを呼び出すには、 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分