Ringkasan set konteks

Set konteks adalah kumpulan informasi khusus database yang memungkinkan alat seperti QueryData menghasilkan kueri dengan akurasi tinggi. Set konteks dapat mencakup template, faset, dan penelusuran nilai yang membantu QueryData memahami skema database dan logika bisnis aplikasi Anda.

Database berikut didukung:

  • AlloyDB untuk PostgreSQL
  • Cloud SQL untuk MySQL
  • Cloud SQL untuk PostgreSQL
  • Spanner
  • Firestore dengan kompatibilitas MongoDB
  • Bigtable

Apa yang dimaksud dengan set konteks

Untuk membangun aplikasi agentic yang efektif, alat seperti QueryData harus memahami organisasi data dan logika bisnis Anda. Anda memberikan informasi ini dalam bentuk set konteks.

Anda menentukan konteks dalam file yang berisi objek JSON untuk setiap jenis konteks. Anda dapat menulis file konteks ini dengan bantuan agen rekayasa konteks. Kemudian, Anda mengupload file konteks ke set konteks yang Anda buat di konsol Google Cloud. Proses ini memungkinkan alat seperti QueryData mempelajari skema spesifik database dan logika bisnis aplikasi.

File konteks terlihat mirip dengan berikut ini:

{
  "templates": [
    {
      "nl_query": "List all luxury hotels",
      "sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = 'Luxury' ORDER BY _key ASC",
      "intent": "hotels in Luxury tier",
      "manifest": "hotels in a given product tier",
      "parameterized": {
        "parameterized_intent": "hotels in ? tier",
        "parameterized_sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = ? ORDER BY _key ASC"
      }
    }
  ],
  "facets": [
    {
      "sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= 4.5",
      "intent": "hotels with rating at least 4.5",
      "manifest": "hotels with rating at least a given number",
      "parameterized": {
        "parameterized_intent": "hotels with rating at least ?",
        "parameterized_sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= ?"
      }
    }
  ],
  "value_searches": [
    {
      "query": "SELECT CAST(T.cf['location'] AS STRING) AS value, 'hotels.location' AS `columns`, 'City' AS concept_type, 0 AS distance, '' AS context FROM `hotels` AS T WHERE CAST(T.cf['location'] AS STRING) = CAST($value AS STRING)",
      "concept_type": "City",
      "description": "Exact match for hotel city in hotels table"
    }
  ]
}

Format file set data konteks

File set konteks terdiri dari kumpulan template, faset, dan penelusuran nilai yang diseleksi dalam format JSON yang memandu alat seperti QueryData dalam menerjemahkan pertanyaan bahasa alami menjadi kueri untuk database tertentu. Menentukan konteks akan memastikan pembuatan SQL dengan akurasi tinggi untuk pola kueri umum.

Untuk memaksimalkan akurasi, pastikan set konteks akurat dan komprehensif dalam cakupan kueri aplikasi yang diharapkan.

Set konteks dapat dibuat di region us-central1, us-east1, europe-west4, dan asia-southeast1. Anda harus memilih region saat membuat set konteks pertama dalam project. Set konteks berikutnya menggunakan region yang sama.

Template kueri

Template kueri adalah kumpulan pertanyaan bahasa alami representatif yang diseleksi dengan kueri SQL yang sesuai. Contoh tersebut juga menyertakan penjelasan untuk memberikan alasan deklaratif untuk pembuatan natural language ke SQL.

Objek template kueri terlihat mirip dengan berikut ini:

{
  "templates": [
    {
      "nl_query": "List all luxury hotels",
      "sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = 'Luxury' ORDER BY _key ASC",
      "intent": "hotels in Luxury tier",
      "manifest": "hotels in a given product tier",
      "parameterized": {
        "parameterized_intent": "hotels in ? tier",
        "parameterized_sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = ? ORDER BY _key ASC"
      }
    }
  ],
  ...
}

Komponen utama objek JSON template kueri adalah sebagai berikut:

  • nl_query: Contoh kueri bahasa alami yang ditangani oleh alat seperti QueryData.
  • sql: Kueri SQL untuk kueri bahasa alami.
  • intent: Sasaran atau tujuan kueri natural language. Jika tidak ditetapkan, nilai ini akan ditetapkan secara default ke kueri bahasa alami.
  • manifest: Bentuk intent yang digeneralisasi dan dibuat otomatis.
  • parameterized_intent: Bentuk intent yang dibuat otomatis dan menggunakan template, dengan nilai entity yang diganti oleh parameter.
  • parameterized_sql: Bentuk kueri SQL yang dibuat otomatis dan menggunakan template, yang sesuai dengan intent berparameter.

