컨텍스트 세트 개요

컨텍스트 세트는 QueryData와 같은 도구가 높은 정확도로 쿼리를 생성할 수 있도록 지원하는 데이터베이스별 정보 모음입니다. 컨텍스트 세트에는 QueryData가 데이터베이스 스키마와 애플리케이션의 비즈니스 로직을 이해하는 데 도움이 되는 템플릿, 속성, 값 검색이 포함될 수 있습니다.

지원되는 데이터베이스는 다음과 같습니다.

  • PostgreSQL용 AlloyDB
  • MySQL용 Cloud SQL
  • PostgreSQL용 Cloud SQL
  • Spanner
  • MongoDB 호환성을 갖춘 Firestore
  • Bigtable

컨텍스트 세트란 무엇인가요?

효과적인 에이전트형 애플리케이션을 빌드하려면 QueryData와 같은 도구가 데이터 조직과 비즈니스 로직을 이해해야 합니다. 이 정보는 컨텍스트 집합 형식으로 제공됩니다.

각 컨텍스트 유형의 JSON 객체가 포함된 파일에서 컨텍스트를 정의합니다. 컨텍스트 엔지니어링 에이전트를 사용하여 이러한 컨텍스트 파일을 작성할 수 있습니다. 그런 다음 Google Cloud콘솔에서 만든 컨텍스트 세트에 컨텍스트 파일을 업로드합니다. 이 프로세스를 통해 QueryData와 같은 도구는 데이터베이스의 특정 스키마와 애플리케이션의 비즈니스 로직을 학습할 수 있습니다.

컨텍스트 파일은 다음과 유사합니다.

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

컨텍스트 세트 파일 형식

컨텍스트 세트 파일은 QueryData와 같은 도구가 자연어 질문을 특정 데이터베이스의 쿼리로 변환하는 데 도움이 되는 JSON 형식의 선별된 템플릿, 속성, 값 검색 세트로 구성됩니다. 컨텍스트를 정의하면 일반적인 쿼리 패턴에 대해 정확도가 높은 SQL을 생성할 수 있습니다.

정확성을 극대화하려면 컨텍스트 세트가 정확하고 예상되는 애플리케이션 쿼리를 포괄적으로 다루는지 확인합니다.

컨텍스트 세트는 us-central1, us-east1, europe-west4, asia-southeast1 리전에서 만들 수 있습니다. 프로젝트에서 첫 번째 컨텍스트 세트를 만들 때 리전을 선택해야 합니다. 이후 컨텍스트 세트는 동일한 리전을 사용합니다.

쿼리 템플릿

쿼리 템플릿은 대표적인 자연어 질문과 이에 상응하는 SQL 쿼리로 구성된 선별된 집합입니다. 또한 자연어-SQL 생성에 사용되는 선언적 근거를 제공하는 설명도 포함되어 있습니다.

쿼리 템플릿 객체는 다음과 유사합니다.

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

쿼리 템플릿 JSON 객체의 주요 구성요소는 다음과 같습니다.

  • nl_query: QueryData와 같은 도구가 처리하는 자연어 쿼리의 예시입니다.
  • sql: 자연어 쿼리의 SQL 쿼리입니다.
  • intent: 자연어 쿼리의 목표 또는 목적입니다. 설정하지 않으면 이 값은 기본적으로 자연어 쿼리로 설정됩니다.
  • manifest: 인텐트의 일반화된 자동 생성 형식입니다.
  • parameterized_intent: 항목 값이 매개변수로 대체된 템플릿화된 자동 생성 형식의 인텐트입니다.
  • parameterized_sql: 파라미터화된 인텐트에 해당하는 SQL 쿼리의 템플릿화된 자동 생성 형식입니다.

쿼리 상품 속성

