Menentukan konteks agen data untuk sumber data database

Konteks yang dibuat adalah panduan yang dapat diberikan oleh pemilik agen data untuk membentuk perilaku agen data dan menyempurnakan respons API. Konteks yang ditulis secara efektif memberikan agen data API Analisis Percakapan Anda konteks yang berguna untuk menjawab pertanyaan tentang sumber data Anda.

Halaman ini menjelaskan cara memberikan konteks penulisan untuk sumber data database menggunakan metode QueryData. Untuk sumber data database seperti AlloyDB, GoogleSQL untuk Spanner, Cloud SQL, dan Cloud SQL untuk PostgreSQL, Anda memberikan konteks yang dibuat dengan terlebih dahulu menentukan dan menyimpan konteks dalam database, lalu mereferensikannya dalam panggilan QueryData.

Dengan memberikan konteks akurasi tinggi, API dapat menghasilkan kueri dan jawaban SQL yang lebih akurat dan relevan.

Sebelum memulai

Memberikan konteks dengan QueryData

Saat memanggil metode QueryData, Anda memberikan sumber data dan informasi konteks dalam kolom QueryDataRequest.context.datasourceReferences. Untuk sumber database, Anda harus menggunakan salah satu opsi berikut:

  • alloydb untuk AlloyDB untuk PostgreSQL,
  • spanner_reference untuk GoogleSQL untuk Spanner
  • cloud_sql_reference untuk Cloud SQL dan Cloud SQL untuk PostgreSQL

Dalam referensi ini, Anda menentukan database dan tabel menggunakan kolom databaseReference. Untuk menyertakan konteks yang dibuat, Anda juga harus memberikan agentContextReference yang mengarah ke context_set_id.

Contoh permintaan QueryData dengan konteks yang dibuat

Contoh berikut menunjukkan permintaan QueryData menggunakan alloydb. Kolom agent_context_reference.context_set_id digunakan untuk menautkan ke konteks yang ditulis sebelumnya dan disimpan dalam database.

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 untuk 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 & Cloud SQL untuk 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
  }
}

Isi permintaan berisi kolom berikut:

  • prompt: Pertanyaan bahasa alami dari pengguna akhir.
  • context: Berisi informasi tentang sumber data.
  • generationOptions: Mengonfigurasi jenis output yang akan dibuat.
    • generate_query_result: Tetapkan ke benar untuk membuat dan menampilkan hasil kueri.
    • generate_natural_language_answer: Opsional. Jika disetel ke benar (true), akan menghasilkan jawaban dalam bahasa alami.
    • generate_explanation: Opsional. Jika disetel ke benar (true), akan membuat penjelasan kueri SQL.
    • generate_disambiguation_question: Opsional. Jika disetel ke benar (true), akan membuat pertanyaan penghilangan ambiguitas jika kueri ambigu.

Contoh Respons QueryData

Berikut adalah contoh respons yang berhasil dari panggilan QueryData:

{
  "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."
}