Kontext für KI-Datenagenten für Datenbankdatenquellen definieren

Auf dieser Seite wird beschrieben, wie Sie selbst erstellten Kontext für Daten-KI-Agenten bereitstellen, die Datenbankdatenquellen verwenden, indem Sie die QueryData Methode verwenden.

Der selbst erstellte Kontext ist eine Anleitung, die Daten-KI-Agent-Inhaber bereitstellen können, um das Verhalten eines Daten-KI-Agenten zu beeinflussen und die Antworten der API zu optimieren. Ein effektiver selbst erstellter Kontext liefert Ihren Daten-KI-Agenten der Conversational Analytics API nützliche Informationen, um Fragen zu Ihren Datenquellen zu beantworten.

Für Datenbankdatenquellen wie AlloyDB, GoogleSQL für Spanner, Cloud SQL und Cloud SQL for PostgreSQL stellen Sie selbst erstellten Kontext bereit, indem Sie den Kontext zuerst in der Datenbank definieren und speichern und dann in Ihrem QueryData-Aufruf darauf verweisen.

Wenn Sie Kontext mit hoher Genauigkeit bereitstellen, kann die API genauere und relevantere SQL-Abfragen und -Antworten generieren.

Hinweis

Kontext mit QueryData bereitstellen

Wenn Sie die QueryData Methode aufrufen, geben Sie die Datenquelle und Kontextinformationen im Feld QueryDataRequest.context.datasourceReferences an. Für Datenbankquellen müssen Sie eine der folgenden Optionen verwenden:

  • alloydb für AlloyDB for PostgreSQL
  • spanner_reference für GoogleSQL für Spanner
  • cloud_sql_reference für Cloud SQL und Cloud SQL for PostgreSQL

In diesen Verweisen geben Sie die Datenbank und die Tabellen mit dem Feld databaseReference an. Wenn Sie selbst erstellten Kontext einbeziehen möchten, müssen Sie auch einen agentContextReference angeben, der auf eine context_set_id verweist.

Beispiel für eine QueryData-Anfrage mit selbst erstelltem Kontext

Im folgenden Beispiel wird eine QueryData-Anfrage mit alloydb gezeigt. Das Feld agent_context_reference.context_set_id wird verwendet, um auf selbst erstellten Kontext zu verweisen, der in der Datenbank gespeichert ist.

AlloyDB

{
 "parent": "projects/data-agents-project/locations/us-central1",
 "prompt": "How many accounts who have region in Prague are eligible for loans? A3 contains the data of region.",
 "context": {
   "datasource_references": [
     {
       "alloydb": {
         "database_reference": {
           "project_id": "data-agents-project",
           "region": "us-central1",
           "cluster_id": "sqlgen-magic",
           "instance_id": "data-agents-primary",
           "database_id": "financial"
         },
         "agent_context_reference": {
           "context_set_id": "projects/data-agents-project/locations/us-east1/contextSets/bdf_pg_all_templates"
         }
       }
     }
   ]
 },
 "generation_options": {
   "generate_query_result": true,
   "generate_natural_language_answer": true,
   "generate_disambiguation_question": true,
   "generate_explanation": true
 }
}

GoogleSQL für Spanner

{
 "parent": "projects/data-agents-project/locations/us-central1",
 "prompt": "How many accounts who have region in Prague are eligible for loans? A3 contains the data of region.",
 "context": {
   "datasource_references": [
     {
       "spanner_reference" {
         "database_reference" {
           "engine": "GOOGLE_SQL"
           "project_id": "data-agents-project"
           "instance_id": "evalbench"
           "database_id": "financial"
         },
         "agent_context_reference": {
           "context_set_id": "projects/data-agents-project/locations/us-east1/contextSets/bdf_pg_all_templates"
         }
       }
     }
   ]
 },
 "generation_options": {
   "generate_query_result": true,
   "generate_natural_language_answer": true,
   "generate_disambiguation_question": true,
   "generate_explanation": true
 }
}

