ちょっと話題の記事

ChatGPTで自前のドキュメントを利用できるプラグイン、「ChatGPT Retrieval Plugin」の概要

ChatGPTで自前のドキュメントを利用できるプラグイン、「ChatGPT Retrieval Plugin」がGithubで公開されたため、READMEを読んで自分なりにまとめてみました。
2023.03.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2023年3月23日、OpenAI社はChatGPTでのプラグインの立ち上げを発表しました

これにより、ChatGPTとさまざまな情報を組み合わせることができるようになり、ChatGPTが利用できるシーンはさらに多様になっていくと予想されます。

この発表と併せて、OpenAI社のGithubリポジトリで、「ChatGPT Retrieval Plugin」が公開されました。

このプラグインにより、ChatGPTで自前のドキュメントを利用する(つまり、自前のドキュメントの情報をもとにしたQ&Aなどができる)ようになるようです。

2023年3月24日現在、まだChatGPTのプラグイン自体は利用するにはWaitlistに登録して順番を待たなければいけない状態です。そのため、このプラグインをいまいま試すことはできないのですが、Github上のREADMEを読み解いて、どんなことができるかなどざっくりまとめてみたいと思います。

概要

以下、READMEでのプラグインの説明からざっくり要約します:

  • ChatGPT Retrieval Pluginは、個人や組織のドキュメントのセマンティック検索(※)を可能にするChatGPTのプラグインである
  • ファイルやノート、メールなどをデータソースとして利用することができ、質問に最も関連性の高いドキュメントのスニペットを取得できる
  • これにより、企業は、社内のドキュメントを従業員にChatGPTを介して提供することが可能となる

要するに、社内のドキュメントをChatGPTで利用できる、ということです。

※セマンティック検索...検索ユーザの意図・目的を適切に理解し、ユーザの求める結果を提供する概念のこと

仕組みについて

どういう仕組みで実現するのか?という点についても、上記の説明文に記載があります。

  • ドキュメントをチャンク、つまり一定の塊ごとに切り出して、OpenAIのembedding modelであるtext-embedding-ada-002を使用してembeddings(文章をベクトル表現に変換した情報)を生成する
  • それらをバックエンドのベクターデータベースに保存する
    • ベクターデータベースは複数に対応
  • これらのベクターデータベースに対してしてクエリを行う

この仕組み自体は、サードパーティツールであるLlamaIndexを利用する場合とあまり変わらないかと思います。LlamaIndexでも、同様にローカルのデータをチャンクに分割しembedding情報を取得し、その情報をインデックスとして保存。クエリに近い情報をインデックスから探して、その情報をコンテクストとしてChatGPTに伝えたます。LlamaIndexの仕組みについては、以前私が別にブログ記事を書いていますのでご参照ください。

現状、ベクターデータベースとして利用できるデータストアは下記となります。

APIエンドポイント

ChatGPT Retrieval PluginではFastAPIによりAPIエンドポイントを構築します。 このエンドポイント経由で、データの追加・更新・削除やクエリが行えるようです。

README上で説明されているAPIエンドポイントの種類は下記の通りです。

エンドポイント 概要
/upsert 1つ以上のドキュメントをアップロードして、テキストとメタデータをベクターデータベースに保存する。ドキュメントは約200トークン単位でチャンクに分割される
/upsert-file 単一のファイル(PDF, TXT, DOCX, PPTX, MD)をアップロードして、テキストとメタデータをベクターデータベースに保存する。ファイルはプレーンテキストに変換され、約200トークン単位でチャンクに分割される
/query ベクターデータベースへクエリを行う。オプションとしてfiltertop_kが指定できる。filterでは、ソースやURL、著者、作成日時などを指定できる。top_kでは、ベクターデータベースからどれくらいの結果を返すかを指定する(デフォルトは3)
/delete ベクターデータベース内の1つ以上のドキュメントを削除する。idもしくはfilterにより削除対象を指定できるほか、delete_allで全てのドキュメントの削除もリクエストできる

READMEでは、継続的なドキュメントの追加・削除のため、ZapierやMakeを利用してこれらのエンドポイントを叩くIncoming webhooksを設定、定期的な情報の同期を勧めています。 詳しくはREADMEのWebhooksに関する記述を参照してください。

