×
Community Blog Alibaba Cloud의 Qwen을 활용한 SQL 쿼리 생성

Alibaba Cloud의 Qwen을 활용한 SQL 쿼리 생성

이 튜토리얼에서는 Alibaba Cloud의 Qwen 모델을 사용하여 자연어에서 SQL 쿼리를 생성하는 방법을 보여 드리겠습니다.

Gartner의 생성형 AI 환경: 빠른 성과와 가능성 높은 성과

Gartner의 "빠른 성과" 프레임워크

1
_Source: Gartner (2023)_

Gartner에 따르면"빠른 성과"는 다음 사용 사례를 말합니다.

  • 보통에서 높은 비즈니스 가치 전달
  • 낮은 배포 비용, 복잡성 및 위험 요구
  • 기존 도구와 리소스로 빠르게 구현 가능

이러한 프로젝트는 대규모 인프라 점검 없이 생성형 AI를 통해초기 ROI(투자 수익)를 얻고자 하는 조직에 이상적입니다.

Text-to-SQL을 통한 "빠른 성과"

저희 솔루션이 빠른 성과의 예가 되는 이유는 다음과 같습니다.

  1. 낮은 구현 비용: 기존 데이터베이스(예: PostgreSQL) 및 API(Qwen-Max)를 활용합니다.
  2. 빠른 가치 실현 시간: 몇 달이 아닌 몇 시간안에 배포합니다.
  3. 확장 가능한 영향력: 반복적인 SQL 작업을 자동화하여 인건비와 오류를 줄입니다.
  4. 최소 위험: 기존 워크플로우와 원활하게 통합되어 변화 없이 그대로 사용 가능합니다.

Gartner의 2024 GenAI 사용-사례 비교

2
_Source: Gartner, Inc. (2024)_

Gartner의 분석에 따르면 코드 생성(Text-to-SQL 포함)은 높은 실현 가능성, 높은 가치, 낮은 위험이라는 "가능성 높은 성과" 4분면에 속합니다. 주요 시사점:

  • 높은 실현 가능성: Qwen-Max와 같은 도구는 자연어에서 SQL을 안정적으로 생성합니다.
  • 높은 비즈니스 가치: 반복 작업을 자동화하고 오류를 줄이며 데이터 인사이트를 가속화합니다.
  • 낮은 위험: 복잡한 AI 응용 프로그램에 비해 중단을 최소화합니다.

Text-to-SQL이 "가능성 높은 성과"를 낼 수 있는 이유

1. 비용 효율:

  • 수동 작업 감소: 개발자와 분석가는 전략적 작업에 집중할 수 있습니다.
  • 낮은 오류율: AI 생성 SQL은 구문/논리 오류를 최소화합니다.

2. 확장성:

  • 보고 자동화: 대시보드 또는 감사에 대한 수천 개의 쿼리를 생성합니다.
  • 기존 시스템과 통합: PostgreSQL과 같은 데이터베이스에서 작동합니다.

3. 빠른 가치 실현 시간:

  • 빠른 설정: Qwen-Max와 같은 API를 사용하여 몇 시간 안에 배포합니다.
  • 최소 훈련: 사용자는 기본적인 자연어 기술만 있으면 됩니다.

결론: Text-to-SQL은 전략적 저위험 투자입니다.

Text-to-SQL 솔루션을 채택함으로써 조직은 위험도가 낮고 영향력이 큰AI 이니셔티브에 우선순위를 두라는 Gartner의 권고에 부합할 수 있습니다. 이는 단순한 자동화가 아니라 최소한의 초기 투자로 생산성을 높이고 데이터 기반 의사 결정을 가속화하는 것입니다.

더 깊은 통찰력을 얻으려면 Gartner의 보고서를 살펴보십시오.

이 구조는 비즈니스 조정, 위험 완화, 실용적인 ROI를 강조하므로 경영진과 의사 결정권자에게 적합합니다.

기술 심층 분석: Text-to-SQL 챗봇 구축

SQL 쿼리: 모든 개발자가 직면하는 문제

3

SQL 쿼리를 작성하는 것은 시간이 많이 걸리고 오류가 발생하기 쉬우며 비용이 많이 듭니다. 고객 데이터를 분석하든 보고서를 생성하든 자연어 질문을 SQL로 번역하려면 데이터베이스에 대한 깊은 이해가 필요합니다. AI를 사용하여 이 프로세스를 자동화하고 비용을 절감할 수 있다면 어떨까요?

이 문서에서는 최첨단 대규모 언어 모델(LLM)인 Alibaba Cloud의 Qwen3 (이 예에서는 Qwen-Max를 사용함)로 구동되는 Text-to-SQL 챗봇을 구축하겠습니다. 이 챗봇은 PostgreSQL 데이터베이스에 연결되어, 사용자의 질문을 SQL로 변환하고 결과를 반환합니다. 단 한 줄의 SQL도 직접 작성할 필요가 없습니다.

Alibaba Cloud의 비용 효율적인 API 요금Qwen-Max의 높은 정확도를 통해 개발 시간_ 및_ 클라우드 비용을 모두 절감할 수 있습니다.

