localGPT 2.0 – 最高のプライベートRAGシステムの構築

RAG
この記事は約17分で読めます。

この動画は、プライベートなRAG(検索拡張生成)システムであるlocalGPT 2.0の新バージョンについて詳しく解説している。従来版よりもフレームワーク的な設計となり、ユーザーが様々な検索システムやハイパーパラメータを試せるようになった点が特徴である。インデックス作成、検索機能、インストール方法まで包括的にカバーし、完全にローカル環境で動作するため外部APIを使用せずプライバシーが保護される仕組みを紹介している。

localGPT 2.0 - Building the Best Private RAG System
I am releasing the new version of localGPT as a preview. This has a ton of enhancements you will not find in other rank ...

localGPT 2.0の紹介

皆さん、おかえりなさい。今日はlocalGPTのプレビュー版をリリースします。これは検索拡張生成の独自実装です。この新バージョンは実際にはフレームワークのようなものになり、このバージョンを使ってより良い検索システムを実装し、さまざまなハイパーパラメータで実験することができます。

localGPTに馴染みがない方のために説明しますと、これはローカルモデルを使って文書とチャットできる私のオープンソースプロジェクトです。すべてがプライベートです。外部APIを使用したり、文書をどこかに送信したりすることはありません。

感覚を掴んでいただくために、これが新バージョンのインターフェースです。前回のバージョンと比べてずっとクリーンになっています。

この動画では、まずインデックス作成と検索の両方でさまざまな機能をお見せし、その後、ローカルマシンにインストールするためのさまざまなオプションをお見せします。注意していただきたいのは、私はMac OSでテストと開発を行っているということです。

WindowsやLinuxで実行する場合は、ここそこにバグがあるかもしれません。

基本機能の説明

新バージョンのlocalGPTを読み込むと、この画面が表示されます。最初のオプションは新しいインデックスを作成することです。2番目は既存のインデックスを選択することです。私はここにいくつかの異なるインデックスをすでに作成しています。

3番目は、このバージョンのlocalGPTを使ってローカルモデルと直接チャットできることです。これはOlamaによって動いています。Olamaで利用可能なすべてのLLMを取得し、その中から一つを選んで対話を開始できます。最初のメッセージは通常、Olamaからモデルをプルアップしているため、おそらく最も時間がかかりますが、その後は速度が改善されます。

では戻って、インデックスを作成する際に利用可能なオプションをいくつか説明しましょう。ここに行ってみましょう。ここには私が作成したいくつかの異なる請求書があると思います。では、このデモの目的でそのうちのいくつかを選んでみましょう。これを請求書データV2と呼びましょう。

インデックス作成のオプション

検索にはいくつかのオプションがあります。密な埋め込みと全文検索を一緒に使用できます。ハイブリッドを選択することを強くお勧めします。レイト・チャンキングの実装もあります。デフォルトでは有効になっていません。私の推奨は、これらの異なるオプションを使ってファイルの複数の異なるインデックスを作成し、それらに対していくつかの異なる質問を実行して、あなたのソリューションや問題に最適な組み合わせを見つけることです。

それらは有効にしません。高リコール・チャンキングがあります。これは基本的に文レベルのチャンキングです。より正確なチャンクが得られますが、インデックス作成プロセス自体に時間がかかります。このバージョンのlocalGPTを使い始めると、インデックス作成が他のソリューションと比べて通常かなり遅いことがわかります。

その理由は、これらの異なるオプションがあるからです。異なる埋め込みモデルを選択できます。ここに表示されているQuen埋め込みモデルがデフォルトで利用可能になります。初回実行時は、これらのモデルをローカルにダウンロードします。最後に表示されている他のモデルは、Olama経由でホストされています。

Olamaで実行している埋め込みモデルがある場合、それらも取得できます。これを選択します。簡単な概要をお伝えします。技術的な詳細について議論する動画がもう2本ほどあると思います。

