1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloud × GPTsでお手軽RAGチャットボットを作ろう!

Posted at

概要

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.のファイルをアップロードします
GCS.png

1-3. Vertex AI Agent BuilderのWebコンソール画面から検索アプリを作成します

  1. 「アプリを作成する」→「検索」を選択します
  2. 構成の設定は以下の通りです
    • 内容:汎用
    • Enterpriseエディションの機能:OFF
    • 高度なLLM機能:OFF
    • アプリ名:適当
    • 会社または組織名:適当(「test」等でOK)
    • アプリのロケーション:global(グローバル)
  3. 「データストアを作成」→Cloud Storageを「SELECT」します
  4. 設定項目は以下の通りです
    • 1-1.のファイルが
      • PDFやOffice形式(WordやPowerPoint)、TXTファイル:「非構造化ドキュメント(PDF、HTML、TXTなど)」
      • JSONL:「構造化データ(JSONL)」
    • 同期の頻度:1回限り
    • 2.でアップロードしたファイルもしくはファイルを配置したフォルダを選択
  5. 「構造化データ(JSONL)」を選択すると、スキーマの確認が挟まります。JSONL作成時に意図したスキーマであれば、「続行」
  6. データストア名を入力して「作成」
    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
  7. 画面が戻るので、作成したデータストアにチェックを入れて「作成」
  8. データストアの画面に遷移するので、「アクティビティ」タブからドキュメントのインポートが正常に完了しているかどうかを確認します
    Vertex_AI_Agent_Builder_datastore.png

2. OAuth 2.0 クライアント IDの用意

2-1. OAuth同意画面を作成します

  1. 左上のハンバーガーメニューから「APIとサービス > OAuth同意画面」を選択

  2. 「User Type」は「外部」を選択
    OAuth認証画面1.png

  3. アプリ情報は以下を登録

    • アプリ名:適当
    • ユーザーサポートメール:自分のメールアドレス
    • デベロッパーの連絡先情報:自分のメールアドレス(ユーザーサポートメールと同一でも可)
      OAuth認証画面2.png
      OAuth認証画面3.png
  4. 「スコープ」「テストユーザー」はデフォルトのまま「保存して次へ」

  5. 入力内容を一通り確認し、「ダッシュボードへ戻る」をクリック

  6. 遷移後の画面で「公開ステータス」の「アプリを公開」をクリック
    OAuth認証画面4.png

2-2. 認証情報の作成

  1. サイドバーから「認証情報」を選択

  2. 画面上部の「認証情報を作成 > OAuthクライアントID」を選択
    GCP_OAuthクライアント.png

  3. 以下の項目を設定します

    • アプリケーションの種類:ウェブアプリケーション
    • 名前:適当
      OAuth_client作成.png
  4. ポップアップ画面の「JSONをダウンロード」をクリック
    OAuth_ポップアップ.png

3. GPTsの設定

3-1. GPTsを新規作成し、 各項目を設定する(actions以外)

  1. 以下のURLにアクセスし、左上の「GPTを探す」を選択します
    GPTs_新規作成.png

  2. 遷移した画面右上の「作成する」をクリックします

  3. 以下の項目を設定します

    • 名前:適当
    • 説明:適当
    • 指示:システムプロンプトを入力します
    • 機能:すべてチェックを外します
      GPTs_設定.png
  4. 「コールバックURL」をコピーし、GCPのWebコンソールに戻り、2-2.で作成した認証情報を選択する。承認済みの「リダイレクトURI」で「URIを追加」をクリックし、コピーしたURIを貼り付け、「保存」をクリックします
    GPTs_コールバックURL.png

コールバックURL登録.png

3-2. actionsを設定します

  1. アクションの項目をクリックします

  2. 遷移した画面の「認証」をクリックし、以下の通りに設定します

    • 認証タイプ: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 リクエスト)
      認証情報の設定.png
      参考:Cloud Storage OAuth 2.0 スコープ | Google Cloud
  3. スキーマを以下の通りに設定します

    {
      "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はコンソール画面左上のプロジェクト名のボタンから確認できます。
GCP_console.png

検索アプリIDはVertex AI Agent Builderのアプリ一覧から確認できます。
Vertex_AI_Agent Builder.png

  1. 「利用可能なアクション」の「テストする」をクリックします
    GPTs_テストする.png

  2. 「discoveryengine.googleapis.comでサインインする」をクリックします
    (画像は異なるタイミングのスクリーンショットですが、参考までに)
    Actions_テスト1.png

  3. Googleの認証画面が表示されるので、GCPアカウントでログインします

  4. 画面が自動で遷移し、「接続しました」と表示されたら成功です

  5. もう一度「利用可能なアクション」の「テストする」をクリックします

  6. 「確認する」をクリックして、APIが正常に叩かれていることを確認します
    Actions_テスト2.png
    テスト成功.png

成果物

お母さんの優しさが胸に染み入ります。
成果物.png

感想

OAuth 2.0で沼るかと思いましたが、思ったより簡単に実装できて驚きました。
プロンプトエンジニアリングや検索システムのチューニングなど、RAG実装の重要なポイントはカスタマイズできる余地があり、RAGのエッセンスを学ぶ良い教材になると思いました

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?