1단계: Alibaba Cloud 모델 스튜디오로 시작

1.1 모델 스튜디오에 액세스

Alibaba Cloud 방문 후 가입합니다. 로그인한 후 모델 스튜디오 콘솔(링크)로 이동합니다.

1.2 API 키 생성

API 키 관리 페이지(링크)로 이동하여 새 API 키를 만듭니다. Qwen-Max에 대한 액세스 토큰이므로 안전하게 보관합니다.

1.3 Python 환경 설정

다음과 같이 가상 환경을 만들고 종속 요소를 설치합니다.

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install required packages
pip install openai python-dotenv psycopg2-binary tabulate

requirements.txt에 다음을 저장합니다

openai
python-dotenv
psycopg2-binary
tabulate

1.4 Qwen-Max API 테스트

제공된 예제 코드를 통해 빠른 테스트를 실행하여 API 키가 작동하는지 확인합니다.

import os
from openai import OpenAI

try:
    client = OpenAI(
        # If the environment variable is not configured, replace the following line with your API key: api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )

    completion = client.chat.completions.create(
        model="qwen-plus",  # Model list: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'user', 'content': 'Who are you?'}
            ]
    )
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"Error message: {e}")
    print("For more information, see: https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code")

2단계: 자동화를 위한 PostgreSQL 설정

2.1. PostgreSQL로 ApsaraDB RDS 인스턴스 생성

관리형 PostgreSQL 인스턴스를 설정하려면 PostgreSQL 용 ApsaraDB를 사용합니다. 자세한 내용은 이 문서를 참조합니다.

또 다른 옵션은 단계별 가이드에 따라 Alibaba Cloud에서 PostgreSQL 17 데이터베이스를 프로비저닝하고 psql을 사용하여 로컬 머신에 연결하는 것입니다.

1단계: ApsaraDB RDS 콘솔에 액세스

4

  1. Alibaba Cloud 콘솔에 로그인합니다.
  2. 이미지와 같이 ApsaraDB RDS > 빠른 시작으로 이동합니다.

2단계: 데이터베이스 설정 구성

위 이미지에 표시된 인터페이스를 사용하여 PostgreSQL 17 인스턴스를 설정합니다.

설정 작업
리전 리전(예: 싱가포르)을 선택합니다.
데이터베이스 엔진 PostgreSQL 선택 후 드롭다운에서 버전 17을 선택합니다.
SLR 인증 보안 강화를 위해 '인증됨'이 선택되어 있는지 확인합니다.
에디션 이중화를 위해 고가용성 에디션을 선택합니다.
제품 유형 대부분의 사용 사례는 표준을 선택합니다.
저장 유형 고성능 I/O를 위해 프리미엄 ESSD를 선택합니다.
네트워크 유형 안전한 격리를 위해 VPC를 선택합니다.
화이트리스트에 추가 를 활성화하여 로컬 IP 또는 VPC에서 연결을 허용합니다.

3단계: 마무리 및 실행

  1. 구성을 검토하고 생성을 클릭합니다.
  2. 인스턴스가 실행 중상태가 될 때까지 기다립니다(일반적으로 5~10분).

4단계: 연결 세부 정보 검색

인스턴스가 활성화되면 다음을 수행합니다.

  1. ApsaraDB RDS 콘솔의 개요 탭으로 이동합니다.
  2. 엔드포인트,포트,사용자 이름,암호를 기록해 둡니다.

5단계: psql로 로컬로 연결

로컬 컴퓨터에 psql을 설치한 다음(아직 설치하지 않은 경우) 다음을 사용하여 연결합니다.

psql -h <ENDPOINT> -U <USERNAME> -d <DATABASE_NAME> -p <PORT>

자리 표시자를 값으로 바꿉니다(예: 기본 데이터베이스의 경우 -d postgres).

성공!

자세한 구성에 대해서는 Alibaba Cloud의 공식 문서를 참조하십시오.

2.2. PostgreSQL 도구 설치

macOS/Linux에서 다음을 실행하십시오.

brew install postgresql  # macOS
sudo apt install postgresql-client  # Ubuntu

2.3. DVD 대여 샘플 데이터베이스 복원

다음과 같이 DVD 대여 샘플 데이터베이스를 다운로드하여 복원합니다.

# Restore the database
pg_restore -U your_user -h your_host -p your_port -d dvdrental dump_file.tar

2.4 psql또는 pgAdmin으로 테스트

샘플 쿼리를 실행하여 모든 것이 작동하는지 확인합니다.

SELECT * FROM film LIMIT 5;

3단계: Text-to-SQL 챗봇 구축

3.1 코드 개요

다음 스크립트는 Qwen-Max를 사용하여 자연어 쿼리를 SQL로 변환하고 PostgreSQL에서 실행합니다.

import os
import psycopg2
from openai import OpenAI
from dotenv import load_dotenv
from tabulate import tabulate

load_dotenv()

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

