본문 바로가기

LlamaIndex

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

반응형

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로 배포하고, 사용자 인터페이스를 제공하는 웹 애플리케이션을 개발할 수 있습니다.

참고 자료

반응형