すべての文書について、いくつかのチャンクをランダムに選択し、それらの文書の概要を作成します。モデルが自動的に独自の知識、チャット履歴を使用するか、インデックスから文書を検索するかを決定するツリーアドレスステップをお見せします。そのために、これらの概要を作成する必要があります。

そして、コンテキスト検索があります。これはAnthropicが推奨するものと非常に似たアプローチですが、文書全体を見る代わりに、特定のチャンクの周りの5つのチャンクを見て、その小さな要約を作成します。ローカルコンテキストが保持されるため、すべてのチャンクが単に孤立したり独立したりするのではなく、その周りにより多くのコンテキストがあります。

これら2つのオプションについては、これらは計算集約的なタスクになるため、比較的小さな60億パラメータのモデルを使用しています。これを設定したら、インデックス作成を開始をクリックすると、インデックスが作成されます。これが起こっているバックエンド処理です。選択したすべてのオプションです。

ここで初期埋め込みを作成、実際にはそれらを読み込みました。インデックスが作成されると、自動的に新しいチャートが作成されます。インデックスをクリックすると、選択したすべてのハイパーパラメータが表示されます。そのため、少なくともテストデータについては、異なるハイパーパラメータ、異なる設定で複数のインデックスを作成し、いくつかの質問を実行してどれがうまく機能するかを確認することをお勧めします。

検索例のデモンストレーション

いくつかの検索例をお見せするために、別のインデックスを見てみましょう。このインデックスにはDeepSeek v3の論文とO3 miniシステムカードがあります。合計で約90から100ページを見ています。これをクリックすると、インデックス内にある2つのファイルがここにあります。高リコール・チャンキングや文レベル・チャンキングは使用しませんでした。なぜなら、多くの異なるチャンクになってしまうからです。

残りのオプションは、前に見たものと非常に似ています。設定に行くと、検索パイプラインもカスタマイズできます。異なるオプションを設定し、それらを切り替えることができます。例えば、複雑な質問については、それらを分解します。分解についても、それらの各サブ質問に対してLLMを使用して回答を生成するか、すべてのチャンクを取得して、それらを直接最後のLLMに送って回答を生成することができます。

これらのハイパーパラメータでも実験できます。検索タイプについては、ハイブリッド検索があります。現在、これがデフォルトです。LLMについても、デフォルトではQuen 2.5 8億パラメータモデルを使用していますが、基本的にOlamaで利用可能な任意のモデルを使用できます。

パフォーマンスは、使用することを決定するLLMに本当に依存します。しかし、このデモの目的と、多くの人が12GBまたは16GBのVRAMを持っているため、8億パラメータモデルをデフォルトモデルにしたかったのです。

実験しながらこれらの異なる設定を確認していきます。最初にhiと言ったとしましょう。これは非常に一般的な質問です。LLMを直接使用してレスポンスを生成します。Quenモデルは思考モデルです。このような単純な質問でも、いくつかの思考トークンを使用することになります。

一般的な質問をする場合、ほとんどの場合、検索やRAGパイプラインをトリガーしません。それをしない失敗例もあり、それはモデル自体に依存します。バックグラウンドで本質的に起こっていることは、作成した文書概要を見て、各質問について、それらの文書要約がこの質問に関連する情報を作成するかどうかをLLMに尋ねることです。

関連情報があると判断した場合、RAG部分をトリガーし、それらの文書に関連情報が見つからない場合は、LLMの知識を使用します。これらの文書について何かと尋ねるような場合、文書概要を見るシナリオがありますが、この場合、いくつかのチャンクを取得することに決めたと思います。RAGパイプラインを使用することを決定した質問については、いくつかの異なるステップを経ることがわかります。

まず、RAGパイプラインを使用するかどうかを判断し、次にサブクエリを生成し、コンテキストを取得し、それらを再ランク付けし、それらのチャンクの周りのコンテキストウィンドウを拡張し、サブクエリの回答を生成します。単一の質問の場合、直接答えを生成します。

