LlamaIndex

LlamaIndex와 OpenAI API 연동

Pro.Dev 2025. 1. 22. 17:16
반응형

LlamaIndex와 OpenAI API 연동 실습

OpenAI API와 LlamaIndex를 연동하면 자연어 기반의 질문 응답 시스템을 간단히 구현할 수 있습니다. 이번 글에서는 OpenAI의 GPT 모델과 LlamaIndex를 활용하여 데이터 인덱싱 및 검색 기능을 제공하는 질문 응답 시스템을 만드는 과정을 설명합니다.


1. 프로젝트 개요

목표

  • OpenAI API와 LlamaIndex를 연동하여 질문 응답 시스템을 구현합니다.
  • JSON 데이터를 인덱싱하고, 자연어로 질의에 대한 답변을 제공합니다.

주요 기능

  • LlamaIndex로 데이터 인덱싱
  • OpenAI API를 활용한 자연어 처리
  • 질문에 대한 적절한 응답 생성

2. 개발 환경 준비

2.1 필수 라이브러리 설치

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

pip install llama-index openai

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

2.2 기본 설정

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


3. 질문 응답 시스템 구현

3.1 데이터 준비

아래와 같은 샘플 데이터를 준비합니다:

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 LlamaIndex로 데이터 인덱싱

LlamaIndex를 활용하여 데이터를 인덱싱합니다.

import os
import json
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")
print("데이터 인덱싱 완료!")

3.3 질문 응답 기능 구현

사용자가 입력한 질문에 대해 응답을 생성합니다.

# 질문 응답 처리
while True:
    query = input("질문을 입력하세요 (종료하려면 'exit' 입력): ")
    if query.lower() == "exit":
        print("프로그램을 종료합니다.")
        break
    response = index.query(query)
    print(f"답변: {response}")

4. 실행 결과

데이터 예시

ID Name Role Department
1 Alice Software Engineer Engineering
2 Bob HR Manager Human Resources
3 Charlie Data Scientist Engineering
4 Diana Accountant Finance

실행 예시

질문을 입력하세요 (종료하려면 'exit' 입력): Engineering 부서의 직원은 누구인가요?
답변: Engineering 부서에는 Alice (Software Engineer), Charlie (Data Scientist)가 있습니다.

질문을 입력하세요 (종료하려면 'exit' 입력): exit
프로그램을 종료합니다.

5. 확장 가능성

5.1 데이터 소스 확장

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

5.2 고급 검색 기능

  • 키워드 기반 필터링, 특정 열에 집중한 검색, 또는 조건부 검색 기능을 추가할 수 있습니다.

5.3 웹 애플리케이션 통합

  • Flask 또는 FastAPI를 사용하여 RESTful API로 배포하고, 웹 애플리케이션에서 질문 응답 기능을 제공합니다.

5.4 사용자 경험 향상

  • 결과를 요약하거나 강조 표시하여 사용자 친화적인 검색 경험을 제공합니다.

참고 자료

반응형