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

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.

Auf dieser Seite wird beschrieben, wie Sie selbst erstellten Kontext für Datenbankdatenquellen mit der QueryData-Methode bereitstellen. Bei Datenbankdatenquellen wie AlloyDB, GoogleSQL for Spanner, Cloud SQL und Cloud SQL for PostgreSQL stellen Sie den 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.

Hinweise

Kontext mit QueryData bereitstellen

Wenn Sie die Methode QueryData 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 von Ihnen erstellten Kontext einfügen möchten, müssen Sie auch einen agentContextReference angeben, der auf einen context_set_id verweist.

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

Das folgende Beispiel zeigt eine QueryData-Anfrage mit alloydb. Das Feld agent_context_reference.context_set_id wird verwendet, um auf vorab erstellten Kontext zu verweisen, der in der Datenbank gespeichert ist.

AlloyDB

{
  "parent": "projects/cloud-db-nl2sql/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": "cloud-db-nl2sql",
            "region": "us-central1",
            "cluster_id": "sqlgen-magic",
            "instance_id": "sqlgen-magic-primary",
            "database_id": "financial"
          },
          "agent_context_reference": {
            "context_set_id": "projects/cloud-db-nl2sql/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/cloud-db-nl2sql/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": "cloud-db-nl2sql"
            "region": "us-central1"
            "instance_id": "evalbench"
            "database_id": "financial"
          },
          "agent_context_reference": {
            "context_set_id": "projects/cloud-db-nl2sql/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/cloud-db-nl2sql/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": "cloud-db-nl2sql",
            "region": "us-central1",
            "instance_id": "sqlgen-magic-primary",
            "database_id": "financial"
          },
          "agent_context_reference": {
            "context_set_id": "projects/cloud-db-nl2sql/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 des Endnutzers in natürlicher Sprache.
  • context: Enthält Informationen zu den Datenquellen.
    • datasource_references: Gibt den Datenquellentyp an.
  • 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 dieser Wert auf „true“ gesetzt ist, wird eine Erklärung der SQL-Abfrage generiert.
    • generate_disambiguation_question: Optional. Wenn auf „true“ gesetzt, werden bei mehrdeutigen Anfragen Fragen zur Begriffsklärung generiert.

Beispielantwort QueryData

Hier ist ein Beispiel für eine erfolgreiche Antwort auf einen 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."
}