SQL 기반 Q&A 시스템은 구조화된 데이터(데이터베이스)를 활용해 사용자의 자연어 질문을 SQL 쿼리로 변환하고, 그 결과를 다시 자연어로 답변하는 시스템입니다.
즉, 사용자가 “현재 가장 비싼 ETF는 뭐야?” 같은 질문을 하면:
자연어 질문을 SQL 쿼리로 변환
→ SELECT name FROM ETFs ORDER BY price DESC LIMIT 1;
쿼리를 데이터베이스에서 실행하고 결과를 가져옴
→ 결과: Vanguard S&P 500 ETF
결과를 자연어로 변환하여 응답 생성
→ "현재 가장 비싼 ETF는 Vanguard S&P 500 ETF입니다."
이 과정을 자동으로 수행하는 것이 SQL 기반 Q&A 시스템입니다.
SQL 기반 Q&A 시스템을 구현할 때, 자연어 질문을 데이터베이스에서 어떻게 처리할지에 따라 두 가지 접근 방식이 있습니다.
Chain 방식: 한 번의 SQL 쿼리로 바로 답을 찾아내는 방식
Agent 방식: 질문을 분석하고 여러 개의 SQL 쿼리를 순차적으로 실행하는 방식
✅ 하나의 질문 → 하나의 SQL 실행 → 하나의 답변
Chain 방식은 질문을 SQL 쿼리로 변환하고 즉시 실행하여 결과를 반환하는 간단한 방식입니다.
💡 Chain 방식 예제
사용자가 질문합니다.
"ETF가 몇 개 있어?"
🛠 처리 과정
자연어 → SQL 변환
SELECT COUNT(*) FROM ETFs;
데이터베이스 실행
결과: 45
자연어 답변 생성
"총 45개의 ETF가 있습니다."
📌 Chain 방식의 특징
✅ 빠르고 단순한 질문에 최적화
✅ 단일 SQL 쿼리로 실행
✅ 예측 가능한 실행 흐름
❌ 복잡한 질의(여러 조건 필요 시) 해결이 어려움
2️⃣ Agent 방식 (복잡한 질문 처리)
✅ 하나의 질문 → 여러 개의 SQL 실행 → 종합적인 답변 생성
Agent 방식은 하나의 질문을 더 작은 하위 질문으로 나누고, 여러 번 데이터베이스를 조회하면서 답변을 생성하는 방식입니다.
사용자가 질문합니다.
"지난 한 달 동안 가장 많이 상승한 ETF는?"
이 질문을 해결하려면 두 단계의 SQL 실행이 필요합니다.
ETF들의 한 달 전 가격과 현재 가격을 비교하여 가장 많이 오른 ETF 찾기
그 ETF의 상세 정보 조회
🛠 처리 과정
첫 번째 SQL 실행 (한 달 동안 가장 많이 상승한 ETF 찾기)
SELECT name FROM ETFs WHERE date >= DATE('now', '-1 month') ORDER BY price_change DESC LIMIT 1;
결과: "Invesco QQQ Trust"
SELECT price FROM ETFs WHERE name = 'Invesco QQQ Trust';
결과: 355.75
자연어 답변 생성
"지난 한 달 동안 가장 많이 상승한 ETF는 Invesco QQQ Trust이며, 현재 가격은 355.75달러입니다."
📌 Agent 방식의 특징
✅ 복잡한 질문을 해결 가능
✅ 추가적인 데이터 조회 가능 (여러 SQL 실행)
✅ 맥락을 유지하면서 연속적인 질문 가능
❌ 속도가 Chain 방식보다 느릴 수 있음
❌ 설계가 복잡해질 수 있음
🔍 Chain vs Agent 비교 정리
🚀 언제 어떤 방식을 사용할까?
📌 예제 비교
✅ 결론
1️⃣ Chain 방식 → 빠르고 간단한 질문에 최적 (단일 SQL 실행)
2️⃣ Agent 방식 → 복잡한 질문, 연속적인 질문, 분석적인 질문에 필요 (여러 개의 SQL 실행)