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
- Agen data dengan konteks agen yang diupload ke agen tersebut untuk database sudah ada. Untuk mengetahui informasi selengkapnya, lihat Agen data untuk AlloyDB, Agen data untuk GoogleSQL untuk Spanner, Agen data untuk Cloud SQL, dan Agen data untuk Cloud SQL untuk PostgreSQL.
Aktifkan Cloud SQL Data API untuk instance Anda sebagai berikut:
gcloud beta sql instances patch INSTANCE_ID --data-api-access=ALLOW_DATA_APIGanti
INSTANCE_IDdengan ID instance Cloud SQL atau Cloud SQL untuk PostgreSQL Anda.Anda juga harus memberikan hak istimewa database kepada akun pengguna atau layanan IAM. Untuk mengetahui informasi selengkapnya, lihat Memberikan hak istimewa database kepada akun layanan atau pengguna IAM tertentu di Cloud SQL dan Memberikan hak istimewa database kepada akun layanan atau pengguna IAM tertentu di Cloud SQL untuk PostgreSQL.
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:
alloydbuntuk AlloyDB untuk PostgreSQL,spanner_referenceuntuk GoogleSQL untuk Spannercloud_sql_referenceuntuk 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.datasource_references: Menentukan jenis sumber data.alloydb: Diperlukan saat membuat kueri database. Kolom ini berubah berdasarkan database yang Anda kueri.database_reference: Menentukan informasi terkait instance database Anda.engine:project_id: Project ID instance database.region: Region instance database.cluster_id: ID cluster instance database.instance_id: ID instance database.database_id: ID database.
agent_context_reference: Menautkan ke konteks yang dibuat dalam database.context_set_id: ID konteks agen yang disimpan dalam database. Untuk mengetahui informasi selengkapnya tentang cara menemukan ID set konteks, lihat Menemukan ID konteks agen di AlloyDB, Menemukan ID konteks agen di GoogleSQL untuk Spanner, Menemukan ID konteks agen di Cloud SQL, dan Menemukan ID konteks agen di Cloud SQL untuk PostgreSQL.
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."
}