LlamaIndex

LlamaIndex와 Streamlit을 활용한 데이터 검색 웹 애플리케이션

Pro.Dev 2025. 1. 22. 14:57
반응형

LlamaIndex와 Streamlit을 활용한 데이터 검색 웹 애플리케이션

Streamlit은 빠르고 간단하게 웹 애플리케이션을 구축할 수 있는 Python 프레임워크입니다. 이를 LlamaIndex와 결합하면 사용자가 데이터를 검색할 수 있는 직관적인 웹 인터페이스를 만들 수 있습니다. 이번 글에서는 Streamlit으로 사용자 인터페이스를 구축하고 LlamaIndex로 검색 기능을 구현하는 과정을 단계별로 설명합니다.


1. 프로젝트 개요

목표

  • Streamlit으로 웹 기반 사용자 인터페이스(UI)를 구축합니다.
  • LlamaIndex를 활용해 데이터 검색 기능을 추가합니다.

주요 기능

  • JSON 데이터를 LlamaIndex로 인덱싱
  • 자연어 검색 기능 제공
  • Streamlit을 통해 실시간으로 검색 결과를 시각화

2. 개발 환경 준비

2.1 필수 라이브러리 설치

아래 명령어를 실행하여 필요한 라이브러리를 설치합니다:

pip install streamlit llama-index openai

참고: OpenAI API를 사용하려면 API 키가 필요합니다.

2.2 기본 설정

Python 3.8 이상의 환경에서 개발을 권장하며, 가상 환경(venv, Conda)을 사용하면 의존성 관리를 간편하게 할 수 있습니다.


3. 데이터 검색 웹 애플리케이션 구현

3.1 샘플 데이터 준비

아래와 같은 JSON 데이터를 사용합니다:

data.json:

[
    {"id": 1, "name": "Alice", "role": "Software Engineer", "department": "Engineering"},
    {"id": 2, "name": "Bob", "role": "HR Manager", "department": "Human Resources"},
    {"id": 3, "name": "Charlie", "role": "Data Scientist", "department": "Engineering"},
    {"id": 4, "name": "Diana", "role": "Accountant", "department": "Finance"}
]

3.2 Streamlit과 LlamaIndex 통합 코드

아래 코드는 Streamlit으로 검색 인터페이스를 구축하고 LlamaIndex를 통해 검색 결과를 표시하는 방법을 보여줍니다.

import os
import json
import streamlit as st
from llama_index import GPTSimpleVectorIndex, Document

# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# 데이터 로드 및 인덱스 생성
def load_data_and_create_index(file_path):
    with open(file_path, "r", encoding="utf-8") as file:
        data = json.load(file)
    documents = [Document(f"Name: {item['name']}\nRole: {item['role']}\nDepartment: {item['department']}") for item in data]
    index = GPTSimpleVectorIndex.from_documents(documents)
    return index

# 데이터 로드 및 인덱스 생성
index = load_data_and_create_index("data.json")

# Streamlit UI 설정
st.title("LlamaIndex 기반 데이터 검색")
st.write("JSON 데이터를 검색할 수 있는 웹 애플리케이션입니다.")

# 사용자 입력 받기
query = st.text_input("질문을 입력하세요:")

# 검색 결과 처리
if query:
    response = index.query(query)
    st.subheader("검색 결과")
    st.write(response)

3.3 Streamlit 실행

Streamlit 앱을 실행하려면 아래 명령어를 터미널에서 실행합니다:

streamlit run app.py

app.py는 위 코드를 저장한 파일 이름입니다. 파일명이 다를 경우 해당 파일 이름으로 명령어를 수정하세요.


4. 실행 결과

웹 애플리케이션 인터페이스

  1. 질문 입력: 사용자가 자연어로 질문을 입력합니다.
  2. 검색 결과 표시: LlamaIndex가 반환한 검색 결과가 화면에 표시됩니다.

예시

질문:

Engineering 부서의 직원은 누구인가요?

검색 결과:

Engineering 부서에는 Alice (Software Engineer), Charlie (Data Scientist)가 있습니다.

5. 확장 가능성

5.1 데이터 소스 확장

  • JSON 파일 외에도 데이터베이스, CSV, 또는 실시간 API에서 데이터를 가져와 인덱싱할 수 있습니다.

5.2 고급 UI 기능 추가

  • 검색 결과 하이라이트 기능
  • 필터링 및 정렬 옵션 추가
  • 데이터 시각화를 통한 직관적인 검색 결과 제공

5.3 배포

  • Streamlit Cloud, Heroku, AWS 등 클라우드 플랫폼에 배포하여 웹 애플리케이션을 공개할 수 있습니다.

참고 자료

반응형