Faset kueri

Facet kueri adalah kumpulan kondisi bahasa alami representatif yang diseleksi dengan predikat SQL yang sesuai. Faset mengelola pemfilteran dan kondisi, yang memungkinkan template kueri melakukan penelusuran faset.

Objek faset kueri terlihat mirip dengan berikut ini:

{
  ...
  "facets": [
    {
      "sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= 4.5",
      "intent": "hotels with rating at least 4.5",
      "manifest": "hotels with rating at least a given number",
      "parameterized": {
        "parameterized_intent": "hotels with rating at least ?",
        "parameterized_sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= ?"
      }
    }
  ]
}

Komponen utama objek JSON faset adalah sebagai berikut:

  • sql_snippet: Cuplikan SQL. Untuk menghindari ambiguitas, tentukan nama kolom dengan nama tabel (misalnya, table_name.column_name).
  • intent: Penjelasan predikat SQL.
  • manifest: Bentuk intent yang digeneralisasi dan dibuat otomatis.
  • parameterized_intent: Bentuk intent yang dibuat otomatis dan menggunakan template, dengan nilai entity yang diganti oleh parameter.
  • parameterized_sql_snippet: Bentuk sql_snippet yang dibuat otomatis dan menggunakan template, yang sesuai dengan intent berparameter.

Kueri penelusuran nilai

Kueri penelusuran nilai adalah kueri yang ditentukan developer yang menggunakan fungsi pencocokan untuk menemukan nilai dan konteksnya dalam database. Penautan nilai menggunakan hasil kueri ini untuk mengidentifikasi tabel dan kolom mana yang berisi nilai yang cocok, memahami jenis konsep nilai, dan memperbaiki kesalahan ejaan.

QueryData API menggunakan penautan nilai untuk mengonversi bahasa alami menjadi SQL dengan lebih akurat. Dengan menggunakan kueri penelusuran nilai, API dapat memperbaiki kesalahan ejaan dan menyelesaikan jenis nilai berdasarkan nilai database, sehingga meningkatkan akurasi konversi.

Penautan nilai meningkatkan akurasi konversi bahasa alami ke SQL. Misalnya, jika pengguna bertanya, "Apakah ada penerbangan dari Heathrow?", database mungkin menyimpan nama bandara sebagai "London Heathrow". Tanpa penautan nilai, SQL yang dihasilkan mungkin memfilter berdasarkan WHERE name = 'Heathrow' dan tidak menampilkan hasil. Kueri penelusuran nilai memandu agen untuk memetakan "Heathrow" ke nilai database yang benar, yaitu "London Heathrow", dan lokasi skemanya (airports.name), sehingga memastikan SQL yang dihasilkan akurat.

Contoh kueri penelusuran nilai adalah:

{
  ...
  "value_searches": [
    {
      "query": "SELECT CAST(T.cf['location'] AS STRING) AS value, 'hotels.location' AS `columns`, 'City' AS concept_type, 0 AS distance, '' AS context FROM `hotels` AS T WHERE CAST(T.cf['location'] AS STRING) = CAST($value AS STRING)",
      "concept_type": "City",
      "description": "Exact match for hotel city in hotels table"
    }
  ]
}

Komponen utama objek JSON penelusuran nilai adalah sebagai berikut:

  • query: Pernyataan SQL berparameter yang menentukan logika untuk mencocokkan frasa nilai dengan nilai yang disimpan dalam database. Set hasil biasanya memproyeksikan nilai yang cocok, lokasi skema, jenis konsep, dan metrik jarak yang dinormalisasi (antara 0 dan 1).
  • concept_type: Label semantik yang ditetapkan ke nilai—misalnya, district atau loan_status. Label ini membantu penautan nilai dan pada akhirnya alat seperti QueryData API untuk memahami peran frasa nilai dalam skema. Hal ini juga membantu menghasilkan pernyataan SQL yang menargetkan konsep untuk nilai, serta tabel dan kolom tempat frasa nilai muncul.
  • description: Deskripsi logika penelusuran.

Batasan

Set konteks memiliki batasan berikut:

  • Set konteks untuk database hanya mendukung template, faset, dan penelusuran nilai.
  • GoogleSQL untuk Bigtable tidak mendukung operasi set (UNION ALL), sehingga penautan nilai di beberapa kueri penelusuran nilai tidak didukung. Permintaan tersebut berhasil, tetapi nilainya tidak ditautkan untuk set konteks dengan lebih dari satu penelusuran nilai.
  • Set konteks untuk database hanya digunakan oleh endpoint QueryData di Conversational Analytics API.

Langkah berikutnya