반응형
내부 데이터를 다루다 보면, 자주 반복되는 SQL 쿼리를 작성하는 일이 번거롭다. 간단한 질의조차도 스키마를 열어보며 작성해야 하는 경우가 많다. 이를 줄이기 위해, 자연어 질문을 SQL로 변환하는 AI 기반 SQL 비서를 Flask 앱 형태로 직접 구현했다.
목표
자연어 입력 → SQL 변환 → 결과 반환
- 별도의 로그인/챗봇 없음
- 단일 입력창과 결과 출력창
- PostgreSQL 연결
- OpenAI GPT-4 API 활용
1. OpenAI API 설정
pip install openai flask psycopg2-binary python-dotenv
.env 파일:
OPENAI_API_KEY=sk-...
2. PostgreSQL + GPT-4 연동 플라스크 앱
from flask import Flask, request, jsonify
import openai
import psycopg2
import os
from dotenv import load_dotenv
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
app = Flask(__name__)
# PostgreSQL 연결
conn = psycopg2.connect(
dbname="mydb", user="myuser", password="mypassword", host="localhost", port="5432"
)
@app.route("/ask", methods=["POST"])
def ask_sql():
question = request.json.get("question")
prompt = f"""
You are a PostgreSQL expert.
Use the following schema:
Table: employees
Columns: id, name, department, salary, date_joined
Translate the following natural language question into SQL:
Question: {question}
SQL:
"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
sql = response["choices"][0]["message"]["content"].strip()
# 기본적인 보안 필터링
if any(x in sql.upper() for x in ["DROP", "DELETE", "UPDATE"]):
return jsonify({"error": "Unsafe SQL detected", "sql": sql}), 400
# SQL 실행
try:
with conn.cursor() as cur:
cur.execute(sql)
result = cur.fetchall()
columns = [desc[0] for desc in cur.description]
rows = [dict(zip(columns, row)) for row in result]
return jsonify({"sql": sql, "result": rows})
except Exception as e:
return jsonify({"error": str(e), "sql": sql}), 500
3. 프롬프트 엔지니어링이 핵심
처음에는 질문만 넘기면 충분할 줄 알았지만, 정확도를 높이기 위해 반드시 스키마 정보를 프롬프트에 포함시켜야 한다. 예:
You are a PostgreSQL expert.
Use the following schema:
Table: employees
Columns: id, name, department, salary, date_joined
Translate the following question into SQL:
4. 추가 개선 사항
- DROP/DELETE 필터링
- 실패한 쿼리 로그 저장
- 다중 테이블 대응 예정
- 질문과 SQL 로그 기능 추가 예정
마무리
이 방식은 복잡한 AI 모델 구축 없이도, 강력한 자연어 → SQL 인터페이스를 실현할 수 있다. 중요한 건 모델 성능이 아니라 입력(프롬프트)의 정교함이라는 점이다.
반응형
'AI 개발 > AI 에이전트 (AI Agents)' 카테고리의 다른 글
💰3 AI 금융 에이전트: Google ADK로 만드는 금융 전문자 에이전트 (2) | 2025.05.27 |
---|---|
데이터 엔지니어를 위한 AI 이용법: PostgreSQL과 주식 데이터로 배우는 LLM + MCP 실전 활용법 (1) | 2025.05.12 |
🚀 AI 시대의 HTTP? MCP가 가져올 새로운 혁명 (2) | 2025.04.27 |
🤖 MCP vs. A2A: 두 가지 AI 에이전트 프로토콜 비교 (0) | 2025.04.23 |
구글 ADK 🔧 Google Cloud로 나만의 AI 에이전트를 만드는 방법 (1) | 2025.04.21 |