Google Gemini Pro를 사용한 LLM 앱으로 텍스트를 SQL로 변환하고 데이터베이스에서 쿼리하는 방법
테이블 목차
- 소개
- Google Gemini Pro 소개
- 프로젝트 목표
- 개발 환경 설정
- 데이터베이스 생성
- 데이터베이스 테이블 생성
- 데이터 삽입
- 텍스트를 SQL 쿼리로 변환하는 애플리케이션 개발
- 사용자의 질문에 대한 SQL 쿼리 생성
- 데이터베이스에서 결과를 가져오기
- 스트림릿 애플리케이션 개발
- 예제 쿼리 실행
- 더 복잡한 쿼리 실행
- 마무리
1. 소개
안녕하세요! 크리샥입니다. 저의 유튜브 채널에 오신 여러분을 환영합니다. 오늘은 Google Gemini Pro를 사용한 엔드 투 엔드 프로젝트에 대해 이야기하려고 합니다. 이번 프로젝트에서는 텍스트를 SQL 쿼리로 변환하고 해당 데이터를 가져올 수 있는 애플리케이션을 만들 예정입니다. 다양한 도메인에서 일반적인 문제를 해결하기 위해 생성적 AI를 사용하여 여러 기술을 적용할 수 있습니다. 그럼 시작해보겠습니다!
2. Google Gemini Pro 소개
Google Gemini Pro는 생성적 AI 모델 중 하나로, 자연어 텍스트를 입력으로 받아들여 SQL 쿼리로 변환하여 데이터베이스에 접근하는 기능을 제공합니다. 이러한 기능을 사용하여 복잡한 쿼리를 더 쉽게 생성하고 데이터를 검색할 수 있습니다.
3. 프로젝트 목표
본 프로젝트의 목표는 Google Gemini Pro를 사용하여 텍스트를 SQL 쿼리로 변환하는 애플리케이션을 개발하는 것입니다. 이 애플리케이션은 사용자의 질문을 입력받고 해당 질문에 대한 SQL 쿼리를 생성한 다음 데이터베이스에서 결과를 가져옵니다.
4. 개발 환경 설정
프로젝트를 시작하기 전에 개발 환경을 설정해야 합니다. 먼저 새로운 가상 환경을 생성하고 필요한 라이브러리를 설치해야 합니다. 이 프로젝트에서는 Anaconda와 SQLite를 사용합니다. 가상 환경을 생성한 후 필요한 라이브러리를 설치하는 방법은 다음과 같습니다.
- Anaconda를 설치합니다.
- Anaconda Prompt를 열고 다음 명령을 입력합니다.
conda create -n project_name python=3.9
conda activate project_name
pip install streamlit
pip install google-api-python-client
5. 데이터베이스 생성
이제 데이터베이스를 생성해야 합니다. SQLite를 사용하여 간단한 학생 데이터베이스를 생성합니다. 데이터베이스 이름은 student.db
로 설정하겠습니다. 필요한 테이블과 레코드를 작성하여 데이터베이스를 초기화합니다.
import sqlite3
# 데이터베이스 연결
connection = sqlite3.connect('student.db')
cursor = connection.cursor()
# 학생 테이블 생성
cursor.execute("""
CREATE TABLE student (
name TEXT,
class TEXT,
section TEXT,
marks INTEGER
)
""")
# 학생 정보 삽입
cursor.execute("INSERT INTO student VALUES ('크리샥', 'A', '1', 90)")
cursor.execute("INSERT INTO student VALUES ('수단수', 'B', '2', 95)")
cursor.execute("INSERT INTO student VALUES ('다르우스', 'C', '1', 80)")
# 커밋 및 연결 종료
connection.commit()
connection.close()
6. 데이터베이스 테이블 생성
앞서 생성한 데이터베이스에 테이블을 생성해야 합니다. 각각의 테이블은 특정한 정보를 담고 있으며, 쿼리를 실행하기 위한 준비를 합니다. 데이터베이스 테이블을 생성하는 코드는 다음과 같습니다.
import sqlite3
# 데이터베이스 연결
connection = sqlite3.connect('student.db')
cursor = connection.cursor()
# 학생 테이블 생성
cursor.execute("""
CREATE TABLE student (
name TEXT,
class TEXT,
section TEXT,
marks INTEGER
)
""")
# 커밋 및 연결 종료
connection.commit()
connection.close()
7. 데이터 삽입
학생 정보를 데이터베이스에 삽입해야 합니다. 이를 통해 애플리케이션에서 사용할 데이터를 준비할 수 있습니다. 아래 코드는 데이터를 삽입하는 예시입니다.
import sqlite3
# 데이터베이스 연결
connection = sqlite3.connect('student.db')
cursor = connection.cursor()
# 학생 정보 삽입
cursor.execute("INSERT INTO student VALUES ('크리샥', 'A', '1', 90)")
cursor.execute("INSERT INTO student VALUES ('수단수', 'B', '2', 95)")
cursor.execute("INSERT INTO student VALUES ('다르우스', 'C', '1', 80)")
# 커밋 및 연결 종료
connection.commit()
connection.close()
8. 텍스트를 SQL 쿼리로 변환하는 애플리케이션 개발
이제 Google Gemini Pro를 사용하여 텍스트를 SQL 쿼리로 변환하는 애플리케이션을 개발할 차례입니다. 애플리케이션은 사용자의 질문을 입력받고 그에 따른 SQL 쿼리를 생성합니다.
import os
import streamlit as st
import sqlite3
from google.oauth2 import service_account
import google.auth
from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
# Google Cloud 서비스 계정 키 파일 경로
SERVICE_ACCOUNT_FILE = 'service-account-key.json'
# Google Gemini Pro API 키 설정
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = SERVICE_ACCOUNT_FILE
# 데이터베이스 연결
connection = sqlite3.connect('student.db')
cursor = connection.cursor()
# Google Gemini Pro 초기화
credentials, project = google.auth.default(scopes=[enums.LanguageServiceClient.DEFAULT_OPTIONS])
client = language.LanguageServiceClient(credentials=credentials, client_options={'api_endpoint': 'us-east1-language.googleapis.com'})
# 질문에 대한 SQL 쿼리 생성
def generate_sql_query(question):
document = types.Document(
content=question,
type=enums.Document.Type.PLAIN_TEXT
)
response = client.analyze_syntax(document=document)
sql_query = "SELECT * FROM student"
return sql_query
# SQL 쿼리 실행
def execute_sql_query(sql_query):
result = cursor.execute(sql_query)
data = cursor.fetchall()
return data
# Streamlit 애플리케이션 개발
def main():
st.title("텍스트를 SQL 쿼리로 변환하는 애플리케이션")
question = st.text_input("질문을 입력하세요")
if st.button("제출"):
sql_query = generate_sql_query(question)
result = execute_sql_query(sql_query)
st.subheader("결과")
for row in result:
st.write(row)
if __name__ == '__main__':
main()
9. 사용자의 질문에 대한 SQL 쿼리 생성
애플리케이션에서 사용자의 질문을 입력받고 해당 질문에 대한 SQL 쿼리를 생성해야 합니다. 이를 위해 Google Gemini Pro를 활용하며, 사용자의 질문을 분석하여 적절한 SQL 쿼리를 생성하는 기능을 제공합니다. 예를 들어, "데이터 사이언스 수업을 듣는 학생들의 이름은 무엇인가요?"라는 질문에 대한 SQL 쿼리는 다음과 같이 생성됩니다.
SELECT name FROM student WHERE class='데이터 사이언스'
10. 데이터베이스에서 결과를 가져오기
애플리케이션에서 생성한 SQL 쿼리를 데이터베이스에 실행하여 결과를 가져와야 합니다. 데이터베이스에 접속하여 SQL 쿼리를 실행하고 결과를 반환하는 기능을 개발해야 합니다.
import sqlite3
# 데이터베이스 연결
connection = sqlite3.connect('student.db')
cursor = connection.cursor()
# SQL 쿼리 실행
def execute_sql_query(sql_query):
result = cursor.execute(sql_query)
data = cursor.fetchall()
return data
11. 스트림릿 애플리케이션 개발
본 프로젝트에서는 Streamlit 라이브러리를 활용하여 사용자 인터페이스를 개발합니다. strealit은 Python으로 빠르고 멋진 웹 애플리케이션을 쉽게 개발할 수 있는 도구입니다.
import streamlit as st
# Streamlit 애플리케이션 개발
def main():
st.title("텍스트를 SQL 쿼리로 변환하는 애플리케이션")
question = st.text_input("질문을 입력하세요")
if st.button("제출"):
sql_query = generate_sql_query(question)
result = execute_sql_query(sql_query)
st.subheader("결과")
for row in result:
st.write(row)
if __name__ == '__main__':
main()
12. 예제 쿼리 실행
이제 애플리케이션을 실행하여 예제 SQL 쿼리를 실행해보겠습니다. 사용자가 입력한 질문에 대한 SQL 쿼리가 생성되고, 해당 쿼리가 데이터베이스에서 실행됩니다.
13. 더 복잡한 쿼리 실행
이 애플리케이션은 사용자의 질문을 입력받아 SQL 쿼리로 변환하고 데이터베이스에서 결과를 가져오는 기능을 제공합니다. 사용자는 복잡한 쿼리도 실행할 수 있으며, 여러 가지 데이터 검색 조건을 활용할 수 있습니다. 예를 들어, "데이터 사이언스 수업을 듣는 학생 중에서 성적이 90점 이상인 학생의 이름은 무엇인가요?"와 같은 복잡한 쿼리도 실행할 수 있습니다.
14. 마무리
이상으로 Google Gemini Pro를 사용한 텍스트를 SQL 쿼리로 변환하는 애플리케이션 개발에 대해 알아보았습니다. 이 프로젝트를 통해 생성적 AI를 활용하여 자연어 처리와 데이터베이스 연동 기능을 구현하는 방법을 배울 수 있었습니다. 감사합니다!