このチュートリアルでは、 MongoDB Atlasと Lgachein を使用して GraphRAG を実装する方法を説明します。GraphRAG は、ベクトル埋め込みとしてではなく、知識グラフとしてデータを構造化する従来の RG の代替アプローチです。 このアプローチを LM と組み合わせると、 関係を認識する検索 と マルチホスト ベースの理由付けが可能になります。
バックグラウンド
GraphRAG は、ベクトル埋め込みとしてではなく、エンティティとその関係の知識グラフとしてデータを構造化する従来の RG の代替アプローチです。ベクトルベースの RG はクエリにセマンティックに類似するドキュメントを検索しますが、GraphRAG はクエリに接続されたエンティティを検索し、グラフ内の関係を走査して関連情報を検索します。
このアプローチは関係がベースとなる質問で特に役立ちます。たとえば、「A 会社と B 会社のつながりは何ですか?」や「X さんのマネージャーは誰ですか?」などの質問です。
MongoDBGraphStore は、LgChuin MongoDB統合のコンポーネントであり、エンティティ(ノード)とその関係(エッジ)をMongoDBコレクションに保存することで GraphRAG を実装できます。このコンポーネントは、コレクション内の他のドキュメントを参照関係フィールドを持つドキュメントとして各エンティティを保存します。$graphLookup 集計ステージを使用してクエリを実行します。
前提条件
Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。
次のいずれかのMongoDBクラスター タイプ
MongoDBバージョン6.0.11 、7.0.2 、またはそれ以降を実行中Atlas クラスター。 IPアドレスが Atlas プロジェクトのアクセス リストに含まれていることを確認します。
PythonとDockerを使用して作成されたローカル Atlas 配置。プログラムでローカル配置を作成および管理するには、
atlas-local-lib-py(pip install atlas-local-lib-py)をインストールします。詳細については、 atlas-local-lib-pyリポジトリを参照してください。Search とベクトル検索がインストールされたMongoDB Community クラスター。
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_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)
グラフストアをインスタンス化します。
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分