def generate_sql_query(natural_language_query):
    system_prompt = """
You are a helpful assistant trained to convert natural language queries into SQL statements.
The database schema includes the following tables:
- film_category (category_id, name)
- film (film_id, title, category_id)
- inventory (inventory_id, film_id, store_id)
- rental (rental_id, inventory_id, customer_id, return_date, rental_date)
- payment (payment_id, customer_id, staff_id, rental_id, amount, payment_date)

Generate a valid SQL query that answers the user's question.
"""

    response = client.chat.completions.create(
        model="qwen-max",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": natural_language_query}
        ],
        temperature=0.2
    )

    sql_query = response.choices[0].message.content.strip()

    # Extract SQL between "```sql" and "```"
    start_marker = "```sql"
    end_marker = "```"
    start_idx = sql_query.find(start_marker)
    end_idx = sql_query.find(end_marker, start_idx + len(start_marker))

    if start_idx != -1 and end_idx != -1:
        sql_query = sql_query[start_idx + len(start_marker):end_idx]
    elif start_idx != -1:
        sql_query = sql_query[start_idx + len(start_marker):]
    elif end_idx != -1:
        sql_query = sql_query[:end_idx]

    sql_query = sql_query.strip()

    # Fallback to 'select' keyword
    if not sql_query.lower().startswith("select"):
        select_index = sql_query.lower().find("select")
        if select_index != -1:
            sql_query = sql_query[select_index:]

    return sql_query.strip()

def execute_sql_query(sql_query):
    conn = psycopg2.connect(
        dbname=os.getenv("DB_NAME"),
        user=os.getenv("DB_USER"),
        password=os.getenv("DB_PASSWORD"),
        host=os.getenv("DB_HOST"),
        port=os.getenv("DB_PORT")
    )
    cursor = conn.cursor()
    try:
        cursor.execute(sql_query)
        columns = [desc[0] for desc in cursor.description]
        rows = cursor.fetchall()
        return columns, rows
    except Exception as e:
        print(f"Error executing SQL: {e}")
        return [], []
    finally:
        cursor.close()
        conn.close()

def main():
    user_query = "show the sum of amount by each payment id that is greater then 10"
    print("Generating SQL query...")
    sql_query = generate_sql_query(user_query)
    print("Generated SQL:")
    print(sql_query)

    print("\nExecuting SQL query...")
    columns, rows = execute_sql_query(sql_query)

    if columns and rows:
        print("\nQuery Result:")
        print(tabulate(rows, headers=columns, tablefmt="psql"))
    else:
        print("No results returned.")

if __name__ == "__main__":
    main()

3.2 작동 방식

  • generate_sql_query(): Qwen-Max를 사용하여 자연어를 SQL로 변환합니다.
  • execute_sql_query(): PostgreSQL에 연결하고 생성된 SQL을 실행합니다.
  • main(): 흐름을 조율합니다.

5

결과는 위의 그림과 유사해야 합니다. 또한 이 코드를 추가로 개발 및 수정하여 대시보드를 만들 수 있으며, ChatBI와 통합될 예정입니다. 하지만 QuickBI의 ChatBI만큼 발전된 기능은 아니지만 좋은 시작입니다.

3.3 디버깅 팁

  • Python에서 실행하기 전에 psql 또는 pgAdmin에서 직접 SQL 출력을 테스트합니다.
  • 숨겨진 문자를 디버깅하려면 print(repr(sql_query))를 사용합니다.

이 솔루션으로 비용을 절약할 수 있는 이유

  1. 수작업 감소: 개발자 또는 분석가가 SQL 쿼리를 작성할 필요가 없습니다.
  2. 낮은 API 비용: Qwen-Max는 속도 측면에서 다른 LLM에 비해 더 매력적이며 저렴한 비용으로 유사한 정확도를 제공합니다.
  3. 자동 확장 인프라: Alibaba Cloud의 관리형 서비스가 확장을 처리하여 DevOps 부담을 줄여줍니다.

결론: Text-to-SQL 그 이상

이 챗봇은 시작에 불과합니다. Alibaba Cloud의 Qwen 시리즈를 사용하면 다음과 같이 확장할 수 있습니다.

  • ChatBI: 대화 형 대시 보드를 구축할 수 있습니다.
  • 에이전트 시스템: 함수 호출로 복잡한 워크플로를 자동화할 수 있습니다.
  • 멀티 모달 AI: Qwen-VL로 이미지/비디오 분석을 추가할 수 있습니다.

비용을 절감하고 생산성을 높일 준비가 되셨습니까? 이 Text-to-SQL 챗봇으로 시작하여 AI 기반 자동화의 잠재력을 최대한 발휘하십시오.

다음 단계

  • Alibaba Cloud 환경에서 코드를 사용해보십시오.
  • Qwen의 고급 기능을 살펴보십시오.
  • 의견에 사용 사례를 공유하십시오!


이 문서는 영어에서 번역되었습니다. 원본 문서는 여기를 참조하십시오.

0 0 0
Share on

Regional Content Hub

119 posts | 4 followers

You may also like

Comments