Gemini を使用して AI データ探索エージェントを構築する

ビジネス システムのプログラミング インターフェース用に AI を活用したチャット インターフェースを構築し、同僚がビジネスデータについて質問できるようにします。組織のデータの分析と報告は、ビジネスの方法を改善するうえで不可欠です。問題の発見、トレンドの発見、結果の調査はすべて、適切なデータがあれば可能ですが、デベロッパーにとって、コーディング以外の同僚が適切なデータを発見できるよう支援することは容易ではありません。

SQL Talk プロジェクトは、生成 AI テクノロジーを使用してビジネスデータに関する質問に回答するオープンソース アプリケーションです。このプロジェクトでは、Gemini API と関数呼び出し機能を使用して、ビジネスデータに関する質問を SQL クエリと API 呼び出しに変換し、結果を平文に戻します。このプロジェクトは、1 回限りのコードを大量に記述することなく、独自のビジネス用のデータ エージェントを構築するための出発点として使用できます。これにより、同僚が回答を得られるようになります。

プロジェクトの概要と、プロジェクトの構築者からの分析情報を含むプロジェクトを拡張する方法については、AI データ エージェント | Google AI で構築をご覧ください。それ以外の場合は、次の手順でプロジェクトの拡張を開始できます。

SQL Talk プロジェクト アプリケーションのユーザー インターフェース

図 1. SQL Talk プロジェクト アプリケーションのユーザー インターフェース。

プロジェクトの設定

ここでは、開発とテスト用に SQL Talk プロジェクトをセットアップする手順について説明します。一般的な手順は、SQL トーク プロジェクトの作成、Google Cloud Shell エディタ開発プロジェクトの設定、Google Cloud プロジェクト ID の取得、スクリプトを使用したプロジェクト設定の構成です。以下では、Cloud Shell エディタを使用してプロジェクトを設定する方法について説明します。これにより、プロジェクトの設定、実行、更新をすばやく簡単に行うことができます。

プロジェクトの Cloud Shell インスタンスを作成する

SQL トーク プロジェクトを設定するには、プロジェクト リポジトリのクローンを Cloud Shell インスタンスに作成します。このプロセスでは、プロジェクトの Google Cloud インフラストラクチャ内に仮想開発環境インスタンスを設定し、その仮想環境にコード リポジトリのクローンを作成します。

SQL Talk 用の Cloud Shell インスタンスを作成するには:

このリンクにより、Google Cloud Shell エディタ インスタンスが設定され、SQL Talk のリポジトリのクローンがインスタンスに作成されます。

SQL Talk プロジェクト コードが表示された Google Cloud Shell エディタ

図 2. Google Cloud Shell エディタの開発環境にクローン作成された SQL Talk プロジェクトのクローン。

Cloud プロジェクト ID を取得する

SQL Talk プロジェクトでは、Google Cloud プロジェクト ID を使用して、Gemini モデルを含む Google Cloud サービスに接続します。アプリケーションがこれらのサービスに接続できるように、Cloud Shell エディタ内でプロジェクト ID を構成します。

Cloud Shell エディタをプロジェクト ID に接続するには:

  1. 必要に応じて、Google Cloud コンソールに移動してログインします。
  2. 既存の Cloud プロジェクトを選択するか、新しいプロジェクトを作成します
  3. プロジェクトの Cloud プロジェクト ID をメモします。
  4. エディタ インスタンスをプロジェクトに接続し、プロジェクトを構成します。Cloud Shell エディタ ウィンドウで、ターミナル パネルで次のコマンドを入力します。

    gcloud config set project YOUR_PROJECT_ID
    

SQL Talk プロジェクトを構成する

SQL Talk プロジェクトでは、BigQuery データベース サービスや Vertex AI API などの Google Cloud サービスを使用して Gemini モデルに接続します。SQL Talk プロジェクトには、必要な Google Cloud サービスでプロジェクトを構成し、プロジェクトのデフォルト バージョンを起動する setup.sh スクリプトが含まれています。

プロジェクトの Cloud Shell エディタ インスタンスを構成して実行するには:

  1. Cloud Shell エディタ ウィンドウのターミナル パネルで、Cloud Shell SQL Talk(/sql-talk-app)プロジェクト ディレクトリに移動します。

    cd ~/cloudshell_open/generative-ai/gemini/function-calling/sql-talk-app
    
  2. ターミナルパネルで、次のコマンドを入力します。

    bash setup.sh
    

設定スクリプトが正常に完了すると、Cloud Shell エディタのターミナル ウィンドウに次のようなメッセージが表示されます。このメッセージは、設定プロセスに成功し、SQL Talk アプリケーションが実行されていることを示します。

