언어모델 LLM/렝체인 Langchain

Langchain과 Flask로 만드는 영화 검색 프로그램

General AI 2024. 7. 9. 23:10
728x90
반응형

Langchain과 Flask로 만드는 영화 검색 프로그램

이번 포스팅에서는 Langchain과 Flask를 사용하여 영화 데이터베이스를 자연어로 검색할 수 있는 프로그램을 만드는 방법에 대해 알아보겠습니다. 이 프로그램을 통해 사용자는 웹 UI에서 자연어로 질문하고 영화 정보에 대한 응답을 쉽게 얻을 수 있습니다.

Langchain과 Flask로 만드는 영화 검색 프로그램

1. 프로젝트 개요

이 프로젝트의 목표는 다음과 같습니다:

  • Langchain을 사용하여 자연어 질문을 SQL 쿼리로 변환
  • SQLite 데이터베이스에서 영화 정보 검색
  • Flask를 통해 사용자 친화적인 웹 인터페이스 제공

2. 데이터 준비

먼저, Kaggle에서 "Full TMDB Movies Dataset 2024"를 다운로드하여 SQLite 데이터베이스로 변환해보겠습니다.

  1. Kaggle에서 데이터셋 다운로드 (다운로드링크)
  2. CSV 파일을 SQLite 데이터베이스로 변환
import sqlite3
import pandas as pd

# CSV 파일 읽기
df = pd.read_csv('tmdb_movies_2024.csv')

# SQLite 데이터베이스 연결
conn = sqlite3.connect('movies.db')

# DataFrame을 SQLite 테이블로 저장
df.to_sql('movies', conn, if_exists='replace', index=False)

conn.close()

3. 프로그램 만들기

이제 프로그램의 주요 부분을 구현해 봅시다.

3.1 필요한 라이브러리 설치

pip 명령어로 필용한 라이브러리를 설치합니다.

pip install langchain openai sqlite3 flask

3.2 Langchain 에이전트 설정

from langchain import OpenAI, SQLDatabase, SQLDatabaseChain

# OpenAI API 키 설정
import os
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

# 데이터베이스 연결
db = SQLDatabase.from_uri("sqlite:///movies.db")

# Langchain 에이전트 설정
llm = OpenAI(temperature=0)
db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)

3.3 Flask 애플리케이션 구성

from flask import Flask, request, render_template_string

app = Flask(__name__)

HTML_TEMPLATE = '''
<!DOCTYPE html>
<html>
<head>
    <title>영화 검색 프로그램</title>
</head>
<body>
    <h1>영화 데이터베이스 검색</h1>
    <form method="POST">
        <textarea name="question" rows="3" cols="50" placeholder="영화에 대해 질문해주세요..."></textarea>
        <br>
        <input type="submit" value="검색">
    </form>
    {% if result %}
    <h2>결과:</h2>
    <p>{{ result }}</p>
    {% endif %}
</body>
</html>
'''

@app.route('/', methods=['GET', 'POST'])
def home():
    result = None
    if request.method == 'POST':
        question = request.form['question']
        try:
            result = db_chain.run(question)
        except Exception as e:
            result = f"오류가 발생했습니다: {str(e)}"
    return render_template_string(HTML_TEMPLATE, result=result)

if __name__ == '__main__':
    app.run(debug=True)

4. 프로그램 실행

모든 코드를 합쳐 실행하면, 로컬 서버가 시작되고 웹 브라우저에서 접속할 수 있습니다. 사용자는 이 웹 인터페이스를 통해 영화 데이터베이스에 대해 자연어로 질문할 수 있습니다. 예를 들어, 다음과 같은 질문을 할 수 있습니다:

  • "2023년에 개봉한 가장 인기 있는 영화는 무엇인가요?"
  • "크리스토퍼 놀란 감독의 영화 중 평점이 가장 높은 작품은?"
  • "한국 영화 중 해외 수익이 가장 높은 작품은 무엇인가요?"

 

이렇게 Langchain과 Flask를 활용하여 자연어로 영화 데이터베이스를 검색할 수 있는 프로그램을 만들어 보았습니다. 이 프로그램은 사용자가 복잡한 SQL 쿼리를 알 필요 없이 간단한 질문으로 원하는 정보를 얻을 수 있게 해줍니다. Flask를 사용함으로써 더 많은 커스터마이징이 가능해졌습니다. 예를 들어, 결과를 보기 좋게 포맷팅하거나, 에러 처리를 더 섬세하게 할 수 있습니다. 또한, Flask의 확장성을 활용하여 더 복잡한 기능(예: 사용자 인증, 데이터베이스 관리 등)을 추가할 수도 있습니다.

728x90
반응형