內容集總覽

脈絡資料集內含特定資料庫的資訊,助 QueryData 等工具生成高精確度的查詢。情境集可包含範本、面向和值搜尋,協助 QueryData 瞭解資料庫結構定義和應用程式的商業邏輯。

支援的資料庫如下:

  • AlloyDB for PostgreSQL
  • MySQL 適用的 Cloud SQL
  • PostgreSQL 適用的 Cloud SQL
  • Spanner
  • 與 MongoDB 相容的 Firestore

什麼是脈絡資料集

如要建構有效的代理應用程式,QueryData 等工具必須瞭解您的資料組織和商業邏輯。您需要以情境組合的形式提供這項資訊。

您可以在檔案中定義情境,其中包含每種情境類型的 JSON 物件。您可以使用脈絡工程代理編寫這些脈絡資料檔案。接著,將脈絡資料檔案上傳至您在 Google Cloud控制台中建立的脈絡資料集。透過這項程序,QueryData 等工具就能瞭解資料庫的特定結構定義,以及應用程式的商業邏輯。

結構定義檔案大致如下:

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

脈絡資料集檔案格式

脈絡資料集檔案包含 JSON 格式的精選範本、商情項目和值搜尋,可引導 QueryData 等工具將自然語言問題翻譯成特定資料庫的查詢。定義脈絡可確保針對常見查詢模式,產生與 MongoDB 相容的高準確度查詢語言 (MQL)。

為盡量提高準確度,請確保內容設定準確且涵蓋預期應用程式查詢。

您可以在 us-central1、us-east1、europe-west4 和 asia-southeast1 地區建立內容集。

查詢範本

查詢範本是一組精選的代表性自然語言問題,並附上對應的 MQL 查詢。此外,這些範例也包含說明,提供將自然語言生成 MQL 的宣告式理由。

查詢範本物件類似於下列項目:

{
  "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 } }});"
      }
    }
  ],
  ...
}

查詢範本 JSON 物件的主要元件如下:

  • nl_query:QueryData 等工具處理的自然語言查詢範例。
  • sql:自然語言查詢的 MQL 查詢。雖然 sql 鍵的名稱如此,但其中包含 MQL。
  • intent::自然語言查詢的目標或目的。如未設定,這個值會預設為自然語言查詢。
  • manifest:意圖的自動生成一般形式。
  • parameterized_intent:意圖的範本化自動生成形式,實體值會替換為參數。
  • parameterized_sql:MQL 查詢的範本化自動生成表單,對應至參數化意圖。雖然 parameterized_sql 鍵的名稱如此,但其中包含 MQL。

查詢 facet

查詢 facet 是一組精選的代表性自然語言條件,具有對應的 MQL 述詞。Facet 可管理篩選條件,讓查詢範本執行多面向搜尋。

查詢構面物件類似於下列項目:

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

Facet JSON 物件的主要元件如下:

  • sql_snippet:MQL 程式碼片段。雖然 sql_snippet 鍵的名稱如此,但其中包含 MQL。為避免模稜兩可,請使用文件名稱限定欄位名稱 (例如 doc_name.field_name)。
  • intent:MQL 述詞的說明。
  • manifest:自動生成的通用意圖。
  • parameterized_intent:意圖的範本,會自動生成,並將實體值替換為參數。
  • parameterized_sql_snippet:自動生成的範本形式 sql_snippet,對應至參數化意圖。雖然 parameterized_sql_snippet 鍵的名稱如此,但其中包含 MQL。

搜尋查詢

值搜尋查詢 是開發人員定義的查詢,使用比對函式在資料庫中尋找值及其背景資訊。值連結功能會使用這些查詢的結果,找出哪些資料表和資料欄包含相符的值、瞭解值的概念類型,以及修正拼寫錯誤。

QueryData API 會使用值連結,更準確地將自然語言轉換為 MQL。API 會使用值搜尋查詢,根據資料庫值修正拼寫錯誤並解析值類型,進而提高轉換準確度。

值連結功能可提高自然語言轉換為 MQL 的準確度。舉例來說,如果使用者詢問「希斯洛機場有任何航班嗎?」,資料庫可能會將機場名稱儲存為「倫敦希斯洛機場」。如果沒有值連結,生成的 MQL 可能會依 { "name": "Heathrow" } 篩選,且不會傳回任何結果。值搜尋查詢會引導代理將「Heathrow」對應至正確的資料庫值「London Heathrow」及其結構定義位置 (airports.name),確保生成的 MQL 準確無誤。

值搜尋查詢範例如下:

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

    }
  ]
}

值搜尋 JSON 物件的主要元件如下:

  • query:參數化 MQL 陳述式,定義將值詞組與資料庫中儲存的值比對的邏輯。結果集通常會投射相符值、結構定義位置、概念類型,以及標準化距離指標 (介於 0 和 1 之間)。
  • concept_type:指派給值的語意標籤,例如 district 或 loan_status。這個標籤有助於連結值,最終可讓 QueryData API 等工具瞭解值詞組在結構定義中的角色。這項功能也有助於產生以值概念為目標的 MQL 陳述式,以及值片語出現的資料表和資料欄。
  • description:搜尋邏輯的說明。

限制

情境組合有下列限制:

  • 資料庫的內容集僅支援範本、構面和值搜尋。
  • 資料庫的情境集僅供 Conversational Analytics API 中的 QueryData 端點使用。

後續步驟