データ エージェントを使用すると、会話形式の言語を使用してデータベース内のデータを操作できます。データベース内のテーブルのセットのコンテキストを定義してデータ エージェントを作成できます。これにより、データ エージェントは自然言語の質問をターゲット ユースケースの正確なクエリに変換できます。
コンテキストは、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 API の QueryData エンドポイントは、アプリケーションとのプログラムによる統合を可能にするエージェント ツールです。これにより、自然言語の質問から 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: パラメータ化されたインテントに対応する、テンプレート化された自動生成のフラグメント形式。
制限事項
データ エージェントには次の制限があります。
- データベースのエージェント コンテキストは、テンプレートとファセットのみをサポートします。
- データベースのエージェント コンテキストは、Conversational Analytics API の
QueryDataエンドポイントでのみ使用されます。