Docs Menu
Docs Home
/
Atlas
/ / /

MongoDB と LangChain を使用した GraphRAG

このチュートリアルでは、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ウェブサイト を参照してください。

  • 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_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)
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分

戻る

ローカル RAG

項目一覧