Set konteks adalah kumpulan informasi khusus database yang memungkinkan alat seperti QueryData membuat 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
Apa yang dimaksud dengan set konteks
Untuk membangun aplikasi agen 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 membuat file konteks ini dengan bantuan agen rekayasa konteks. Kemudian, Anda mengupload file konteks ke set konteks yang Anda buat di Google Cloud konsol. Proses ini memungkinkan alat seperti QueryData mempelajari skema spesifik database dan logika bisnis aplikasi.
File konteks terlihat mirip dengan berikut ini:
{
"templates": [
{
"nl_query": "Count prague loan accounts",
"sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
"intent": "How many accounts associated with loans are located in the Prague region?",
"manifest": "How many accounts associated with loans are located in a given city?",
"parameterized": {
"parameterized_intent": "How many accounts associated with loans are located in $1",
"parameterized_sql": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});",
}
}
],
"facets": [
{
"sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 10000 }",
"intent": "Average salary between 6000 and 10000",
"manifest": "Average salary between a given number and a given number",
"parameterized": {
"parameterized_intent": "Average salary between $1 and $2",
"parameterized_sql_snippet": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
}
}
],
"value_searches": [
{
"query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport IATA Code",
"description": "Exact match (standard MQL) for 3-letter airport codes"
},
{
"query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Regex match for partial airport names"
},
{
"query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Full-text search for airport names"
}
]
}
Format file set konteks
File set konteks terdiri dari kumpulan template, faset, dan penelusuran nilai yang dikurasi dalam format JSON yang memandu alat seperti QueryData dalam menerjemahkan pertanyaan bahasa alami menjadi kueri untuk database tertentu. Menentukan konteks memastikan pembuatan Query Language (MQL) yang kompatibel dengan MongoDB dan memiliki 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.
Template kueri
Template kueri adalah kumpulan pertanyaan bahasa alami representatif yang dikurasi dengan kueri MQL yang sesuai. Template ini juga menyertakan penjelasan untuk memberikan alasan deklaratif untuk pembuatan bahasa alami ke MQL.
Objek template kueri terlihat mirip dengan berikut ini:
{
"templates": [
{
"nl_query": "Count prague loan accounts",
"sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
"intent": "How many accounts associated with loans are located in the Prague region?",
"manifest": "How many accounts associated with loans are located in a given city?",
"parameterized": {
"parameterized_intent": "How many accounts associated with loans are located in $1",
"parameterized_sql": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});"
}
}
],
...
}
Komponen utama objek JSON template kueri adalah sebagai berikut:
nl_query: Contoh kueri bahasa alami yang ditangani oleh alat seperti QueryData.sql: Kueri MQL untuk kueri bahasa alami. Meskipun memiliki nama kuncisql, kueri ini berisi MQL.intent: Sasaran atau tujuan kueri bahasa alami. Jika tidak ditetapkan, nilai ini akan ditetapkan secara default ke kueri bahasa alami.manifest: Bentuk tujuan yang digeneralisasi dan dibuat otomatis.parameterized_intent: Bentuk tujuan yang dibuat otomatis dan menggunakan template, dengan nilai entity diganti dengan parameter.parameterized_sql: Bentuk kueri MQL yang dibuat otomatis dan menggunakan template yang sesuai dengan tujuan yang diberi parameter. Meskipun memiliki nama kunciparameterized_sql, kueri ini berisi MQL.
Faset kueri
Faset kueri adalah kumpulan kondisi bahasa alami representatif yang dikurasi dengan predikat MQL yang sesuai. Faset mengelola pemfilteran dan kondisi, yang memungkinkan template kueri melakukan penelusuran dengan faset.
Objek faset kueri terlihat mirip dengan berikut ini:
{
...
"facets": [
{
"sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 10000 }",
"intent": "Average salary between 6000 and 10000",
"manifest": "Average salary between a given number and a given number",
"parameterized": {
"parameterized_intent": "Average salary between $1 and $2",
"parameterized_sql_snippet": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
}
}
]
}
Komponen utama objek JSON faset adalah sebagai berikut:
sql_snippet: Cuplikan MQL. Meskipun memiliki nama kuncisql_snippet, cuplikan ini berisi MQL. Untuk menghindari ambiguitas, tentukan nama kolom dengan nama dokumen (misalnya,doc_name.field_name).intent: Penjelasan predikat MQL.manifest: Bentuk tujuan yang digeneralisasi dan dibuat otomatis.parameterized_intent: Bentuk tujuan yang dibuat otomatis dan menggunakan template, dengan nilai entity diganti dengan parameter.parameterized_sql_snippet: Bentuk sql_snippet yang dibuat otomatis dan menggunakan template yang sesuai dengan tujuan yang diberi parameter. Meskipun memiliki nama kunciparameterized_sql_snippet, cuplikan ini berisi MQL.
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 yang berisi nilai yang cocok, memahami jenis konsep nilai, dan mengoreksi salah ketik.QueryData API menggunakan penautan nilai untuk mengonversi bahasa alami menjadi MQL dengan lebih akurat. Dengan menggunakan kueri penelusuran nilai, API dapat mengoreksi salah ketik dan menyelesaikan jenis nilai berdasarkan nilai database, sehingga meningkatkan akurasi konversi.
Penautan nilai meningkatkan akurasi konversi bahasa alami ke MQL. Misalnya, jika pengguna bertanya, "Apakah ada penerbangan dari Heathrow?", database mungkin menyimpan nama bandara sebagai "London Heathrow". Tanpa penautan nilai, MQL yang dihasilkan mungkin memfilter berdasarkan
{ "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 MQL yang dihasilkan akurat.
Contoh kueri penelusuran nilai adalah:
{
...
"value_searches": [
{
"query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport IATA Code",
"description": "Exact match (standard MQL) for 3-letter airport codes"
},
{
"query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Regex match for partial airport names"
},
{
"query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
"concept_type": "Airport Name",
"description": "Full-text search for airport names"
}
]
}
Komponen utama objek JSON penelusuran nilai adalah sebagai berikut:
query: Pernyataan MQL yang diberi parameter yang menentukan logika untuk mencocokkan frasa nilai dengan nilai yang disimpan dalam database. Kumpulan 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,districtatauloan_status. Label ini membantu penautan nilai dan akhirnya alat seperti QueryData API untuk memahami peran frasa nilai dalam skema. Label ini juga membantu menghasilkan pernyataan MQL 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.
- Set konteks untuk database hanya digunakan oleh endpoint
QueryDatadi Conversational Analytics API.
Langkah berikutnya
- Pelajari cara membuat set konteks menggunakan agen rekayasa konteks.