RAGのコンセプトの概要
ベクトルデータベースとは
Pineconeはクラウドネイティブなマネージドベクトルデータベースです。ベクトルデータベースでは、埋め込みと呼ばれるデータのレプリゼンテーションを保存して取得するため、文字どおりに同一の結果ではなく、意味的に類似している結果を検出できます。これはセマンティック検索の基礎となります。埋め込みとは
埋め込みとは、コンテンツの意味を数学的に表現したものです。埋め込みを生成するには、入力データを取得し、それを分割 (またはチャンク分割) したうえで、埋め込みモデルを使用して一連の浮動小数点値 ([0.3, 0.4, 0.1, 1.8, 1.1, ...]など) を作成します。
これらの値は、概念を高次元空間のポイントにマッピングしたものと考えることができます。互いに類似する概念は集合をなし、たとえば「猫」と「子猫」は近くなりますが、「バナナ」と「犬」は遠く離れます。異なる埋め込みモデルは、それぞれ異なるデータでトレーニングされ、特定のユースケース向けに特化している場合があります。
RAGがBoxおよびPineconeと連携する仕組み
通常のRAGワークフローには、以下のステップが含まれます。- インデックス作成: Boxフォルダのコンテンツが抽出、チャンク分割され、埋め込みモデルを使用して埋め込みに変換されます。これらの埋め込みは、ファイル名やBox内のソースファイルへの参照など、メタデータとともにPineconeに保存されます。
- 取得: ユーザーが質問を行うと、その質問は同じモデルを使用して埋め込みに変換されます。Pineconeのクエリ機能が、質問との関連性が最も高いコンテンツチャンクを取得します。
- 生成: 元の質問と取得されたコンテンツチャンクが組み合わされ、プロンプトとしてLLMに送信されます。そして、LLMがBoxコンテンツに基づいて回答を生成します。
前提条件
始める前に、以下が揃っていることを確認してください。- クエリの実行対象となるファイルが含まれたBoxフォルダ。フォルダには、Boxアプリケーションを作成するユーザーアカウントでアクセスできる必要があります。URLバーのフォルダIDをメモしてください。後で必要になります。
- Pineconeアカウント。無料のStarterプランにサインアップして、APIキーを生成します。
- このチュートリアルの目的で使用するOpenAIアカウント。これは他の任意のLLMに置き換えることができます。OpenAIにサインアップして、APIキーを生成します。請求情報の入力が必要になる場合があります。
- マシンにインストールされたPython。
Boxカスタムアプリケーションの作成
Box開発者コンソールで、OAuthアプリケーションを作成します。- 右上隅にある [新規アプリ] をクリックします。
- アプリ名を入力し、認証方法として [OAuth 2.0] を選択します。
- [アプリの作成] を選択します。
- [リダイレクトURI] まで下にスクロールして、
http://127.0.0.1:5000/callbackを追加します。 - [アプリケーションスコープ] ですべてのチェックボックスをオンにします。
- [変更を保存] をクリックします。
Pineconeインデックスの作成
- Pineconeコンソールにログインします。
- [Create Index (インデックスの作成)] をクリックします。
- インデックスに名前を付けます (例:
pinecone-demo)。 - [Dimensions (次元)] フィールドを
1024に設定します。 - 他の設定はすべてデフォルトのままにして、[Create Index (インデックスの作成)] をクリックします。

Create a Pinecone index with 1024 dimensions

The Pinecone index overview after creation
コードリポジトリの初期化
サンプルコードをローカルマシンに複製します。config.pyを開いて以下を入力します。
- BoxのクライアントIDとクライアントシークレット
- BoxフォルダID
- Pinecone APIキーとインデックス名
- OpenAI APIキー

Fill in your credentials and folder ID in config.py
埋め込みの作成と保存
構成が完了したところで、メインスクリプトを実行して、Boxコンテンツから埋め込みを作成します。OAuthトークンは、プロジェクトディレクトリの
.oauth.jsonファイルに保存されます。更新トークンは、最後の使用から60日間有効な状態が持続します。
Embeddings with metadata in the Pinecone Console
LLMのクエリ
埋め込みが保存されると、Boxコンテンツについて質問できます。プロジェクトのこの部分では、OpenAIをLLMプロバイダとして使用します。 クエリスクリプトを実行します。
The query service returns an answer based on your Box content
機能強化のアイデア
イベントによるインデックス作成の自動化
イベントによるインデックス作成の自動化
サンプルでは、インデックス作成をオンデマンドで実行しています。Boxフォルダ内のファイルが変更されたときにトリガーされるを使用することで、スケジュール設定されたタスクやイベント駆動型のサービスを作成できます。スクリプトでアップサートを使用するため、再実行すると既存のレコードが更新されます。
ユーザーインターフェースの追加
ユーザーインターフェースの追加
このクエリスクリプトはコマンドラインから実行されています。Q&Aのユーザーエクスペリエンスを向上させるために、ウェブUIを作成できます。
さまざまな認証方法の使用
さまざまな認証方法の使用
デモではOAuth 2.0を使用しています。サーバー間のユースケースでは、認証や認証を統合できます。
モデルまたは構成の交換
モデルまたは構成の交換
ここでは、埋め込みでPinecone推論API、クエリスクリプトでOpenAIを使用しています。埋め込みモデル、LLMプロバイダ、ベクトルの次元、距離指標、チャンクサイズは、ユースケースに応じて別のものに置き換えることができます。
ファイルタイプのサポートの拡張
ファイルタイプのサポートの拡張
本チュートリアルのスクリプトは、Boxに (500 MB未満のサポート対象のファイルタイプで自動的に作成されます) があるファイルを処理します。その他のコンテンツタイプやより大きいファイルを処理できるように、サードパーティ製ライブラリを追加できます。
リソース
サンプルコード
GitHubにあるBoxとPineconeの統合サンプルリポジトリを複製します。
Pineconeのドキュメント
ベクトルデータベースとPineconeの仕組みについて詳しく確認します。
