概要
GPT Actionsを使えば簡単にRAGチャットボットを作れるかもしれない!と友人が教えてくれたので、個人的に最推しな検索システムVertex AI Agent Builderを使ってRAGチャットボットを作ってみました。
GoogleアカウントとChatGPTのアカウントがあれば、簡単に作れます。
友人が教えてくれた技術記事:RAGで独自知識を回答~GPTs Actionsで簡単チャットbot開発
GPTs作成手順
1. 検索システムの準備
参考:Vertex AI Search の検索ウィジェットを埋め込んだ Web アプリを構築してみた
1-1. 検索システムに投入するドキュメントを用意します
PDFやOffice形式(WordやPowerPoint)、TXTファイル、JSONLファイルなど。
参考:アプリとデータストアについて | Vertex AI Agent Builder | Google Cloud
今回、私は以下のような料理のレシピを格納したJSONLファイルを用いました。
{
"title": "レシピ名",
"ingredients": [
{ "name": "材料名1", "amount": "量" },
{ "name": "材料名2", "amount": "量"},
// 中略
{ "name": "材料名X", "amount": "量" }
],
"steps": [
"1. 手順1",
"1. 手順2",
// 中略
"1. 手順X",
],
"cooking_time": "20分",
"description": "レシピの説明"
}
{
"title": "レシピ名",
"ingredients": [
{ "name": "材料名1", "amount": "量" },
{ "name": "材料名2", "amount": "量"},
// 中略
{ "name": "材料名X", "amount": "量" }
],
"steps": [
"1. 手順1",
"1. 手順2",
// 中略
"1. 手順X",
],
"cooking_time": "20分",
"description": "レシピの説明"
}
// 以下省略
1-2. Google Cloud Storage(GCS)にファイルをアップロードします
GCS上に適当なバケットを作成し、1.のファイルをアップロードします
1-3. Vertex AI Agent BuilderのWebコンソール画面から検索アプリを作成します
- 「アプリを作成する」→「検索」を選択します
- 構成の設定は以下の通りです
- 内容:汎用
- Enterpriseエディションの機能:OFF
- 高度なLLM機能:OFF
- アプリ名:適当
- 会社または組織名:適当(「test」等でOK)
- アプリのロケーション:global(グローバル)
- 「データストアを作成」→Cloud Storageを「SELECT」します
- 設定項目は以下の通りです
- 1-1.のファイルが
- PDFやOffice形式(WordやPowerPoint)、TXTファイル:「非構造化ドキュメント(PDF、HTML、TXTなど)」
- JSONL:「構造化データ(JSONL)」
- 同期の頻度:1回限り
- 2.でアップロードしたファイルもしくはファイルを配置したフォルダを選択
- 1-1.のファイルが
- 「構造化データ(JSONL)」を選択すると、スキーマの確認が挟まります。JSONL作成時に意図したスキーマであれば、「続行」
- データストア名を入力して「作成」
1-1.のファイルがPDFやOffice形式(WordやPowerPoint)場合は、「ドキュメント処理オプション」で「ドキュメントの解析」と「ドキュメントのチャンキング」を以下のように設定すると良さそうです。- ドキュメントの解析
- テキストと画像を含むPDF:OCR Parser
- HTML、PDF(恐らく、テキストのみの場合)、または DOCX:Layout Parser
- (特に以上2つを選択しない場合はDigital Parserが選択される模様)
- 高度なチャンク構成を有効にする:ON
参考:Parse and chunk documents | Vertex AI Agent Builder | Google Cloud
- ドキュメントの解析
- 画面が戻るので、作成したデータストアにチェックを入れて「作成」
- データストアの画面に遷移するので、「アクティビティ」タブからドキュメントのインポートが正常に完了しているかどうかを確認します
2. OAuth 2.0 クライアント IDの用意
2-1. OAuth同意画面を作成します
-
左上のハンバーガーメニューから「APIとサービス > OAuth同意画面」を選択
-
アプリ情報は以下を登録
-
「スコープ」「テストユーザー」はデフォルトのまま「保存して次へ」
-
入力内容を一通り確認し、「ダッシュボードへ戻る」をクリック
2-2. 認証情報の作成
-
サイドバーから「認証情報」を選択
-
以下の項目を設定します
3. GPTsの設定
3-1. GPTsを新規作成し、 各項目を設定する(actions以外)
-
遷移した画面右上の「作成する」をクリックします
-
以下の項目を設定します
-
「コールバックURL」をコピーし、GCPのWebコンソールに戻り、2-2.で作成した認証情報を選択する。承認済みの「リダイレクトURI」で「URIを追加」をクリックし、コピーしたURIを貼り付け、「保存」をクリックします
3-2. actionsを設定します
-
アクションの項目をクリックします
-
遷移した画面の「認証」をクリックし、以下の通りに設定します
- 認証タイプ:OAuth
- クライアントID:「2-2. 認証情報の作成」の項番4でダウンロードしたJSONファイルの「client_id」の値
- クライアントシークレット:「2-2. 認証情報の作成」の項番4でダウンロードしたJSONファイルの「client_secret」の値
- 認証URL:「2-2. 認証情報の作成」の項番4でダウンロードしたJSONファイルの「auth_url」の値
- トークンURL:「2-2. 認証情報の作成」の項番4でダウンロードしたJSONファイルの「token_url」の値
- スコープ:https://www.googleapis.com/auth/cloud-platform
- トークン交換メソッド:デフォルト(POST リクエスト)
参考:Cloud Storage OAuth 2.0 スコープ | Google Cloud
-
スキーマを以下の通りに設定します
{ "openapi": "3.1.0", "info": { "title": "Get recipe data", "description": "Retrieves Japanese home-cooked recipe.", "version": "v1.0.0" }, "servers": [ { "url": "https://discoveryengine.googleapis.com" } ], "paths": { "/v1/projects/[プロジェクトID]/locations/global/collections/default_collection/engines/[検索アプリID]/servingConfigs/default_search:search": { "post": { "description": "Search for Japanese home-cooked recipe based on search query", "operationId": "GetRecipe", "parameters": [ { "name": "query", "in": "query", "description": "Ingredients used in recipes", "required": true, "schema": { "type": "string" } }, { "name": "pageSize", "in": "query", "description": "The number of recipes to retrieve", "required": true, "schema": { "type": "number" } } ], "deprecated": false } } }, "components": { "schemas": {} } }
paths
に記載しているパスの[プロジェクトID]と[検索アプリID]は適宜置き換えてください。
プロジェクトIDはコンソール画面左上のプロジェクト名のボタンから確認できます。
検索アプリIDはVertex AI Agent Builderのアプリ一覧から確認できます。
-
「discoveryengine.googleapis.comでサインインする」をクリックします
(画像は異なるタイミングのスクリーンショットですが、参考までに)
-
Googleの認証画面が表示されるので、GCPアカウントでログインします
-
画面が自動で遷移し、「接続しました」と表示されたら成功です
-
もう一度「利用可能なアクション」の「テストする」をクリックします
成果物
感想
OAuth 2.0で沼るかと思いましたが、思ったより簡単に実装できて驚きました。
プロンプトエンジニアリングや検索システムのチューニングなど、RAG実装の重要なポイントはカスタマイズできる余地があり、RAGのエッセンスを学ぶ良い教材になると思いました