Skip to main content
このチュートリアルでは、Pineconeをベクトルデータベースとして使用して検索拡張生成 (RAG) パイプラインを構築する方法について説明します。Boxに保存されたファイルからベクトル埋め込みを作成してPineconeに保存し、それらのベクトル埋め込みに対して大規模言語モデル (LLM) によるクエリを実行することで、コンテンツに関する質問に回答します。

RAGのコンセプトの概要

ベクトルデータベースとは

Pineconeはクラウドネイティブなマネージドベクトルデータベースです。ベクトルデータベースでは、埋め込みと呼ばれるデータのレプリゼンテーションを保存して取得するため、文字どおりに同一の結果ではなく、意味的に類似している結果を検出できます。これはセマンティック検索の基礎となります。

埋め込みとは

埋め込みとは、コンテンツの意味を数学的に表現したものです。埋め込みを生成するには、入力データを取得し、それを分割 (またはチャンク分割) したうえで、埋め込みモデルを使用して一連の浮動小数点値 ([0.3, 0.4, 0.1, 1.8, 1.1, ...]など) を作成します。 これらの値は、概念を高次元空間のポイントにマッピングしたものと考えることができます。互いに類似する概念は集合をなし、たとえば「猫」と「子猫」は近くなりますが、「バナナ」と「犬」は遠く離れます。異なる埋め込みモデルは、それぞれ異なるデータでトレーニングされ、特定のユースケース向けに特化している場合があります。

RAGがBoxおよびPineconeと連携する仕組み

通常のRAGワークフローには、以下のステップが含まれます。
  • インデックス作成: Boxフォルダのコンテンツが抽出、チャンク分割され、埋め込みモデルを使用して埋め込みに変換されます。これらの埋め込みは、ファイル名やBox内のソースファイルへの参照など、メタデータとともにPineconeに保存されます。
  • 取得: ユーザーが質問を行うと、その質問は同じモデルを使用して埋め込みに変換されます。Pineconeのクエリ機能が、質問との関連性が最も高いコンテンツチャンクを取得します。
  • 生成: 元の質問と取得されたコンテンツチャンクが組み合わされ、プロンプトとしてLLMに送信されます。そして、LLMがBoxコンテンツに基づいて回答を生成します。
LLMはBoxファイルに直接アクセスできません。RAGが関連するコンテキストを提供することで、このギャップが埋められるため、モデルはデータに基づいて正確な回答を生成できます。

前提条件

始める前に、以下が揃っていることを確認してください。
  • クエリの実行対象となるファイルが含まれたBoxフォルダ。フォルダには、Boxアプリケーションを作成するユーザーアカウントでアクセスできる必要があります。URLバーのフォルダIDをメモしてください。後で必要になります。
  • Pineconeアカウント無料のStarterプランにサインアップして、APIキーを生成します。
  • このチュートリアルの目的で使用するOpenAIアカウント。これは他の任意のLLMに置き換えることができます。OpenAIにサインアップして、APIキーを生成します。請求情報の入力が必要になる場合があります。
  • マシンにインストールされたPython

Boxカスタムアプリケーションの作成

Box開発者コンソールで、OAuthアプリケーションを作成します。
  1. 右上隅にある [新規アプリ] をクリックします。
  2. アプリ名を入力し、認証方法として [OAuth 2.0] を選択します。
  3. [アプリの作成] を選択します。
  4. [リダイレクトURI] まで下にスクロールして、http://127.0.0.1:5000/callbackを追加します。
  5. [アプリケーションスコープ] ですべてのチェックボックスをオンにします。
  6. [変更を保存] をクリックします。
クライアントIDクライアントシークレットをメモします。これらは構成ファイルに必要になります。

Pineconeインデックスの作成

  1. Pineconeコンソールにログインします。
  2. [Create Index (インデックスの作成)] をクリックします。
  3. インデックスに名前を付けます (例: pinecone-demo)。
  4. [Dimensions (次元)] フィールドを1024に設定します。
  5. 他の設定はすべてデフォルトのままにして、[Create Index (インデックスの作成)] をクリックします。
Pineconeインデックスの作成

Create a Pinecone index with 1024 dimensions

インデックス名をメモします。これは構成ファイルに追加します。
Pineconeインデックスの画面

The Pinecone index overview after creation

Pinecone APIを使用してプログラムでインデックスを作成することもできます。

コードリポジトリの初期化

サンプルコードをローカルマシンに複製します。
仮想環境を作成してアクティブ化します。
依存関係をインストールします。
サンプル構成ファイルをコピーして、自分の資格情報で更新します。
エディタでconfig.pyを開いて以下を入力します。
  • BoxのクライアントIDクライアントシークレット
  • BoxフォルダID
  • Pinecone APIキーインデックス名
  • OpenAI APIキー
構成ファイル

Fill in your credentials and folder ID in config.py

フォルダIDを0に設定しないでください。Boxアカウント全体のインデックス作成が試行されるため、この設定は推奨されません。レート制限が超過し、大量のリソースが消費され、インデックス作成はたいてい完了せずに失敗します。

埋め込みの作成と保存

構成が完了したところで、メインスクリプトを実行して、Boxコンテンツから埋め込みを作成します。
アプリケーションを初めて実行するとき、ブラウザウィンドウが開かれて、アクセス権限の付与を求められます。これはOAuth 2.0の標準的な承認フローです。[Boxへのアクセスを許可] をクリックします。
OAuthトークンは、プロジェクトディレクトリの.oauth.jsonファイルに保存されます。更新トークンは、最後の使用から60日間有効な状態が持続します。
スクリプトを実行すると、指定したBoxフォルダに含まれている各ファイルが処理され、が抽出されてチャンク分割されます。さらに、Pinecone推論APIを使用して埋め込みが生成され、それらがPineconeに保存されます。各ベクトルには、Boxのソースファイルへの参照など、メタデータが付加されます。 完了すると、Pineconeコンソールで埋め込みと関連するメタデータ (ファイル名やチャンクのプレーンテキストなど) を確認できます。このメタデータは、レスポンスのフィルタ処理やドキュメントのバージョン管理に役立ちます。
Pineconeコンソールの埋め込み

Embeddings with metadata in the Pinecone Console

LLMのクエリ

埋め込みが保存されると、Boxコンテンツについて質問できます。プロジェクトのこの部分では、OpenAIをLLMプロバイダとして使用します。 クエリスクリプトを実行します。
プロンプトに質問を入力します。スクリプトによって、質問が埋め込みに変換され、Pineconeから関連性が最も高いコンテンツチャンクが取得されます。それらのコンテンツチャンクが質問とともにOpenAIに送信され、回答が生成されます。
サービスからのクエリ回答

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の仕組みについて詳しく確認します。
最終更新日 2026年7月21日