You can now view your Streamlit app in your browser.
Network URL: http://##.##.##.##:8080
External URL: http://##.##.##.##:8080

プロジェクトをテストする

SQL Talk プロジェクトの設定が完了したら、アプリケーションをテストして、期待どおりに機能していることを確認できます。設定スクリプトを実行すると、アプリケーションが自動的に起動します。アプリケーションを再起動するには、次の手順を行います。

SQL トーク アプリケーションを実行するには:

  1. Cloud Shell エディタがアイドル状態で接続が切断されている場合は、Cloud プロジェクト ID への再接続が必要になることがあります。

    gcloud config set project YOUR_PROJECT_ID
    
  2. Cloud Shell エディタ ウィンドウのターミナル パネルで、Cloud Shell SQL Talk プロジェクト ディレクトリに移動します。

    cd ~/cloudshell_open/generative-ai/gemini/function-calling/sql-talk-app
    
  3. ターミナルパネルで、次のコマンドを入力します。

    ~/miniforge/bin/streamlit run app.py --server.enableCORS=false \
        --server.enableXsrfProtection=false --server.port 8080
    
  4. SQL Talk アプリケーションを表示します。Cloud Shell エディタ ウィンドウの右上で、[ウェブでプレビュー] ボタンを選択し、[ポート 8080 でプレビュー] を選択します。

[ウェブでプレビュー] ボタンがハイライト表示された Cloud Shell エディタのヘッダー

SQL トーク アプリケーションの更新を表示するには:

  • SQL Talk ウェブ アプリケーションのウェブ プレビューで、ブラウザまたはブラウザタブを再読み込みします。

SQL トーク アプリケーションを停止するには:

  • Cloud Shell エディタ ウィンドウのターミナル パネルで、Ctrl+C キーを押します。

アプリケーションを変更する

SQL Talk アプリケーションの Python コードを変更することで、アプリケーションの動作を変更したり、アプリケーションに機能を追加したりできます。このセクションでは、SQL トーク アプリケーションに新しい関数呼び出しを追加する方法について説明します。

Gemini API の関数呼び出し機能は、特定の構文を使用して、生成モデルが質問に答えたり問題を解決したりする際に使用する関数を定義します。この構文は、実際の API 呼び出しの構文と完全に一致する必要はありません。代わりに、関数呼び出し機能を使用して、API 呼び出し構文に準拠する特定のデータ入力またはパラメータを生成モデルに強制し、それらのパラメータを使用してアプリケーション コード内で実際の API 呼び出しを実行します。

この実装例では、最近のデータベース クエリまたはジョブを一覧表示する関数呼び出しの定義を作成し、その定義を SQL Talk アプリケーション コード内の実際の API 呼び出しにマッピングする方法を示します。

関数呼び出しの定義を追加する

最近のデータベース クエリまたはジョブを一覧表示する新しい関数呼び出しを追加します。この定義は、生成モデルが API 呼び出しの内容と必要な入力パラメータを理解するために使用されます。この関数定義の例は、パラメータなしで定義されています。

新しい関数呼び出しをアプリケーションに追加するには:

  1. Cloud Shell エディタ ウィンドウで、sql-talk-app/app.py コードファイルを開きます。
  2. list_datasets_func 関数宣言の後に、新しい FunctionDeclaration を追加します。

    list_jobs_func = FunctionDeclaration(
        name="list_jobs",
        description="Get a list of the 10 most recent database requests to help answer the user's question",
        parameters={
            "type": "object",
            "properties": {
      },
    },
    )
    
  3. 新しい関数を sql_query_tool オブジェクトに追加します。

    sql_query_tool = Tool(
        function_declarations=[
            sql_query_func,
            list_datasets_func,
            List_jobs_func,  # add this new function
            list_tables_func,
            get_table_func,
        ],
    )
    

新しい関数の API 呼び出しを実行するコードを追加するには:

  • sql-talk-app/app.py コードファイルで、新しい if 句を while function_calling_in_process: ループに追加します。

    if response.function_call.name == "list_datasets":
        ...
    
    # add this if clause for list_jobs function
    if response.function_call.name == "list_jobs":
        api_response = client.list_jobs(max_results=10)  # API request(s)
        api_response = str([job.job_id for job in api_response])
        api_requests_and_responses.append(
          [response.function_call.name,params, api_response])
    

参考情報

SQL Query プロジェクトの詳細については、コード リポジトリをご覧ください。また、SQL Talk プロジェクトに関する Cloud コミュニティのブログ投稿もご確認ください。アプリケーションの構築についてサポートが必要な場合は、Google Developers コミュニティの Discord サーバーと Google Cloud AI/ML フォーラムをご覧ください。Build with Google AI プロジェクトの詳細については、動画再生リストをご覧ください。