SQL 캠프 광고 이미지
  • SQL
  • 분석 도구
  • 기타

[해외 데이터 분석 소식] 26개의 재귀적 GPT 프롬프트로 SQL 분석가 대체하기

SQL 캠프 광고 이미지
SQL 캠프 광고 이미지
✍🏻
Editor 선미's comment
GPT 열풍입니다. 데이터리안도 유행에 뒤쳐질 수 없죠! “Replacing a SQL analyst with 26 recursive GPT prompts”를 저자의 허락을 받고 번역했습니다. 컨셉에 충실하기 위해 번역은 DeepL Translator의 도움을 받았습니다. 재미있게 읽어주세요.
 
(참고로, 여기에 제가 구축한 모든 코드가 있으며, Patterns AI Studio 에서도 사용해 볼 수 있습니다.)
 
제가 Square에 근무할 때 팀 규모가 작았을 때는 끔찍한 '분석 온콜(Analytics on-call)' 로테이션이 있었습니다. 엄격하게 주 단위로 돌아가면서 근무를 했는데, 자신의 차례가 되면 그 주에 '진짜' 업무는 거의 하지 못하고, 회사의 다양한 제품 및 운영 팀으로부터 임시로 들어오는 질문을 처리하는 데 대부분의 시간을 할애해야 했습니다. 분석 팀에서 관리자 역할을 차지하기 위한 경쟁이 치열했는데, 저는 이 이유가 관리자는 이 로테이션에서 제외되기 때문이었다고 생각합니다.
그래서 분석 당직과 같은 업무를 GPT-3와 같은 차세대 토큰 옵티마이저로 완전히 대체할 수 있다는 생각은 제가 오래 전부터 시도해보고 싶었던 아이디어였습니다. 드디어 이번 주에 직접 사용해 볼 수 있는 기회를 얻었습니다.
곧 펀드레이징 프로세스를 시작할 예정이라, 투자자, 회사, 펀드레이징 라운드에 대한 크런치베이스 데이터 세트 위에 자유형 질문에 답하는 분석 봇을 구축하려고 시도한 아이디어를 테스트할 수 있었습니다. 저는 이 봇을 크런치봇(CrunchBot)이라고 부릅니다.
 
자세한 내용은 계속 읽어보시기 바라며, 여기서는 간단한 작업을 정확하게 수행하는 간단한 예시를 보여드리겠습니다:
notion image
 
그리고 더 복잡한 문제를 정확하게 해결한 예도 있습니다:
notion image
 
그리고 완전히 잘못 푼 예도 있습니다 (davinci-003, 조인 조건이 잘못됐잖아!):
notion image
 
그리고 중간 정도의 복잡도는 대부분 옳았습니다:
notion image
 
전반적으로 결과의 품질에 놀랐습니다. LLM은 계속해서 놀라움을 자아내지만, 단 몇 시간의 노력으로 회사에서 한 포지션을 거의 대체할 수 있는 결과를 낸다는 것은 충격적일 정도입니다.
 
 

구축 방법

제 계획은 Patterns Studio 에서 구축하는 것이었습니다. 크게 네 부분으로 구성되었습니다.
 
  • 프롬프트 만들기
    • 사용자의 질문
    • 사용 가능한 테이블의 스키마 및 샘플 데이터
    • 정확한 명령
  • 다양한 GPT 모델을 통해 실행하고 5개 이상의 완성된 SQL문을 얻는 것
  • SQL을 실행하고 가장 나은 결과를 선택하는 것
  • Slack 봇에 연결
 
마지막에는 신속한 개선 사항을 계속 빠르게 찾아내면서 훨씬 더 복잡한 파이프라인을 갖게 되었습니다. 특히 SQL 생성 및 실행 부분은 다음과 같은 재귀 구조를 가지게 되었는데요:
 
  • 후보 쿼리 생성
  • GPT 스스로 SQL을 품질 검사하여 일반적인 오류(예: NULLS LAST)를 발견하고 올바른 쿼리를 생성
  • 테이블에 대해 SQL을 실행
  • 오류가 있거나 결과가 없는 경우, 올바른 결과를 생성하도록 GPT에 쿼리를 수정하도록 요청하고 위 과정을 반복
  • 그렇지 않으면 결과를 반환
 
