Search

19. n8n으로 구현하는 Text-to-SQL

섹션
6. Text-to-SQL: 어제 서울에서 가장 많이 팔린 물건은?

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 작업 완료
다음 에피소드에서 업그레이드 예정