소소한 컴퓨터 이야기

LangChain을 이용해 MySQL과 소통해보자 !

by Cori

해외블로그 Medium에 게시된 Talk to your Database using RAG and LLMs 포스트의 내용을 실습한다.


※ 진행에 앞서, 다음 2가지 사항을 미리 준비해두면 좋다.

1. 실습에 사용할 데이터 (MySQL 데이터베이스에 업로드)

이번 포스트에서 사용할 데이터

2. OpenAI API Key  - OpenAI 공식 홈페이지에서 발급


0. MySQL 관련 설정 

LLM 모델이 접근할 MySQL 데이터베이스 관련 파라미터를 정의해준다. 

host = 'ipv4 주소'
port = '3306'
username = 'DB 사용자 이름'
password = 'DB 사용자 비밀번호'
database_schema = '데이터베이스 이름'

접근한 파라미터를 사용해 mysql uri 값을 얻을 수 있다. 

mysql_uri = f"mysql+pymysql://{username}:{password}@{host}:{port}/{database_schema}"

1. Langchain <-> MySQL DB 연동 

1) Langchain <-> MySQL DB 연동 

langchain은 SQL Database에 접근할 수 있는 라이브러리를 제공한다. 앞서 얻은 mysql uri를 활용해 MySQL DB에 접근하자. 

from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain

db = SQLDatabase.from_uri(mysql_uri, sample_rows_in_table_info=2)
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

2) LLM 모델 설정 

DB에 접근하여 값을 해석할 언어 모델을 생성해주는 과정으로, 여기서는 ChatGPT를 사용했다. 

OPENAI_API_KEY = "본인의 OPENAI API Key"
llm = ChatOpenAI(temperature=0, openai_api_key=OPENAI_API_KEY)

3) 쿼리 던지기 

생성한 DB Chain을 활용하여 사용자 쿼리를 DB에 던져주는 함수를 짜보면 다음과 같다.

상품유형이 체크카드인 상품명을 알려달라고 해보자. 

2. AG (Augmented Generation) 

1) Augment 

값을 추출했는데, 이걸 보다 자연스럽게 반환하도록 Prompt Template을 구성할 수 있다. 

2) Generation 

정의한 Prompt Template을 활용하여 앞서 질문했던 내용을 다시 던져보면 다음과 같이 보다 자연스러운 대화 문장으로 대답을 한다. 

블로그의 정보

코딩하는 오리

Cori

활동하기