Cloud SQL und Cloud SQL for PostgreSQL

{
 "parent": "projects/data-agents-project/locations/us-central1",
 "prompt": "How many accounts who have region in Prague are eligible for loans? A3 contains the data of region.",
 "context": {
   "datasource_references": [
     {
       "cloud_sql_reference": {
         "database_reference": {
           "engine": "MYSQL"
           "project_id": "data-agents-project",
           "region": "us-central1",
           "instance_id": "data-agents-primary",
           "database_id": "financial"
         },
         "agent_context_reference": {
           "context_set_id": "projects/data-agents-project/locations/us-east1/contextSets/bdf_pg_all_templates"
         }
       }
     }
   ]
 },
 "generation_options": {
   "generate_query_result": true,
   "generate_natural_language_answer": true,
   "generate_disambiguation_question": true,
   "generate_explanation": true
 }
}

Der Anfragetext enthält die folgenden Felder:

  • prompt: Die Frage in natürlicher Sprache vom Endnutzer.
  • context: Enthält Informationen zu den Datenquellen.
    • datasource_references: Gibt den Datenquellentyp an.
      • alloydb: Erforderlich beim Abfragen der Datenbank. Dieses Feld ändert sich je nach der Datenbank, die Sie abfragen.
        • database_reference: Gibt Informationen zur Datenbankinstanz an.
          • engine: Die Datenbank-Engine oder der SQL-Dialekt. Optional für AlloyDB. Setzen Sie für Spanner-Datenbanken GOOGLE_SQL. Setzen Sie für Cloud SQL-Instanzen MYSQL. Setzen Sie für Cloud SQL for PostgreSQL-Instanzen POSTGRESQL.
          • project_id: Die Projekt-ID der Datenbankinstanz.
          • region: Die Region der Datenbankinstanz.
          • cluster_id: Die Cluster-ID der Datenbankinstanz.
          • instance_id: Die Instanz-ID der Datenbank.
          • database_id: Die ID der Datenbank.
        • agent_context_reference: Verweist auf selbst erstellten Kontext in der Datenbank.
  • generationOptions: Konfiguriert den Typ der zu generierenden Ausgabe.
    • generate_query_result: Auf „true“ setzen, um die Abfrageergebnisse zu generieren und zurückzugeben.
    • generate_natural_language_answer: Optional. Wenn auf „true“ gesetzt, wird eine Antwort in natürlicher Sprache generiert.
    • generate_explanation: Optional. Wenn auf „true“ gesetzt, wird eine Erklärung der SQL-Abfrage generiert.
    • generate_disambiguation_question: Optional. Wenn auf „true“ gesetzt, werden Fragen zur Auflösung von Mehrdeutigkeiten generiert, wenn die Abfrage mehrdeutig ist.

Beispiel für eine QueryData-Antwort

Hier ist ein Beispiel für eine erfolgreiche Antwort von einem QueryData-Aufruf:

{
 "generated_query": "-- Count the number of accounts in Prague that are eligible for loans\nSELECT\n  COUNT(DISTINCT \"loans\".\"account_id\")\nFROM \"loans\"\nJOIN \"district\" -- Join based on district ID\n  ON \"loans\".\"district_id\" = \"district\".\"district_id\"\nWHERE\n  \"district\".\"A3\" = 'Prague'; -- Filter for the Prague region",
 "intent_explanation": "The question asks for the number of accounts eligible for loans in the Prague region. I need to join the `district` table with the `loans` table to filter by region and count the distinct accounts. The `A3` column in the `district` table contains the region information, and I'll filter for 'Prague'. The `loans` table contains information about loans, including the `account_id` and `district_id`. I will join these two tables on their respective district IDs.",
 "query_result": {
   "columns": [
     {
       "name": "count"
     }
   ],
   "rows": [
     {
       "values": [
         {
           "value": "2"
         }
       ]
     }
   ],
   "total_row_count": 1
 },
 "natural_language_answer": "There are 2 accounts in Prague that are eligible for loans."
}