これらの文書は主にAIモデルの評価、リスク管理、技術能力に焦点を当てており、特に安全性、パフォーマンス、アプリケーション固有のタスクのコンテキストにおいてです。O3 miniの論文からいくつかのチャンクを選択したと思います。非常に良い概要を提供していますね。そして、これらが使用された異なるチャンクです。

フォーマットが少しおかしいことに気づくでしょう。これはまだ修正が必要な小さなバグです。そのため、これをプレビューバージョンと呼んでいます。メインブランチにはありませんが、この新バージョンの特定のブランチをお見せします。

信頼性スコアと設定

デフォルトでは、回答と一緒に信頼性スコアも表示されます。本質的に起こっていることは、最終回答を生成し、次にコンテキスト、質問を取得し、この最終回答を別のLLM呼び出しに送って評価することです。質問の複雑さによっては、それ自体で簡単に5から10秒かかるため、これを無効にできます。

設定に行くと、この回答検証を簡単に無効にでき、検証ステップが表示されなくなります。DeepSeek v3とO3 miniについて話していたので、実際にそれらに関連する質問をしてみましょう。

DeepSeek v3モデルの総訓練コストは何かと尋ねてみましょう。うまくいけば、RAGまたは検索パイプラインを通ることになるでしょう。回答を生成しています。待ってみましょう。デフォルトでは、推論や思考モデルであるQuen 2.5 8億パラメータモデルを使用しています。そのため、最初に推論文字列が表示され、次に最終回答が表示されます。

これを非推論モデルで簡単に置き換えることができますが、その場合、プロンプト自体が何らかの作業を必要とする可能性があります。ここでは、DeepSeek v3の総訓練コストは明示的に557万USDと述べられています。そして、事前訓練にどれだけのGPUが使用されたかについて説明しています。これらが使用されている異なるチャンクです。

コンテキスト検索またはコンテキスト拡張を使用したため、おそらくより適切な名前はコンテキスト拡張でしょう。各チャンクと一緒に、チャンクの周りの実行ウィンドウに基づく要約が追加されます。現在、実行ウィンドウは約5つのチャンクです。

O3に関連する質問をしてみましょう。興味深い質問を見つけられるか見てみましょう。このセクションでは実際にコンテキスト核知識について話しています。222の多肢選択問題のセットがあります。実際にこれを尋ねてみましょう。O3モデルの核知識をテストするために何問の多肢選択問題が使用されたでしょうか。

何が起こるか見てみましょう。再びサブ質問を作成しました。ここで最終回答を生成しました。ストリーミング時の思考トークンでは、フォーマットが少しおかしい場合があります。それはまだ対処する必要があることです。しかし、これらが思考トークンです。

これが使用された総コンテキストです。各チャンクの512トークンすべてを表示していないと思います。それは確認する必要があることです。しかし、回答を見ると、コンテキストは明示的に、モデルの評価において核知識をテストするために使用された222の多肢選択問題と述べています。具体的に、コンテキストは言及していますと言っています。

ここにコンテキストからのスニペットだと思います。適切なチャンクをコンテキストで見つけることができれば、実際にかなり正確であることがわかります。デフォルトで、ここを見ると、最初に20のチャンクを取得します。リランカーを使用する場合、10のチャンクをランク付けするか、その20のうちトップ10のチャンクを選択します。

このコンテキストウィンドウを有効にすると、さらに拡張されます。私の推奨は、最初に10から始めて、その後4または5のようなものに減らして、同じレベルのパフォーマンスが得られるかどうかを確認することです。

質問応答の例

一つの問題は、処理を高速化するために、質問と回答のペアにキャッシュを使用していることです。例えば、同じ質問を再び尋ねる場合、実際に確認できるかどうか見てみましょう。例を示すために、まったく同じ質問を使用すると、キャッシュの回答を取得するだけです。

そのため、探している回答が得られない場合は、質問を調整する必要がある場合があります。通常、この文書によるとのようなものを入れると非常に役立ちます。そうすると、それは独自の知識から答えようとするのではなく、RAGパイプラインを使用するシステムへの信号になります。

