컨텍스트 세트는 QueryData와 같은 도구가 높은 정확도로 쿼리를 생성할 수 있도록 지원하는 데이터베이스별 정보 모음입니다. 컨텍스트 세트에는 QueryData가 데이터베이스 스키마와 애플리케이션의 비즈니스 로직을 이해하는 데 도움이 되는 템플릿, 패싯, 값 검색이 포함될 수 있습니다.
다음 데이터베이스가 지원됩니다.
- PostgreSQL용 AlloyDB
- MySQL용 Cloud SQL
- PostgreSQL용 Cloud SQL
- Spanner
- MongoDB 호환성을 갖춘 Firestore
컨텍스트 세트란 무엇인가요?
효과적인 에이전트 애플리케이션을 빌드하려면 QueryData와 같은 도구가 데이터 구성 및 비즈니스 로직을 이해해야 합니다. 이 정보는 컨텍스트 세트의 형태로 제공됩니다.
각 컨텍스트 유형의 JSON 객체가 포함된 파일에서 컨텍스트를 정의합니다. 컨텍스트 엔지니어링 에이전트를 사용하여 이러한 컨텍스트 파일을 작성할 수 있습니다. 그런 다음 Google Cloud 콘솔에서 만든 컨텍스트 세트에 컨텍스트 파일을 업로드합니다. 이 프로세스를 통해 QueryData와 같은 도구가 데이터베이스의 특정 스키마와 애플리케이션의 비즈니스 로직을 학습할 수 있습니다.
컨텍스트 파일은 다음과 유사합니다.
{
"templates": [
{
"nl_query": "Count Prague loan accounts",
"sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" ='Prague'",
"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": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
}
}
],
"facets": [
{
"sql_snippet": "employee.\"A11\" BETWEEN 6000 AND 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": "employee.\"A11\" BETWEEN $1 AND $2"
}
}
],
"value_searches": [
{
"query": "SELECT $value as value, 'accounts.account_type' as columns, 'Account Type' as concept_type, 0 as distance, '{}'::text as context FROM \"accounts\" T WHERE T.\"account_type\" = $value",
"concept_type": "Account Type",
"description": "Exact match for account types"
}
]
}
컨텍스트 세트 파일 형식
컨텍스트 세트 파일은 자연어 질문을 특정 데이터베이스의 쿼리로 변환할 때 QueryData와 같은 도구를 안내하는 JSON 형식의 선별된 템플릿, 패싯, 값 검색으로 구성됩니다. 컨텍스트를 정의하면 일반적인 쿼리 패턴에 대해 높은 정확도의 SQL 생성이 보장됩니다.
정확성을 극대화하려면 컨텍스트 세트가 정확하고 예상되는 애플리케이션 쿼리를 포괄적으로 다루는지 확인하세요.
컨텍스트 세트는 us-central1, us-east1, europe-west4, asia-southeast1 리전에서 만들 수 있습니다.
쿼리 템플릿
쿼리 템플릿은 해당 SQL 쿼리가 포함된 대표적인 자연어 질문의 선별된 집합입니다. 또한 자연어-SQL 생성에 사용되는 선언적 근거를 제공하는 설명도 포함되어 있습니다.
쿼리 템플릿 객체는 다음과 유사합니다.
{
"templates": [
{
"nl_query": "Count prague loan accounts",
"sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = 'Prague'",
"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": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
}
}
],
...
}
쿼리 템플릿 JSON 객체의 주요 구성요소는 다음과 같습니다.
nl_query: QueryData와 같은 도구가 처리하는 자연어 쿼리의 예입니다.sql: 자연어 쿼리의 SQL 쿼리입니다.intent: 자연어 쿼리의 목표 또는 목적입니다. 설정하지 않으면 이 값은 기본적으로 자연어 쿼리로 설정됩니다.manifest: 일반화된 자동 생성된 인텐트 형식입니다.parameterized_intent: 매개변수로 대체된 항목 값이 있는 템플릿화된 자동 생성된 인텐트 형식입니다.parameterized_sql: 매개변수화된 인텐트에 해당하는 템플릿화된 자동 생성된 SQL 쿼리 형식입니다.
쿼리 패싯
쿼리 패싯은 대표적이거나 일반적인 자연어 조건과 이에 상응하는 SQL 술어로 구성된 선별된 집합입니다. 패싯은 필터링 및 조건을 관리하므로 쿼리 템플릿에서 패싯 검색을 수행할 수 있습니다.
쿼리 패싯 객체는 다음과 유사합니다.
{
...
"facets": [
{
"sql_snippet": "employee.\"A11\" BETWEEN 6000 AND 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": "employee.\"A11\" BETWEEN $1 AND $2"
}
}
]
}
패싯 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'
로 필터링되고 결과가 반환되지 않을 수 있습니다. 값 검색 쿼리는 에이전트가 '히스로'를 올바른 데이터베이스 값인 '런던 히스로' 및 스키마 위치 (airports.name)에 매핑하도록 안내하여 생성된 SQL이 정확하도록 합니다.
값 검색 쿼리의 예는 다음과 같습니다.
{
...
"value_searches": [
{
"query": "SELECT $value as value, 'airports.iata' as columns, 'Airport IATA Code' as concept_type, 0 as distance, '{}'::text as context FROM \"airports\" T WHERE T.\"iata\" = $value",
"concept_type": "Airport IATA Code",
"description": "Exact match (Standard SQL) for 3-letter airport codes"
},
{
"query": "WITH TrigramMetrics AS ( SELECT T.\"name\" AS original_value, (T.\"name\" <-> $value::text) AS normalized_dist FROM \"airports\" T WHERE T.\"name\" % $value::text ) SELECT original_value AS value, 'airports.name' AS columns, 'Airport Name' AS concept_type, normalized_dist AS distance, '{}'::text AS context FROM TrigramMetrics",
"concept_type": "Airport Name",
"description": "Fuzzy match using standard trigram for partial airport names"
},
{
"query": "WITH SemanticMetrics AS ( SELECT T.\"city\" AS original_value, ( (google_ml.embedding('gemini-embedding-001', $value)::vector <=> google_ml.embedding('gemini-embedding-001', T.\"city\")::vector) / 2.0 ) AS normalized_dist FROM \"airports\" T WHERE T.\"city\" IS NOT NULL ) SELECT original_value AS value, 'airports.city' AS columns, 'Airport City' AS concept_type, normalized_dist AS distance, '{}'::text AS context FROM SemanticMetrics",
"concept_type": "Airport City",
"description": "Semantic search on string values for airport city names"
}
]
}
값 검색 JSON 객체의 주요 구성요소는 다음과 같습니다.
query: 데이터베이스에 저장된 값과 값 구문을 일치시키는 로직을 정의하는 매개변수화된 SQL 문입니다. 결과 집합은 일반적으로 일치하는 값, 스키마 위치, 개념 유형, 정규화된 거리 측정항목 (0~1)을 프로젝션합니다.concept_type: 값에 할당된 시맨틱 라벨입니다(예:district또는loan_status). 이 라벨은 값 연결과 궁극적으로 QueryData API와 같은 도구가 스키마에서 값 구문의 역할을 이해하는 데 도움이 됩니다. 또한 값의 개념을 타겟팅하는 SQL 문과 값 구문이 표시되는 테이블 및 열을 생성하는 데도 도움이 됩니다.description: 검색 로직에 대한 설명입니다.
제한사항
컨텍스트 세트에는 다음과 같은 제한사항이 있습니다.
- SQL Server용 Cloud SQL은 지원되지 않습니다.
- 데이터베이스의 컨텍스트 세트는 템플릿, 패싯, 값 검색만 지원합니다.
- 데이터베이스의 컨텍스트 세트는 대화형 분석 API의
QueryData엔드포인트에서만 사용됩니다.
다음 단계
- Cloud SQL Studio에서 컨텍스트 세트를 만들거나 삭제하는 방법을 알아보세요.
- 컨텍스트 엔지니어링 에이전트를 사용하여 컨텍스트 세트를 빌드하는 방법을 알아보세요.