BoxがAIへの取り組みをさらに進める中、このチュートリアルおよびPineconeとの統合をリリースすることになりました。LLM (大規模言語モデル)、RAG (検索拡張生成)、生成AI分野にまだ詳しくない方に説明すると、Pineconeは、マネージド型のクラウドネイティブなベクトルデータベースです。高性能なAIアプリケーションに長期メモリを提供する、インフラストラクチャに左右されることのないシンプルなAPIが用意されています。BoxとPineconeを関連付けることで、カスタムベクトル埋め込みのカスタマイズと管理が可能になるため、LLMはこの埋め込みを使用してより関連性の高い回答を提供できるようになります。独自のコンテンツサイロからPineconeに追加のコンテキストを提供することで、他からは得られない情報を得ることができるようになります。たとえば、追加のデータをQ&Aボットで使用できます。これは、今回作成しようとしているものです。
RAGの概念の概要
デモに進む前に、RAGの重要な概念を確認しましょう。これは、RAGが非常に優れている理由を理解するのに役立ちます。
ベクトルデータベースとは
前述のとおり、Pineconeはクラウドベースのベクトルデータベースですが、これは厳密には何を意味するのでしょうか。簡単に言えば、埋め込みと呼ばれるデータ表現を保存および取得する手段であり、これにより、文字通り同じではないものの、意味が似ている結果を見つけることができます。
埋め込みとは
埋め込みとは、コンテンツの意味を数学的に表現したものです。入力データを取得して、分割またはチャンク化し、(一部のLLMが提供する) 埋め込みモデルを使用して、浮動小数点数値で構成される文字列 (例: [0.3,0.4,0.1,1.8,1.1…]) を出力することで生成されます。これらの値は、アイデアを点として空間にマッピングしたものと考えることができます。さまざまなデータでトレーニングされている埋め込みモデルが数多くあり、特定のユースケースに特化したものもあります。
下の図では、3次元空間に多くのドットが見えています。この例で、各ドットは名詞を表していますが、Boxの場合はコンテンツを表します。空間全体がデータベースを表し、各ドットが特定のものを表す場合、類似したものはグループ化されます。Cat (猫) はKitten (子猫) に非常に近いですが、やはり別の点になります。Banana (バナナ) とDog (犬) は非常に離れています。

ベクトルデータベースのグラフの例: 出典 — Weaviate
関連付けられたこれらのデータを、後からQ&Aボットなどで使用するには、どこかに保存する必要があります。ここで、Pineconeの登場です。下のSTORE列に示すように、埋め込みは、後で検索によって取得できるように、ファイル名などの他の関連メタデータと共にベクトルデータベースに格納されます。

埋め込みの作成方法: 出典 — Langchain
これらすべてが連携する仕組み
たとえば、ユーザーがBoxフォルダに保存されているコンテンツについて質問するとします。以下に、この動作の典型的なフローを示します。
LLMは、Boxフォルダ内のコンテンツを認識せず、アクセス権限もありません。したがって、質問に一致する情報を抽出し、その情報をLLMに渡して、LLMが回答の生成に必要な情報を得られるようにする必要があります。
以前に作成した埋め込みは、RETRIEVEブロックに示すようにPineconeに保存されます。入力した質問は、コンテンツを変換したのと同じ埋め込みモデルを使用して埋め込みに変換されます。Pineconeのクエリ機能を使用すると、質問に関連するコンテンツのサブセクション (青色でハイライト) が取得されます。質問と、コンテンツの選択されたセクションによってプロンプトが作成され、ユーザーの質問に答えるためにLLMに送信されます。

RAGアプリのワークフロー例: 出典 — Langchain
デモ
仕組みについて理解が深まったところで、指定したBoxフォルダに対する埋め込みを作成し、Pineconeに保存する方法についてデモを紹介します。このデモには、質問を送信して、サードパーティ製LLMプロバイダから回答を取得するためのクエリ機能も含まれています。
前提条件
- 質問の対象となるデータのサブセットを含むBoxフォルダを作成する必要があります。今回は、異なる項目をいくつか含めました。Boxに関連した項目もあれば、関連しない項目もあります。このフォルダには、Boxアプリケーションを作成したユーザーアカウントからアクセスできる必要があります。URLのバーに表示されているフォルダIDを書き留めておきます。これをconfig.pyファイルに入力します。
Boxフォルダとその中のコンテンツ
- Pineconeアカウントが必要です。無料のStarterプランにサインアップし、APIキーを取得します。その後、APIキーをconfig.pyファイルに入力します。
- このデモでは、ユーザーの質問への応答にOpenAIも使用します。OpenAIにサインアップし、APIキーを取得します。ほとんどの場合、支払い情報を添付する必要があります。APIキーをconfig.pyファイルに入力します。
- マシンにPythonをインストールしておく必要があります。
Boxのカスタムアプリケーションを作成する
Box開発者コンソールでOAuthアプリを作成します。これを行うには、以下の手順に従います。
- Box開発者コンソールに移動した後、右上にある [アプリの新規作成] をクリックします。[カスタムアプリ] を選択し、フォームに入力して、[次へ] をクリックします。
- [ユーザー認証 (OAuth 2.0)] を選択し、[アプリの作成] をクリックします。
- [リダイレクトURI] まで下にスクロールし、リダイレクトURI http://127.0.0.1:5000/callbackを追加します。
- [アプリケーションスコープ] のすべてのチェックボックスをオンにします。
- [変更を保存] をクリックします。
- クライアントIDとクライアントシークレットをメモします。これらは、後ほどconfig.pyファイルで必要になります。
Pineconeインデックスを作成する
Pineconeのコンソールにログインすると、[Create Index (インデックスの作成)] というボタンが表示されます。クリックすると、以下の画面が表示されます。インデックスに名前を付け、[Dimensions (ディメンション)] フィールドに1,024と入力します。他はすべてデフォルトのままにし、[Create index (インデックスの作成)] をクリックします。
注 — この手順はPinecone APIを使用してプログラムで実行することもできますが、ここでは、非常に直感的で優れた外観のPineconeのUIで紹介しました。