もう一つの機能をお見せしましょう。DeepSeek v3とO3 miniモデルの総訓練パラメータ数は何かのような質問をしてみましょう。この質問を送信しましょう。これは比較的複雑な質問です。これで検索を試みると問題に遭遇するでしょう。

しかし、ここでは、これを2つのサブ質問に分割したことがわかります。今、生成した中間質問のストリーミング回答を得ています。時には同時にストリーミングすることがあり、これは非常に素晴らしい効果だと思います。

ここで最終回答を得ました。DeepSeek v3では、総訓練パラメータ数は5610億です。これはコンテキストで明示的に述べられています。そして、O3 miniについては、総訓練パラメータ数は提供されたコンテキストでは言及されていません。スニペットは、パフォーマンスメトリクス、ベンチマーク、評価に焦点を当てています。

これは実際に正しいです。なぜなら、O3 miniのサイズはわからないからです。しかし、システムが作成しようとした個別の回答を見ることもできます。質問の一つに2回答えようとしたと思います。これは興味深いです。おそらくストリーミングに何か問題があります。

それを対処する必要があり、そのためプレビューバージョンと言っているので、完全には仕上がっていません。テストして、遭遇している異なる問題について教えていただくことを強くお勧めします。

一つのことは、質問に答える方法で非常に具体的である必要があることです。キーワードを使用するようにしてください。ここで両方のモデルと言ったと思いますが、前のコンテキストを見て2つの回答を正しく作成できています。1つ目はDeepSeek v3の訓練に使用された訓練ハードウェアで、もう1つはO3 miniです。

しかし、場合によっては質問をして、前のチャートに基づいて強化できる場合、それを選択できる場合とできない場合があります。そのため、非常に明示的である方が良いです。例えば、DeepSeek v3とO3 miniの訓練に使用された訓練ハードウェアは何かのようなキーワードを使用できたでしょう。

そうすることで、より良い検索の機会が増加します。DeepSeek v3から数字を正しく選択できましたが、O3 miniについては言及されていません。

高度な機能とセットアップ

もう一つ強くお勧めするオプションは、再ランク付けまたはランク付けされたチャンクの数がわかったら、プルーニングも見たいということです。これは役立ちます。なぜなら、チャンクをランク付けするとき、チャンク内のすべてのテキストが実際に質問に関連しているとは限らないからです。

プルーニングは文レベルのプルーニングを行い、チャンク全体ではなく、最も関連性の高い文のみを保持します。私はこのトピックについて以前の動画を作成しました。動画の説明にリンクします。

しかし、この新バージョンでローカルマシンにlocalGPTをセットアップする方法をお見せしましょう。実際、その前に、このドラッグノードトリアージオプションがあります。これを選択またはトグルすると、実際にシステムが常に検索パイプラインを使用するように強制されます。LLMからの知識を完全に無視し、常にRAGパイプラインを使用します。

インストール手順

セットアップするために、localGPT GitHubリポジトリに行き、ここでこのlocalGPT v2を見ることになります。これまでこのプロジェクトが役に立った場合は、GitHubでスターを付けることを確認してください。非常に感謝しています。

これが新バージョンのドキュメントです。哲学、異なる機能について話しています。現時点では、PDFファイルのみをサポートしていますが、他のすべての非構造化ファイルのサポートも近日中に提供される予定です。

これをインストールするための3つの異なるオプションがあります。1つはDockerデプロイメント、もう1つは直接デプロイメント、そしてもう1つは手動コンポーネントセットアップだと思います。今は最も簡単なものをお見せします。別の動画では、これらの異なるオプションすべてを確認します。

異なるAPIについても詳細なドキュメントがあります。これはAPI優先です。望むなら、独自のUIを構築できます。現在のUIを使用する必要はありません。すべてが文書化されています。そのため、この上に独自のアプリケーションを簡単に作成できるでしょう。