動作プラットフォーム

このプラグインは、クラウド上のDockerコンテナが動作するプラットフォームにホスト可能ということです。 READMEで挙げられているのはFly.io、Heroku、Azure Container Appsなどでしたが、AWSでももちろん動かすことはできるでしょう。

セキュリティについて

このプラグインの利用にあたって、セキュリティ面での配慮は気になるところです。

READMEにセキュリティに関する記述がありましたので、こちらも簡単に要約してみます:

  • Retrieval Pluginは、ChatGPTにベクターデータベースのコンテンツを検索させ、その中から最適な結果をChatGPTのセッションに追加する
  • このため、外部的な影響はない(※その時のChatGPTのセッションにだけ利用され、その情報が別に利用されることがない、ということかと思います)
  • なので、主なリスクの検討事項はデータの認可とプライバシーとなる。開発者は、自分たちが許可を得ており、ユーザーのChatGPTセッションに表示されても問題ないコンテンツのみを、Retrieval Pluginに追加するべき。
  • プラグインのセキュリティを確保するために、認証機能を設定することができる

ということになります。自分たちが許可を得ているコンテンツだけを使うこと、というのは当然ですが重要な点ですね。

いちおう個人情報への配慮という点では、データを取り込む際に個人情報(PII)を取り込むことを防ぐモジュールが標準で用意されています。(pii_detection.py

これにより、ベクターデータベースに個人情報が保存されることを防ぐことはできそうです。ただし、こちらは上記のソースを見ると分かるように、テキストをいったんChatGPTに送って「個人情報が含まれていないか」を判定してもらう、という挙動になっています。そのため、個人情報が実際存在した場合、ChatGPTに一度は情報が渡ってしまう、という点は留意する必要があります。

認証

上記のセキュリティの説明に書きましたが、プラグインには認証機能が設定できます。これにより、認可したユーザーのみにプラグインを利用させることができます。 現状、HTTP BearerやOAuthが利用できるようです。 (もちろん、Publicに利用してよい情報であれば、もちろん認証しない、というオプションも取ることが可能です)

詳しい説明は公式READMEの認証の記述を参照してください。

制限

Retrieval Pluginには、現状いくつかの制限や課題があることが、README上でも述べられています。 以下に、READMEでの制限事項の記述をざっくり翻訳しました。すでに説明した注意事項も含まれています。

  • キーワード検索の制限 : text-embedding-ada-002モデルで生成されたembeddingsは、必ずしもキーワードの完全一致に有効とは限らない(ので、最適でない結果を返す可能性もある)
  • 機密データの取り扱い : 機密データを自動的に検出したり、フィルタリングする機能は持たない(そのため、許可されたコンテンツのみを読み込ませるべき。データプライバシー要件などを確認するのは開発者の責任)
  • スケーラビリティ : プラグインの性能はベクターデータベースのプロバイダーやデータのサイズに依存する
  • 言語サポート : text-embedding-ada-002は英語での使用に最適化している(ただし様々な言語でも十分に良い結果を生成できるはず)
  • メタデータの抽出 : オプションのメタデータの抽出機能は、言語モデルに依存してドキュメントのテキストから情報を抽出する。このプロセスは正確とは限らず、文章・構造によって変わる可能性がある。
  • PII(個人情報)の検出 : (セキュリティの項目で紹介した)オプションのPII検出機能は、個人を特定できる情報のすべてのインスタンスを検出できない可能性がある。このため、この機能は慎重に使用し、自身のユースケースで有効性を確認すること。

これらの点に留意しつつ、利用する必要があります。

おわりに

ということで、READMEの情報をざっとまとめてみました。かなりボリュームのあるREADMEなので、自分の理解のためにも読みながらまとめた次第です。 ChatGPTの公式プラグインで自前のドキュメントが利用できるようになるのは非常にインパクトがある話で、今後企業でのChatGPT利用が加速していきそうですね。

READMEにはここで紹介した情報以外にセットアップ手順なども含まれていますが、今回の記事では割愛しました。 実際に自分でセットアップができたら、また記事にしようと思います。

ではでは。