Pineconeインデックスを作成する
作成が完了すると、以下の画面が表示されます。インデックス名 (この場合はpinecone-demo) を書き留めておきます。これはconfig.pyファイルに追加します。

Pineconeインデックスの照会画面
コードリポジトリを初期化する
ターミナルまたはコマンドプロンプトを開きます。ローカルマシンにコードを複製します。
cd box-pinecone-sample
仮想環境を作成し、有効にします。
source venv/bin/activate
依存関係をインストールします。
sample_config.pyファイルをコピーします。
任意のエディタでコードを開きます。資格情報とBoxフォルダIDを、前に書き留めておいた情報で更新します。ファイルを保存します。
警告 — フォルダIDとして0を入力しないでください。0を入力すると、Boxアカウント全体に対してインデックスを作成しようとします。これは推奨されないだけでなく、レート制限を超過し、多額の費用がかかり、高い確率で完了できません。

config.pyの情報を入力する
埋め込みを作成して保存する
上記の作業がすべて完了したら、埋め込みを作成できるようになります。
ターミナルまたはコマンドプロンプトで、次のコマンドを実行します。
アプリケーションを初めて実行すると、アプリケーションへのアクセスを許可するよう求めるポップアップがブラウザに表示されます。これは、おそらく以前にも見たことのある標準的なOAuth 2.0のプロセスです。[Boxへのアクセスを許可] をクリックします。

[Boxへのアクセスを許可] をクリックする
下のウィンドウが表示されれば成功です。接続用のトークンは、プロジェクト内の.oauth.jsonというファイルに保存されます。60日ごとにアプリケーションを使用する場合、更新トークンは引き続き有効です。このウィンドウを閉じると、ターミナルに戻ることができます。

このタブを閉じる
スクリプトでファイルが処理されているのがわかります。

フォルダ内のファイルを処理しているスクリプト
完了したら、Pineconeのコンソールにアクセスして、作成された埋め込みを確認できます。このサンプルには、Box内のファイルへの参照、ドキュメントのチャンクのプレーンテキストなど、便利なメタデータも添付されています。このメタデータは、後で応答にフィルタをかける場合やドキュメントのバージョン管理などの作業を行う場合に使用できます。

Pineconeのコンソールに表示された埋め込み
LLMに対してクエリを実行する
埋め込みが作成され、保存されたので、LLMに質問を送信して結果を取得する方法を見てみましょう。Pineconeにはプロジェクトのこの部分を実行できるAPIがないため、サードパーティ製のLLMを使用する必要があります。このデモではOpenAIを使用します。
ターミナルで、次のコードを実行します。
Boxに保存されているコンテンツに関する質問を入力します。ブログの作者の場合は主にBoxファイルリクエストAPIに関するコンテンツなので、これらのエンドポイントについて質問します。

クエリソリューションに質問する
サービスから回答が返されます。

クエリサービスからの回答
機能強化に関するアイデア
この最初のデモは比較的簡素なものですが、いくつかの機能強化を行うことでより高度なものにすることもできます。
- 現在、サンプルコードはアドホックな方法で実行されています。Boxフォルダの更新に基づいて実行される、スケジュール設定されたタスクまたはWebhookサービスを作成できます。これにより、スクリプトの実行が自動化されます。スクリプトによってデータがアップサートされるため、main.pyファイルを実行すると、すべてのレコードが更新されます。
- クエリスクリプトは、コマンドラインから実行しています。ユーザーが操作できるUIを作成することもできます。
- JWTやCCGなど、Boxの他の認証方法を追加できます。
- AI/MLモデルは変更可能です。現在、埋め込みは新しいPineconeの推論APIを使用して作成されており、クエリスクリプトはLLMとしてOpenAIを使用しています。これらのすべてまたは一部をニーズに合わせて変更できます。
- ベクトルデータベースのディメンション、メトリック、チャンクサイズなど、他の構成オプションもすべてカスタマイズ可能です。
- mainスクリプトでは、指定したBoxフォルダ内の、テキストレイヤーを含むすべてのファイルを処理します。Boxによって、これらのファイルのテキストレプリゼンテーションが自動的に作成され、スクリプトではこのテキストを使用して埋め込みを作成します。ファイルにテキストレプリゼンテーションがない場合、このソリューションは機能しません。また、500 MB未満のファイルでのみ機能します。ユースケースに基づいて、すべての種類のコンテンツをより充実させるサードパーティ製ライブラリを追加することもできます。
関連リソース
Box AI Platform APIに関するサンプルコードやチュートリアルなどについては、Box AI Developer Zoneをご覧ください。
Box AI Platform APIのエンドポイントを使用するには、Enterprise Plusをご利用のお客様である必要があります。開発者コンソールで適切なBox AIスコープを指定して作成したアプリケーションが必要なほか、BoxインスタンスでBox AIを有効にしておく必要があります。
🦄 Box Platformの他のエキスパートと交流したい場合は、サポートや知識共有のためのBox Developer Community (英語のみ) にご参加ください。
- トピックス:
- 開発者