n8n으로 구현하는 Text-to-SQL
프로젝트 목표 및 설정
•
최종 목표: Slackbot 구현
•
현재 단계: 웹에서 테스트 구현
•
트리거: 채팅 메시지로 시작
n8n 워크플로우 구성
LLM 체인 설정
•
AI에서 기본 LLM 체인 선택
•
모델 연결 (비용이 조금 비싼 모델 사용)
•
테이블 스키마 읽기, 분석 후 쿼리 생성이 중요한 작업
시스템 프롬프트 작성
•
데이터베이스 스키마를 보고 사용자 질문을 SQL 쿼리로 변환하도록 요청
•
스키마 정보 입력 필요
데이터베이스 스키마 처리
스키마 정보 수집
•
데이터 삽입 스크립트의 create table 명령어들이 데이터베이스 스키마
•
포함 정보:
◦
테이블명
◦
컬럼 정보
◦
외래키 관계 (onDeleteCascade 등)
스키마 입력 방법
•
create table 관련 모든 내용을 복사하여 입력
•
테스트 시 질문에 대해 쿼리 생성 확인
쿼리 실행 설정
Supabase 연결 문제
•
n8n의 Supabase 노드는 raw 데이터만 가져올 수 있음
•
쿼리 실행 불가 (테이블과 컬럼명을 미리 지정해야 함)
•
사용자 질문을 예측할 수 없어 Supabase 노드 사용 불가
PostgreSQL 연결 설정
•
Post 선택 후 "execute SQL query" 선택
•
LLM에서 생성된 쿼리를 여기서 실행
•
출력 파서 추가로 쿼리만 반환하도록 설정
데이터베이스 연결 정보 입력
•
Supabase → Connect → Type에서 Python 선택
•
인프런 강의자료에 있는 연결 정보 복사하여 입력:
◦
User 정보
◦
Host 정보
◦
Database: Postgres
◦
Port: 기본 6543 (필요시 변경)
◦
Password: 별도 저장하거나 Supabase에서 재설정
•
원하시면 제가 제공하는 데이터베이스와 연결하지 않고, 제공해드리는 스크립트를 활용해서 직접 데이터를 추가하셔도 됩니다
출력 결과 처리
쿼리 결과 확인
•
설정에서 "always output data" 활성화
•
쿼리 실행 결과 데이터 확인
결과 메시지 다듬기
•
추가 LLM 체인으로 메시지를 예쁘게 다듬기
•
시스템 프롬프트에서 사용자의 첫 번째 질문 참조하여 답변 요청
•
중복된 내용은 제거 가능
동적 데이터 처리
JSON 객체 처리 문제
•
하드코딩된 값 대신 동적 값 사용 필요
•
쿼리 결과에 따라 스키마가 변경됨
•
JavaScript에서 객체를 문자열로 변환: JSON.stringify() 사용
최종 결과 확인
•
쿼리 결과가 올바르게 들어가는지 확인
•
답변이 정확하게 나오는지 테스트
기본 Text-to-SQL 완료
•
가장 기본적인 텍스트-투-SQL 작업 완료
•
다음 에피소드에서 업그레이드 예정