データ エージェントの概要

データ エージェントを使用すると、会話調の言葉を使用してデータベース内のデータを操作できます。データベース内の一連のテーブルに対してコンテキストを定義することで、データ エージェントを作成できます。これによりデータ エージェントは、自然言語の質問を対象となるユースケースに適した正確なクエリに変換できます。

コンテキストとは、LLM が高精度なクエリを生成するために必要なデータベース固有の情報です。コンテキストには、エージェントがデータベーススキーマとアプリケーションのビジネス ロジックを理解するために役立つテンプレートとファセット(フラグメント)が含まれます。

サポートされているデータベースは次のとおりです。

  • AlloyDB for PostgreSQL
  • Cloud SQL for MySQL
  • Cloud SQL for PostgreSQL
  • Spanner

データ エージェントを使用するタイミング

データ エージェントを使用すると、次のようなユースケースに最適な会話型データ アプリケーションを構築できます。

  • カスタマー サービスの自動化: 「注文した商品はどこにありますか?」、「現在の残高はいくらですか?」といった大量の問い合わせに対応します。
  • e コマースのショッピング アシスタント: 「100 ドル以下のランニング シューズを見せて」といった自然言語のクエリを使用して、ユーザーが膨大な商品カタログをナビゲートできるようにします。
  • 予約システム: ユーザーがチャット インターフェースを通じて空き状況を確認し、診察、フライト、飲食サービスなどを予約できるようにします。
  • 現場で操作するツール: 外勤従業員が在庫状況、部品の入手可能性、サービス チケットの詳細をリアルタイムでクエリできるようにします。

データ エージェントの仕組み

効果的なエージェント アプリケーションを構築するには、エージェントがデータの編成とビジネス ロジックを理解している必要があります。この情報は、エージェント コンテキストの形式で提供します。

エージェント コンテキストは、テンプレートとファセットの JSON オブジェクトを含むファイルで定義します。このようなコンテキスト ファイルは、Gemini CLI を使用して作成します。その後、 Google Cloudコンソールで作成したデータ エージェントにコンテキスト ファイルをアップロードします。このプロセスにより、エージェントはデータベースの特定のスキーマとアプリケーションのビジネス ロジックを学習できます。

エージェント コンテキスト ファイルは次のようになります。

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = \"Prague\"",
      "intent": "How many accounts associated with loans are located in the Prague region?",
      "manifest": "How many accounts associated with loans are located in a given city?",
      "parameterized": {
        "parameterized_intent": "How many accounts associated with loans are located in $1",
        "parameterized_sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
      }
    }
  ],
  "fragments": [
    {
      "fragment": "T.\"A11\" BETWEEN 6000 AND 10000",
      "intent": "Average salary between 6000 and 10000",
      "manifest": "Average salary between a given number and a given number",
      "parameterized": {
         "parameterized_intent": "Average salary between $1 and $2",
         "parameterized_fragment": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

エンドユーザーが自然言語で質問すると、エージェントは、コンテキストをキュレートするデベロッパーによって監査されたテンプレートとファセットに質問を照合する処理を優先的に行います。一致を特定すると、エージェントは選択されたクエリ テンプレートとファセットを使用してデータベース クエリを合成します。そして、そのクエリをデータベースに対して実行し、正確な結果を返します。

Conversational Analytics APIQueryData エンドポイントは、アプリケーションとのプログラムによる統合を実現するエージェント ツールです。これにより、自然言語の質問から SQL クエリを生成できます。会話型アプリケーションでは、会話の履歴とコンテキストを管理するフレームワーク内で QueryData エンドポイントを使用する必要があります。

エージェントのコンテキスト

エージェント コンテキストは、JSON 形式のテンプレートとファセットをまとめたもので、自然言語の質問を特定のデータベースのクエリに変換する際に役立ちます。コンテキストを定義すると、一般的なクエリパターンに対して高精度の SQL を確実に生成できます。

エージェント コンテキストが正確で、想定されるアプリケーション クエリを包括的にカバーしていることを確認して、精度を最大限に高めます。

クエリ テンプレート

クエリ テンプレートは、代表的な自然言語の質問とそれに対応する SQL クエリをまとめたものです。また、自然言語から SQL への生成の宣言的な根拠を提供する説明も含まれています。

クエリ テンプレート オブジェクトは次のようになります。

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = \"Prague\"",
      "intent": "How many accounts associated with loans are located in the Prague region?",
      "manifest": "How many accounts associated with loans are located in a given city?",
      "parameterized": {
        "parameterized_intent": "How many accounts associated with loans are located in $1",
        "parameterized_sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
      }
    }
  ]
},
...

クエリ テンプレートの JSON オブジェクトの主なコンポーネントは次のとおりです。

  • nl_query: データ エージェントが処理する自然言語クエリの例。
  • sql: 自然言語クエリの SQL クエリ。
  • intent: 自然言語クエリの目標または目的。設定されていない場合、この値はデフォルトで自然言語クエリになります。
  • manifest: 一般化された自動生成形式のインテント。
  • parameterized_intent: テンプレート化された自動生成形式のインテント(エンティティ値がパラメータによって置き換えられている)。
  • parameterized_sql: テンプレート化された自動生成形式の SQL クエリ(パラメータ化されたインテントに対応している)。

クエリ ファセット

クエリ ファセットは、代表的な自然言語の条件と、対応する SQL 述語をまとめたものです。ファセットはフィルタリングと条件を管理し、クエリ テンプレートでファセット検索を実行できるようにします。

クエリ ファセット(フラグメント)オブジェクトは次のようになります。

{
...
"fragments": [
    {
      "fragment": "T.\"A11\" BETWEEN 6000 AND 10000",
      "intent": "Average salary between 6000 and 10000",
      "manifest": "Average salary between a given number and a given number",
      "parameterized": {
         "parameterized_intent": "Average salary between $1 and $2",
         "parameterized_fragment": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

フラグメント JSON オブジェクトの主なコンポーネントは次のとおりです。

  • fragment: SQL 述語。
  • intent: SQL 述語の説明。
  • manifest: 一般化された自動生成形式のインテント。
  • parameterized_intent: テンプレート化された自動生成形式のインテント(エンティティ値がパラメータによって置き換えられている)。
  • parameterized_fragment: テンプレート化された自動生成形式のフラグメント(パラメータ化されたインテントに対応している)。

制限事項

データ エージェントには次の制限があります。

  • Cloud SQL for SQL Server はサポートされていません。
  • データベースのエージェント コンテキストは、テンプレートとファセットのみをサポートします。
  • データベースのエージェント コンテキストは、Conversational Analytics API の QueryData エンドポイントでのみ使用されます。

次のステップ