また、ビジネスでlocalGPTをデプロイしたい場合は、最後にフォームがあります。それを記入していただければ、個人的にお手伝いします。これはメインブランチにないため、このブランチからクローンする必要があります。このコマンドを使用したいと思います。

本質的に、これはlocalGPT v2ブランチで、localGPTというフォルダを作成します。実際にこれをコピーして、私のシステムで見せましょう。そのコマンドを貼り付けます。しかし、localというフォルダを作成したいとしましょう。実際に何が起こったのでしょうか。

そのブランチでgit cloneであるべきだと思います。このコマンドを修正する必要があるかもしれません。localGPT v2を見てみましょう。うまくいくことを期待しています。そのコマンドを修正します。バグを見つけました。

それからcd local。今、localGPT v2ブランチにいます。そして、これらがすべてのファイルです。ローカルマシンにnpmまたはNodeJSがインストールされている必要があり、これは要件の1つです。次のステップはnpmをインストールすることになりますが、実際にはconda環境を作成しましょう。

local pythonと呼びましょう。Python 3.11または3.10も動作します。これを実行しましょう。仮想環境が作成されました。この仮想環境をアクティベートします。使用している仮想環境が表示されます。今、requirements.txtから要件をインストールします。インストールが完了しました。

忘れていたもう一つのことは、これが純粋なPythonであることです。依存関係は最小限です。LangChain、LlamaIndexは使用していません。RAGセットアップ全体が実際にPython自体で実装されています。そのため、多くの依存関係の問題に遭遇することはないでしょう。

これを実行するには2つの方法があります。1つはpython main.pyを実行するだけです。バックエンドサーバーを開始し、フロントエンドサーバーを開始し、すぐに使用を開始できます。お見せするもう1つの方法は、3つの異なるファイルを実行することです。しかし、それはおそらく開発目的に最適です。

異なるサービスを開始しました。これを開始する前にOlamaを実行している必要があります。フロントエンドにアクセスするには、ローカルホストでこれにアクセスします。これを実行する2番目の方法で、特に初期開発目的で強くお勧めするのは、3つの異なるタブを開くことです。

実際、これは以前作成した仮想環境でした。最初の環境では、backend_server.pyを実行したいと思います。これによりバックエンドAPIが開始されます。次に、rag_system_api_server.pyを開始します。これがメインのRAGパイプラインです。これが開始されています。

最後の環境は npm run dev になります。これによりフロントエンドが開始されます。そして、今ポート3000のローカルホストに行くことができます。すべてが実行されていることがわかります。

時々、最初の方法では、他のセッションが同じポートを使用している場合、いくつかの問題に遭遇するかもしれません。しかし、この方法では、通常バックエンドを簡単に見つけることができます。再び、新しいインデックスを作成し、それと対話を開始する同じステップを確認します。

重要な注意事項と今後の展望

この動画を終了する前にもう一つ、チャンキングプロセスは実際にPDFファイルの品質に依存しています。DocklingがPDFファイルを正しく解析できない場合、パイプラインの残りの部分でいくつかの問題に遭遇する可能性があります。

実際に、localGPTの一部としてビジョンベースの検索を統合することを考えています。しかし、そのためには、複数のモデルを実行し、ビジョンモデルは通常より多くのリソースを必要とするため、はるかに優れたGPUが必要になります。

これが新しいlocalGPTの簡単な紹介でした。これで遊んで、ローカルマシンにインストールし、遭遇している問題の種類を教えてください。それらすべてに対処したいと思います。既存のコードセットアップをクリーンアップするつもりです。

これは次の数週間、別のブランチとして残りますが、安定したバージョンができたら、これが新しいバージョンまたはlocalGPTの古いバージョンを置き換えて、メインブランチになります。

このプロジェクトがどこに導くか、実際に興奮しています。フィードバックをお聞かせください。この動画が役に立ったことを願っています。

コメント

タイトルとURLをコピーしました