Python으로 자연어-SQL API 구축하기
요약
Telnyx AI Inference를 활용하여 자연어를 SQL 쿼리로 변환하는 Python 기반 API 구축 방법을 소개합니다. Flask를 사용하여 쿼리 생성, 샘플 데이터 테스트, 보안을 위한 SQL 검증 기능을 포함한 워크플로우를 구현합니다.
핵심 포인트
- Telnyx AI를 이용한 자연어-SQL 변환 API 구현
- Flask 기반의 쿼리 생성 및 샘플 데이터 검증 엔드포인트 제공
- 보안을 위한 읽기 전용 SQL 및 다중 문 실행 방지 가드레일 적용
- 스키마 컨텍스트를 포함한 구조화된 JSON 결과 반환
대부분의 데이터 관련 질문은 평이한 영어로 시작됩니다.
"어떤 고객이 가장 많은 지출을 했나요?"
"대기 중인 주문은 몇 개인가요?"
"지난달에 어떤 제품이 매출을 발생시켰나요?"
누군가 이러한 질문들을 SQL로 변환할 수 있지만, 이는 보통 개발자, 분석가 또는 대시보드 업데이트를 기다려야 함을 의미합니다.
이 Python 예제는 Telnyx AI Inference를 사용하여 작은 자연어-SQL (Natural Language to SQL) API를 구축하는 방법을 보여줍니다.
코드: https://github.com/team-telnyx/telnyx-code-examples/tree/main/sql-natural-language-python
기능
Flask 앱은 다음을 노출합니다:
POST /query
POST /query/sample
POST /validate
...
POST /query는 자연어 질문, SQL 방언 (SQL dialect), 그리고 스키마 DDL을 수락합니다. 생성된 SQL, 설명, 사용된 테이블 및 메타데이터가 포함된 구조화된 JSON을 반환합니다.
POST /query/sample은 번들로 제공되는 SQLite 샘플 데이터셋을 사용하여, 운영 데이터베이스에 연결하지 않고도 질문을 던지고 실제 행(row)이 반환되는 것을 확인할 수 있습니다.
POST /validate는 샘플 데이터셋을 대상으로 SQL 문자열을 드라이 런 (dry-run) 합니다.
검증(Validation)이 중요한 이유
자연어-SQL (Natural Language to SQL)에는 가드레일 (guardrails)이 필요합니다.
이 예제는 모델에 읽기 전용 (read-only) SQL을 요청한 다음, 실행 전에 생성된 쿼리를 확인합니다. 검증 계층 (validation layer)은 다중 문 (multiple statements), 주석 (comments), 그리고 쓰기 지향적인 SQL 키워드를 거부합니다.
이를 통해 예제가 다음과 같은 유용한 워크플로우 (workflow)에 집중할 수 있게 합니다:
- 질문하기
- 스키마 컨텍스트 (schema context) 포함하기
- 쿼리 생성하기
- 쿼리 검증하기
- 구조화된 결과 반환하기
모델은 언어 번역을 수행합니다. 앱은 여전히 안전 점검을 담당합니다.
실행하기
예제 리포지토리 (repo)를 클론 (clone) 하세요:
git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/sql-natural-language-python
.env 파일을 생성하세요:
cp .env.example .env
Telnyx API 키를 추가하세요:
TELNYX_API_KEY=your_telnyx_api_key
AI_MODEL=moonshotai/Kimi-K2.6
HOST=127.0.0.1
설치 및 시작:
설치 및 실행:
pip install -r requirements.txt
python app.py
샘플 데이터셋에 대한 질문하기:
curl -X POST http://localhost:5000/query/sample \
-H "Content-Type: application/json" \
-d '{"question": "Show me the top 3 customers by total order revenue"}' | python3 -m json.tool
쿼리 유효성 검사하기:
curl -X POST http://localhost:5000/validate \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT * FROM orders WHERE total > 100"}' | python3 -m json.tool
활용 분야
이것은 작은 API이지만, 실제 내부 도구들과 연결됩니다:
- 분석 어시스턴트 (analytics assistants)
- 지원 대시보드 (support dashboards)
- 영업 운영 도구 (sales operations tools)
- 데이터 웨어하우스 쿼리 도우미 (data warehouse query helpers)
- 제품 사용량 탐색 (product usage exploration)
- 내부 관리 도구 (internal admin tools)
유용한 부분은 경계(boundary)입니다. 이 앱은 생성된 SQL을 무조건 신뢰하지 않습니다. 구조화된 출력을 요청하고, 쿼리를 유효성 검사하며, 다른 시스템이 검사하거나 표시할 수 있는 JSON을 반환합니다.
참고 자료 (Resources)
코드: https://github.com/team-telnyx/telnyx-code-examples/tree/main/sql-natural-language-python
Telnyx AI 스킬 및 툴킷: https://github.com/team-telnyx/ai
Telnyx AI 추론 (Inference) 문서: https://developers.telnyx.com/docs/inference
Chat Completions API: https://developers.telnyx.com/api/inference/chat-completions
Telnyx 포털: https://portal.telnyx.com/
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기