들어가며
안녕하세요. HEARTCOUNT 팀의 Sam입니다. HEARTCOUNT ABI의 Text to SQL(NL2SQL: Natural Language to SQL)은 SQL에 대한 전문 지식이 없는 사용자도 자연어를 사용해 데이터를 쉽게 조회할 수 있도록 돕는 기능입니다. 이전 포스트에서도 언급했듯이, 이 기능은 비즈니스 사용자와 데이터베이스 간의 장벽을 허물어 더 효율적인 데이터 활용을 가능하게 합니다.
하지만, Text to SQL 기능이 성공적으로 작동하려면 단순히 자연어를 SQL 쿼리로 변환하는 것만으로는 부족합니다. LLM(대규모 언어 모델)은 뛰어난 언어 처리 능력을 바탕으로 자연어를 이해하고 SQL을 생성할 수 있지만, 데이터베이스 구조나 비즈니스 문맥에 대한 심화된 이해는 여전히 한계를 가지고 있습니다.
이러한 한계를 극복하기 위해 메타데이터를 통해 데이터의 의미와 관계를 명확히 전달하는 것이 중요합니다. HEARTCOUNT ABI는 Text to SQL의 성능을 극대화하기 위해 RAG(Retrieval-Augmented Generation) 기술을 도입했습니다. RAG는 LLM과 데이터베이스 사이에서 중간 단계 역할을 수행하며, 벡터 데이터베이스(Vector DB)를 통해 관련 데이터를 효율적으로 검색하고 LLM에 제공합니다.
따라서 벡터DB에 저장되는 정보의 질과 구조가 매우 중요합니다. RAG가 얼마나 잘 작동하느냐는 질문과 관련된 데이터(메타데이터)를 얼마나 잘 저장하고 검색하느냐에 달려 있기 때문입니다.
이번 포스트에서는 메타데이터의 중요성과 HEARTCOUNT ABI의 Text to SQL 2.0에서 메타데이터를 어떻게 저장하고 활용하는지를 중점적으로 다루겠습니다.
Text to SQL에서 메타데이터의 중요성
HEARTCOUNT ABI의 Text to SQL 기능이 정확하게 작동하려면 RAG(Retrieval-Augmented Generation)가 핵심적인 역할을 수행합니다. RAG의 핵심은 "질문과 관련된 데이터를 얼마나 잘 찾는가?"입니다. 사용자가 자연어로 질문을 입력하면, 벡터 데이터베이스(Vector DB)에서 유사한 데이터를 검색하고 이를 LLM에 전달하는 과정을 거치기 때문입니다.
이때 "무엇을 찾아야 할지", 즉 데이터의 구조와 맥락에 대한 정보가 메타데이터로 잘 정의되어 있어야 합니다. 테이블의 구조, 컬럼의 의미, 데이터 간의 관계, 계산식과 같은 정보들이 LLM에게 전달되면, 질문의 의도를 더 잘 파악하고 정확한 SQL 쿼리를 생성할 수 있게 됩니다.
메타데이터가 중요한 이유
메타데이터는 단순히 테이블과 컬럼의 이름만을 제공하는 것이 아니라, 데이터베이스 구조와 비즈니스 문맥을 연결해주는 중요한 다리 역할을 합니다. 이는 LLM이 데이터의 의미를 이해하고 적절한 SQL 쿼리를 생성하는 데 크게 기여합니다.
메타데이터의 역할을 다음 세 가지로 나누어 살펴보겠습니다:
1. 문맥 제공 (DB Schema Context)
메타데이터는 Semantic Layer의 일부로서, 테이블, 열, 지표 간의 관계와 의미를 명확히 정의합니다.
이를 통해 자연어 질문이 데이터베이스의 적절한 테이블과 컬럼에 매핑될 수 있도록 지원하며, 조인 관계를 포함한 복잡한 데이터베이스 쿼리를 정확하게 생성할 수 있습니다.
예시:
- "주문을 가장 많이 한 고객은 누구야?" 라는 질문이 들어오면 다음과 같은 메타데이터를 참고합니다.
- 관련 테이블 1:
orders
- 컬럼:
customer_id
,amount
- 컬럼:
- 관련 테이블 2:
customers
- 컬럼:
id
,name
- 컬럼:
- 조인 관계:
orders.customer_id = customers.id
이처럼 문맥 제공을 통해 질문의 의도와 데이터의 연관성을 파악하여 LLM이 더 정확하게 작동하게 됩니다.
2. 일관된 비즈니스 용어 생성 (Business Terminology)
KPI, 계산식, 비즈니스 용어 등은 메타데이터를 통해 일관되게 정의됩니다.
비즈니스 사용자와 시스템 간의 데이터 해석 차이를 줄여 신뢰도를 확보할 수 있습니다.
예시:
"지난 분기 순매출은 얼마야?" 라는 질문이 들어오면 다음과 같은 메타데이터를 참고합니다.
- 관련 테이블:
sales
- 컬럼의 정의:
rev
: 총 매출,discount
: 할인 금액,returns
: 반품 금액 - 메트릭 계산식:
순매출 = 총 매출 - 할인 금액 - 반품 금액
orrev - discount - returns
rev
= revenue
와 같이 메타데이터는 표준화되지 않은 컬럼명이나 비즈니스 약어를 명확히 매핑해줍니다. 또한, LLM은 메타데이터를 통해 컬럼명과 비즈니스 맥락을 정확히 이해하고 적절한 SQL을 생성합니다.
3. 학습 데이터 제공 (Few-Shot Learning)
메타데이터의 확장된 형태로 SQL-질문 쌍을 저장하면, LLM의 학습에 중요한 데이터셋으로 활용할 수 있습니다.
RAG 기반 시스템에서는 SQL-질문 쌍을 벡터화하여 유사도를 계산하고 적절한 예시를 LLM에 제공합니다.
예시:
- 질문: "지난달 신규 가입 고객 수는?"
- SQL:
SELECT COUNT(*) FROM customers WHERE signup_date >= '2024-05-01'
이런 SQL-질문 쌍을 저장하면, 모델은 과거의 사용 사례를 학습하여 더 정확하고 일관된 결과를 제공할 수 있습니다.
순서에 따른 예시
1. 자연어 질문 입력
사용자가 자연어로 데이터를 조회하고자 하는 질문을 입력합니다.
예: "지난달 고객별 총 주문 금액은?"
2. RAG 검색
Vector Store에서 관련 데이터를 검색합니다.
- ChatMeta: 테이블 구조와 컬럼 설명 같은 메타데이터 검색.
- ChatSQL: 유사한 질문-SQL 쌍 검색.
3. LLM을 통한 SQL 생성
RAG에서 검색된 정보를 바탕으로 LLM이 적절한 SQL 쿼리를 생성합니다.
4. SQL 실행 및 결과 반환
생성된 SQL을 실행하고 결과를 사용자에게 반환합니다.
질문-SQL 쌍은 벡터 데이터베이스에 저장되는 메타데이터 중 하나입니다. Semantic Layer가 데이터베이스 구조와 비즈니스 문맥을 정리하는 기반 정보라면, 질문-SQL 쌍은 과거 사용 사례로서 LLM이 더 정확한 SQL을 생성하도록 도와주는 예시 데이터입니다.
결국, Semantic Layer가 준비한 정보와 질문-SQL 쌍은 RAG가 검색하여 LLM에 제공되며, 이 둘의 조합을 통해 SQL 생성의 정확도와 신뢰도가 크게 향상됩니다.
HEARTCOUNT ABI에서 각 정보들은 형태에 따라 벡터 DB에 별도의 Collection으로 저장되며 Collection 별 주요 저장 정보는 다음과 같습니다.
메타데이터를 저장하는 다양한 방식
LLM 기반 Text to SQL 시스템은 메타데이터를 통해 데이터베이스의 구조와 의미를 이해하고 SQL 쿼리를 생성합니다. 이 메타데이터를 어떻게 저장하고 관리하느냐에 따라 LLM의 성능과 정확도가 크게 달라집니다.
대부분의 서비스는 아래의 세 가지 방식으로 메타데이터를 관리하고 있습니다.
예시 서비스
Vanna AI
- 사용자가 테이블과 컬럼의 설명을 직접 입력하여 비즈니스 문맥을 강화합니다.
- 사용자가 제공한 DDL(데이터 정의 언어) 및 문서 데이터를 벡터DB에 저장합니다.
- 초기에는 사용자가 제공한 스키마와 메타데이터를 단순히 추출하여 사용하고, 질문-답변 데이터가 축적되면서 시스템이 개선됩니다.
Wren AI
- 데이터 모델을 사용자가 직접 입력하여 메타데이터로 저장하고 활용합니다.
- 복잡한 관계형 데이터베이스의 구조를 자동으로 분석하여 RAG 기반 검색 성능을 강화합니다.
HEARTCOUNT ABI의 차별점
HEARTCOUNT ABI는 기존의 세 가지 메타데이터 저장 방식의 단점을 보완하고, 장점을 최대한 활용하는 방식을 채택하고 있습니다. 아래의 그림처럼 HEARTCOUNT ABI는 사용자와 시스템 간의 피드백 루프를 통해 지속적으로 메타데이터를 확장하고 성능을 개선합니다.
1. 사용자가 직접 문서 전달
- 기업에서 사용하던 실제 SQL 쿼리와 쿼리에 대한 설명 등을 제공해주시면 이를 기반으로 초기부터 메타데이터를 구축할 수 있습니다.
- 이를 통해 시스템 초기 단계에서도 높은 정확도를 보장합니다.
2. 사용자가 직접 입력 및 수정
- 사용자가 ABI의 UI를 통해 테이블 구조와 컬럼에 대한 설명을 직접 입력할 수 있습니다.
- 이를 통해 비즈니스 문맥과 맞춤형 메타데이터를 쉽게 추가할 수 있습니다.
- 입력해야 하는 정보가 많을 경우, 정해진 양식에 따라 문서를 제공해주시면 빠르게 메타데이터를 구축해드립니다.
3. 데이터베이스 자동 추출
- 설정된 주기에 따라 기업의 데이터베이스에서 테이블 구조와 스키마 정보를 자동으로 읽어와 저장합니다.
- 복잡한 설정 없이도 데이터베이스 구조를 간략히 파악하고 메타데이터를 구성할 수 있습니다.
- 사용자가 입력한 메타데이터가 있을 경우, 함께 읽어와 저장합니다.
4. 사용자 피드백
- 생성된 쿼리는 화면을 통해 사용자에게 전달됩니다. 사용자는 생성된 쿼리를 직접 실행하여 결과를 확인하고, 생성된 쿼리에 대한 피드백을 버튼을 통해 전달합니다.
5. 쿼리 저장
- 사용자의 피드백을 바탕으로, 생성된 쿼리의 결과는 삭제되거나 학습에 사용되기 위해 벡터 데이터베이스(ChatSQL)에 저장됩니다.
- 설명과 질문의 내용을 참고하여 LLM을 통해 질문을 생성하여 동일한 쿼리에 대해 데이터를 증강시킵니다.
HEARTCOUNT ABI 접근 방식의 장점
- 초기부터 높은 정확도
기업의 실제 SQL 쿼리와 쿼리에 대한 설명을 제공받아 초기 메타데이터를 구축하므로 초기 성능이 뛰어납니다. - 맞춤형 메타데이터 제공
UI를 통해 비즈니스 문맥에 맞는 세부 설명이나 계산식 등을 직접 입력하고 관리할 수 있습니다. - 자동화된 데이터베이스 구조 추출
테이블 구조와 관계를 자동으로 파악해 저장하며, 필요 시 추가적인 메타데이터를 사용자에게 요청할 수 있습니다.
결과적으로 HEARTCOUNT ABI는 정확성, 유연성, 그리고 자동화된 관리를 결합하여 Text to SQL 성능을 극대화합니다.
메타데이터 문서 작성 가이드
HEARTCOUNT ABI의 Text to SQL 기능을 최대한 활용하려면 정확하고 체계적인 메타데이터 작성이 중요합니다. 메타데이터를 잘 작성하면 LLM이 데이터베이스의 구조와 비즈니스 문맥을 더 잘 이해하고, 정확한 SQL 쿼리를 생성할 수 있습니다. 다음 내용은 위 그림의 1번(직접 문서 전달) 방식을 위한 문서 작성 가이드입니다.
메타데이터는 다음 항목들을 중심으로 작성해야 합니다:
메타데이터 문서 작성 시 주의사항
1. 비즈니스 용어 사용
- 비즈니스 사용자가 이해할 수 있도록 컬럼이나 테이블명을 비즈니스 용어로 설명합니다.
- 예:
rev
→ "총 매출"
2. 관계 및 조인 정보 명시
- 테이블 간의 관계와 조인 조건을 명확히 작성합니다.
- 예:
orders.customer_id = customers.id
3. 계산식 및 KPI 정의
- 컬럼을 기반으로 한 계산식이나 핵심 성과 지표(KPI)를 명확히 기록합니다.
- 예: "순매출 = revenue - discount - returns"
4. 간결하지만 명확한 설명
- 설명은 핵심을 담되 간결하게 작성해야 합니다.
메타데이터는 단순한 구조 정보가 아니라 비즈니스 문맥과 데이터 간 관계를 표현하는 핵심 정보입니다.
HEARTCOUNT ABI의 Text to SQL 기능은 이러한 메타데이터를 바탕으로 LLM이 더 정확한 쿼리를 생성하도록 지원합니다.
메타데이터를 작성할 때는 비즈니스 용어, 테이블 관계, 계산식을 명확히 정리하는 것이 중요하며, 위의 예시와 가이드를 참고해 엑셀 파일, CSV 형태로 작성하여 전달해주시면 됩니다.
예시 SQL 문서 작성 가이드
HEARTCOUNT ABI의 Text to SQL 기능을 최대한 활용하기 위해, LLM에게 제공할 예시 SQL 문서를 체계적으로 작성하는 것이 중요합니다. 기업에서 사용하던 실제 SQL 쿼리와 쿼리에 대한 설명을 제공하면, 초기 단계에서도 높은 성능과 신뢰성을 가진 Text to SQL 기능을 사용할 수 있습니다.
SQL 문서 작성은 필수는 아니지만, 초기 성능을 높이고 데이터베이스 구조와 비즈니스 문맥을 정확히 반영하기 위해 권장됩니다. 특히 자주 사용하는 테이블이나 분석 쿼리에 대한 최소한의 정보를 제공하면, LLM이 질문에 대해 더 적합한 SQL 쿼리를 생성하는 데 큰 도움을 줍니다.
문서 작성 항목
작성한 SQL 문서는 엑셀 파일 (CSV 형태 가능)로 제공하며, 다음과 같은 항목을 포함하도록 작성합니다:
결론 및 기대 효과
HEARTCOUNT ABI는 RAG(Retrieval-Augmented Generation)와 Semantic Layer를 결합해 기업의 데이터를 정확하고 신속하게 활용할 수 있는 Text to SQL 솔루션을 제공합니다. 또한 기존의 메타데이터 저장 방식의 한계를 극복하며, 기업 맞춤형 메타데이터 구축을 통해 SQL 쿼리의 정확도와 성능을 극대화합니다.
Text to SQL 도입 시 기대 효과
HEARTCOUNT ABI의 Text to SQL 기능을 통해 다음과 같은 효과를 기대할 수 있습니다:
1. SQL 쿼리 생성의 자동화
- SQL에 대한 전문 지식이 없어도 자연어로 데이터를 쉽게 조회할 수 있습니다.
- 비개발자나 비즈니스 사용자도 데이터를 직접 활용하여 의사결정 속도를 높일 수 있습니다.
2. 높은 정확도와 신뢰성
- 메타데이터와 RAG 기반 검색을 통해 비즈니스 문맥과 데이터 관계를 정확히 반영한 SQL 쿼리를 생성합니다.
- 초기부터 질문-SQL 쌍을 제공받아 정확도 높은 성능을 확보합니다.
3. 데이터 활용 효율성 향상
- 테이블 관계, 컬럼 의미, 계산식 등을 명확히 정의한 Semantic Layer를 기반으로 데이터베이스의 복잡한 구조를 단순화합니다.
- 데이터베이스 구조에 대한 이해 없이도 비즈니스 가치를 빠르게 도출할 수 있습니다.
4. 유연하고 확장 가능한 메타데이터 관리
- 사용자의 입력, 자동화된 스키마 추출, 지속적 학습을 통해 메타데이터를 확장하고 유지보수 비용을 최소화합니다.
5. 데이터 기반 의사결정 강화
- 누구나 데이터를 손쉽게 조회하고 분석할 수 있어, 기업의 데이터 활용도를 극대화합니다.