이렇게 하게 되면 1개의 사용자 질문을 처리하는데 GPT를 20회 이상 호출하는 체인이 만들어집니다. GPT 호출을 한 번 더 할 때마다 점진적인 성능 개선이 보이는데, 성능 그래프는 대체로 로그 함수처럼(logarithmic improvement)* 보입니다. 한 번 호출을 완료할 때마다 더 많은 컨텍스트와 검사를 추가하고 다른 버전을 탐색하고 결과를 반복할 수 있습니다. 이는 주니어 분석가가 답을 얻기 위해 사용하는 것과 동일한 프로세스로, 이 경우 15초가 걸리고 크레딧으로 1달러가 드는 반면 분석가는 50달러와 1시간이 소요됩니다.
어쨌든, 제가 어떻게 구축했는지에 대한 단계별 설명은 다음과 같습니다. 모든 코드가 포함된 패턴의 템플릿 앱에서 따라할 수 있습니다. (데이터가 포함되어 있지 않으며, Crunchbase는 독점 데이터 세트입니다. 이 특정 데이터 세트를 탐색하는 데 관심이 있으시면 kvh@patterns.app 으로 문의하세요)
 

1. 크런치베이스 데이터 받기

전체 Crunchbase 데이터 세트에는 240만 개의 조직과 51만 개의 펀딩 라운드가 포함되어 있습니다. 우리는 24시간마다 전체 CSV 덤프를 통해 이 데이터를 Postgres 인스턴스로 수집합니다. 이 분석을 위해 organizations, funding_rounds, 그리고 investment 세 가지 테이블을 사용했습니다.
 

2. 초기 프롬프트 빌드

초기 SQL 생성 프롬프트는 세 가지 기본 요소를 포함합니다: 쿼리할 수 있는 테이블과 데이터의 요약, 사용자의 질문, 그리고 GPT에 올바른 Postgres 쿼리를 작성하도록 요청하는 프롬프트. 다음은 우리가 사용한 템플릿입니다:
 
예를 들어 다음과 같은 프롬프트가 표시됩니다:
 

3. 쿼리 다시 확인

GPT가 몇 가지 일반적인 실수를 반복해서 저지르는 것을 발견했기 때문에(모든 분석가가 저지르는 것과 같은 실수), 다른 작업을 하기 전에 각 쿼리를 검토하고 버그를 수정하라는 구체적인 메시지를 줬습니다:
 

4. 생성된 SQL을 데이터베이스에 대해 실행하고 오류를 수정합니다.

다음으로 데이터베이스에 대해 SQL을 실행해봅니다. 결과가 나오면 결과와 쿼리를 저장합니다. 결과가 나오지 않거나 오류가 발생하면 GPT에 SQL 수정을 요청합니다:
 
다음은 다음 쿼리를 사용하여 이 단계가 잘 작동하는 예입니다. 오류를 발견할 수 있나요?
 
구문 오류(Syntax error)입니다:
 
그런 다음 이 새로운 쿼리로 수정되었습니다:
 

5. N회 반복

위의 완료 루프를 반복합니다. 이전 결과와 일치하는 결과를 얻거나 최대 시도 횟수 제한(이 경우 5회)에 도달하면 이 루프를 중지하도록 선택했습니다.
 

6. Slack 봇 빌드하기

Slack 봇 용 기성 패턴 템플릿을 사용하여 연결했습니다. 전체 GPT 파이프라인은 20초 이상 걸릴 수 있으므로 원래 Slack 멘션을 빠르게 인식하기 위해 두 번째 슬랙 노드를 추가했습니다.
 
 

결론

GPT가 이 작업을 얼마나 잘 수행할 수 있는지는 거의 한계가 없는 것 같습니다. 나머지 실패 모드는 컨텍스트가 누락되었거나 반복 디버깅이 충분하지 않은 경우였습니다(모든 분석 노력의 핵심인 반복 디버깅). 예를 들어, GPT는 질문에 답할 때 카테고리 또는 회사 이름의 정확한 이름과 철자를 추측해야 했습니다. 먼저 몇 가지 '조사' 쿼리를 실행할 수 있었다면, 최종 프롬프트와 쿼리를 통해 정답에 도달할 수 있는 충분한 컨텍스트를 구축할 수 있었을 것입니다. 이 수준에서 GPT를 사용해 보면 "재귀적 GPT"가 AGI**에 매우 가깝다는 느낌을 받을 수 있습니다. 심지어 GPT에 스스로 강화 학습을 요청하여 이전 질문에 대한 수정 사항을 기반으로 새로운 프롬프트를 추가하도록 할 수도 있습니다. 물론 GPT-4 에서는 이 모든 것이 어떻게 될지 누가 알겠습니까?
 
 

역자 주

Ken Van HarenPatterns | Co-Founder

함께 읽어보면 좋은 글

주식회사 데이터리안