BigQuery で LangChain を使用する検索拡張生成のスタートガイド
Jeff Nelson
Developer Relations Engineer
Ashley Xu
Software Engineer, Google
※この投稿は米国時間 2024 年 6 月 4 日に、Google Cloud blog に投稿されたものの抄訳です。
人間の言語を処理および生成する大規模言語モデル(LLM)の能力は、ビジネスの多くの側面に革命をもたらし続けています。しかし、LLM の知識はトレーニング済みのデータに制限されており、特定の企業情報や業界特有の微妙に異なるコンテキストを扱う際に問題が生じることがあります。検索拡張生成(RAG)は、LLM を独自のデータソースに接続して、内部ナレッジベースから情報を引き出せるようにすることで、この制限に対する優れたソリューションを提供します。これにより、データの詳細情報に根拠づけられた新しいビジネス プロセスが可能になります。
BigQuery でエンベディングの生成と高度なベクトル検索の実行を大規模に行えるようになり、RAG ワークフローが BigQuery 内で実現します。LLM を使用するアプリケーションの開発用に設計されたフレームワークである LangChain を活用して、ビジネスニーズに適うようにカスタマイズされた RAG アプリケーションをシームレスに構築できます。
このブログ記事では、BigQuery と LangChain を使用して RAG を実装するための実践ガイドについて説明し、独自データで開始するためのフレームワークを提供します。
LLM の制限
架空の自動車である 2024 年式 Cymbal Starlight に関する質問をするシナリオについて考えてみましょう。「オイル交換が必要になるまであと何マイル?」や、「高速道路で故障した。どこで助けてもらえる?」と尋ねたいことがあるかもしれません。これまでなら、オーナーズ マニュアルを参照し、答えが見つかるまでページをめくったでしょう。
LLM に質問することもできるでしょう。
残念ながら、この回答は質問への答えになっていません。2024 年式 Cymbal Starlight は架空の自動車であり、LLM のトレーニング データにオーナーズ マニュアルが含まれていないのですから、当然のことです。この制約を解消するには、2024 年式 Cymbal Starlight のオーナーズ マニュアルのような独自データまたはファーストパーティ データで LLM を強化する、検索拡張生成を活用できます。
検索拡張生成(RAG)を組み入れる
LLM は優れたツールですが、内部知識による制限を受けることがあります。RAG は、外部ソースからデータを取り込み、LLM がファインチューニングやモデルの再トレーニングなしに、関連情報にリアルタイムでアクセスできるようにすることで、この問題に対処します。シンプルな RAG パイプラインには、次の 2 つの主要なコンポーネントがあります。
データの前処理:
-
ドキュメントのような入力データを小さなチャンクに分割し、ベクトル エンベディングに変換し、後に検索に供するためにベクトルストアに送信します
クエリと検索:
-
ユーザーは自然言語で質問します。これはエンベディングに変換されます。ベクトル検索で、関連性のあるコンテキストが取得されます
-
LLM にコンテキストが提供され、LLM の知識が拡張します
-
LLM は、取得したチャンクと事前トレーニング済みの知識をまとめ上げ、要約機能を駆使して、回答を生成します
LangChain
LangChain は LLM と連携するオープンソースのオーケストレーション フレームワークであり、デベロッパーはデータに基づく生成 AI アプリケーションを迅速に構築できます。Google Cloud は、LangChain と BigQuery との新たなインテグレーションに貢献し、データの前処理、エンベディングの生成と保存、ベクトル検索の実行がすべて BigQuery で簡単に行えるようになりました。
このデモは、前処理と実行時の両方のステップを LangChain で処理します。詳しく見ていきましょう。
BigQuery と LangChain で RAG パイプラインを構築する
このブログ投稿は、BigQuery と LangChain を使用してシンプルな RAG パイプラインを構築するための主要な数ステップを取り上げています。深掘りや他のまたは追加のステップの確認のために、ノートブック、LangChain と BigQuery ベクトル検索を使用した Q&A 生成の拡張をコピーし、自分の Google Cloud 環境において Colab で以下の例を実行できます。
データの前処理
最初にドキュメント、2024 年式 Cymbal Starlight オーナーズ マニュアルを、PyPDFLoader という、Google Cloud Storage からオブジェクトを読み込む LangChain ドキュメント ローダでメモリに読み込みます。
読み込みが完了したら、ドキュメントを小さなチャンクに分割します。チャンクを使用するとよりターゲットを絞った関連情報の検索が可能になり、コンピューティング負荷が軽減されるので、チャンキングで RAG の効率が向上します。その結果、生成される回答の精度と文脈性が改善し、回答が得られるまでの時間が短縮します。定義したルールに基づいてテキストを分割する、LangChain の RecursiveTextSplitter を使用します。
doc_splits
に格納された各テキスト チャンクのエンベディングを生成し、BigQuery に保存する必要があります。そのためにはまず、新しい BigQueryVectorSearch クラスを使用して、LangChain ベクトルストアを初期化します。これには、Google Cloud 環境と BigQuery 環境に関するいくつかの入力が必要であり、エンベディング モデルの定義も必要になります。VertexAI の textembedding-gecko モデルを使用します。
最後に、ベクトルストア(bq_vector_cars_manual
)を呼び出し、ドキュメントのチャンクをすべて渡します。LangChain により、これらのチャンクのエンベディングへの変換と BigQuery への送信が容易になります。
BigQuery テーブルを調べて、ドキュメントのメタデータ、コンテンツ、テキスト エンベディングが含まれていることを確認します。
クエリと検索
テキスト エンベディング データが BigQuery に存在しているので、関連するチャンクを検索し、回答の生成の根拠となるようにします。このパターンはよく RAG と呼ばれます。最初に、Vertex AI LLM と、BigQuery ベクトル検索を使用してドキュメントを取得する LangChain Retriever を初期化します。
Q&A チェーンでは、リトリーバーはチェーンに直接渡され、さらなる構成なしに使用できます。私が質問すると、舞台裏で以下が起こります。
-
私の質問はテキスト エンベディングに変換されます
-
BigQuery でベクトル検索が行われ、関連するドキュメントのチャンクが取得されます
-
これらのチャンクはプロンプトに渡され、そのプロンプトを使用して LLM は知識を拡張し、簡潔な回答を生成します
LangChain の RetrievalQA チェーンを使用した基本的な例を詳しく見ていきましょう。
LLM は具体的な内容を回答するようになりました。この自動車は 5,000 マイルごとにオイルを交換する必要があります。
ここで、もう少し洗練された例を取り上げてみましょう。ConversationalRetrievalChain
を使用します。同じく BigQuery ベクトル検索を使用しますが、ここでは以前の会話履歴をメモリに保持し、コンテキストとして LLM の回答に追加します。これにより、データを活用した会話機能が提供されます。
直前の質問と回答が済んでいるので、コンテキストの追加をそれほど必要としないで、フォローアップの質問をすることができます。
最初のうちは LLM が 2024 年式 Cymbal Starlight に関するどの質問にも回答できなかったことを思い出してください。しかし、BigQuery ベクトル検索と LangChain を使用して、数ステップで、独自のドキュメントに根拠づけられた有用な情報を提供するシンプルな RAG Q&A アプリケーションを構築できました。
使ってみる
Google Cloud は、エンベディングの保存やベクトル検索の実行のために多くのツールを提供しています。BigQuery ベクトル検索は、大規模な分析ワークロード向けに最適化されており、BigQuery に期待される多くの機能を組み込んでいます。フルマネージド、サーバーレスであり、インフラストラクチャの管理を心配することなく、スケールアップとスケールダウンが可能です。ガバナンスやきめ細かなアクセス制御などの機能も組み込まれています。
今すぐ BigQuery と LangChain で RAG アプリケーションの構築を始めましょう。サンプル ノートブックを確認して、上記の例を深く掘り下げるか、新しい BigQuery ベクトル検索 LangChain のドキュメントを読んで、データに基づくアプリケーションの構築を開始しましょう。
Google Cloud で RAG アプリケーションを構築するための追加のアプローチやリソースについては、以下をご覧ください。
-デベロッパー アドボケイト Jeff Nelson
-Google、ソフトウェア エンジニア Ashley Xu