쿼리 가짓수는 대표적인 자연어 조건과 이에 상응하는 SQL 술어로 구성된 선별된 집합입니다. 패싯은 필터링 및 조건을 관리하므로 쿼리 템플릿에서 패싯별 검색을 수행할 수 있습니다.

쿼리 상품 속성 객체는 다음과 유사합니다.

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

패싯 JSON 객체의 주요 구성요소는 다음과 같습니다.

  • sql_snippet: SQL 스니펫입니다. 모호성을 방지하려면 테이블 이름으로 열 이름을 한정합니다(예: table_name.column_name).
  • intent: SQL 조건자에 대한 설명입니다.
  • manifest: 인텐트의 일반화된 자동 생성 형식입니다.
  • parameterized_intent: 항목 값이 매개변수로 대체된 템플릿화된 자동 생성 형식의 인텐트입니다.
  • parameterized_sql_snippet: 파라미터화된 인텐트에 해당하는 sql_snippet의 템플릿화된 자동 생성 형식입니다.

값 검색어

값 검색어는 일치 함수를 사용하여 데이터베이스 내에서 값과 그 컨텍스트를 찾는 개발자 정의 쿼리입니다. 값 연결은 이러한 쿼리의 결과를 사용하여 일치하는 값이 포함된 테이블과 열을 식별하고, 값의 개념 유형을 이해하고, 맞춤법 오류를 수정합니다.

QueryData API는 값 연결을 사용하여 자연어를 SQL로 더 정확하게 변환합니다. 값 검색어를 사용하면 API가 맞춤법 오류를 수정하고 데이터베이스 값을 기반으로 값 유형을 해결하여 전환 정확도를 개선할 수 있습니다.

값 연결은 자연어를 SQL로 변환하는 정확성을 향상시킵니다. 예를 들어 사용자가 "히드로에서 출발하는 항공편이 있나요?"라고 물으면 데이터베이스에 공항 이름이 '런던 히드로'로 저장될 수 있습니다. 값 연결이 없으면 생성된 SQL이 WHERE name = 'Heathrow'로 필터링하고 결과를 반환하지 않을 수 있습니다. 값 검색 쿼리는 에이전트가 'Heathrow'를 올바른 데이터베이스 값인 'London Heathrow' 및 해당 스키마 위치(airports.name)에 매핑하도록 안내하여 생성된 SQL이 정확하도록 보장합니다.

값 검색어의 예시는 다음과 같습니다.

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

값 검색 JSON 객체의 주요 구성요소는 다음과 같습니다.

  • query: 값 구문을 데이터베이스에 저장된 값과 일치시키는 로직을 정의하는 파라미터화된 SQL 문입니다. 결과 집합은 일반적으로 일치하는 값, 스키마 위치, 개념 유형, 정규화된 거리 측정항목(0~1)을 투영합니다.
  • concept_type: 값에 할당된 시맨틱 라벨입니다(예: district 또는 loan_status). 이 라벨은 값 연결을 지원하고 궁극적으로 QueryData API와 같은 도구가 스키마에서 값 구문의 역할을 이해하는 데 도움이 됩니다. 또한 값의 개념과 값 구문이 표시되는 테이블 및 열을 타겟팅하는 SQL 문을 생성하는 데도 도움이 됩니다.
  • description: 검색 로직에 대한 설명입니다.

제한사항

컨텍스트 세트에는 다음과 같은 제한사항이 있습니다.

  • 데이터베이스의 컨텍스트 세트는 템플릿, 패싯, 값 검색만 지원합니다.
  • Bigtable용 GoogleSQL은 집합 연산(UNION ALL)을 지원하지 않으므로 여러 값 검색 쿼리 간의 값 연결은 지원되지 않습니다. 이러한 요청은 성공하지만 값이 두 개 이상인 컨텍스트 집합의 경우 값이 연결되지 않습니다.
  • 데이터베이스의 컨텍스트 세트는 대화형 분석 API의 QueryData 엔드포인트에서만 사용됩니다.

다음 단계