LlamaIndex

LlamaIndex를 사용한 JSON 데이터 인덱싱

Pro.Dev 2025. 1. 22. 11:30
반응형

Python에서 LlamaIndex를 사용한 JSON 데이터 인덱싱

JSON 형식의 데이터는 현대 애플리케이션에서 자주 사용됩니다. 이를 효율적으로 처리하고 검색 가능한 형태로 변환하면 데이터 활용도가 크게 향상됩니다. 이 글에서는 LlamaIndex를 활용하여 JSON 데이터를 인덱싱하고 검색 시스템을 구축하는 방법을 안내합니다.


1. 프로젝트 개요

목표

  • JSON 데이터를 읽어와 LlamaIndex로 인덱싱합니다.
  • 사용자가 자연어로 질의(Query)를 입력하면 관련 정보를 검색합니다.

주요 기능

  • JSON 데이터 파싱 및 구조화
  • LlamaIndex를 이용한 인덱싱 및 자연어 검색
  • 확장 가능한 데이터 처리 및 검색 기능

2. 개발 환경 준비

2.1 필수 라이브러리 설치

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

pip install llama-index openai

참고: OpenAI API 사용을 위해 API 키가 필요합니다.

2.2 기본 설정

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


3. JSON 데이터 인덱싱 시스템 구현

3.1 JSON 데이터 준비

JSON 형식의 데이터를 준비합니다. 아래는 샘플 데이터 data.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"
    }
]

3.2 Python 코드 작성

아래 코드는 JSON 데이터를 인덱싱하고 검색하는 과정을 보여줍니다:

import os
import json
from llama_index import GPTSimpleVectorIndex, Document

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

# 1. JSON 데이터 로드
def load_json_data(file_path):
    with open(file_path, "r", encoding="utf-8") as file:
        data = json.load(file)
    documents = []
    for item in data:
        content = f"ID: {item['id']}\nName: {item['name']}\nRole: {item['role']}\nDepartment: {item['department']}"
        documents.append(Document(content))
    return documents

# 2. 데이터 인덱싱
print("JSON 데이터를 인덱싱합니다...")
file_path = "data.json"
documents = load_json_data(file_path)
index = GPTSimpleVectorIndex.from_documents(documents)
print("인덱싱 완료!")

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

3.3 코드 설명

  1. JSON 데이터 로드: load_json_data 함수는 JSON 데이터를 읽어와 각 항목을 Document 객체로 변환합니다.
  2. 데이터 인덱싱: GPTSimpleVectorIndex.from_documents를 사용해 데이터를 인덱싱합니다.
  3. 질의 처리: 사용자가 입력한 질문에 대해 LlamaIndex를 통해 검색된 결과를 반환합니다.

4. 실행 결과

입력 데이터

data.json:
| ID | Name | Role | Department |
| ---- | -------- | ------------------ | ----------------- |
| 1 | Alice | Software Engineer | Engineering |
| 2 | Bob | HR Manager | Human Resources |
| 3 | Charlie | Data Scientist | Engineering |

실행 예시

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

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

5. 확장 가능성

5.1 대규모 JSON 데이터 처리

  • JSON 파일이 매우 클 경우, 데이터를 여러 개의 작은 청크로 나누어 처리하거나 스트리밍 방식으로 읽어오는 방법을 고려할 수 있습니다.

5.2 고급 검색 기능

  • 키워드 필터링, 정규식 검색, 또는 여러 조건을 조합한 고급 검색 기능을 추가할 수 있습니다.

5.3 웹 애플리케이션 통합

  • Flask 또는 FastAPI를 사용하여 RESTful API로 배포하고, 사용자 인터페이스를 제공하는 웹 애플리케이션을 개발할 수 있습니다.

참고 자료

반응형