반응형
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 코드 설명
- JSON 데이터 로드:
load_json_data
함수는 JSON 데이터를 읽어와 각 항목을Document
객체로 변환합니다. - 데이터 인덱싱:
GPTSimpleVectorIndex.from_documents
를 사용해 데이터를 인덱싱합니다. - 질의 처리: 사용자가 입력한 질문에 대해 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로 배포하고, 사용자 인터페이스를 제공하는 웹 애플리케이션을 개발할 수 있습니다.
참고 자료
반응형
'LlamaIndex' 카테고리의 다른 글
LlamaIndex를 활용한 웹 크롤러 개발 (0) | 2025.01.22 |
---|---|
LlamaIndex를 이용한 Python 실시간 데이터 처리 (0) | 2025.01.22 |
LlamaIndex와 SQLite를 이용한 데이터베이스 검색 최적화 (0) | 2025.01.22 |
LlamaIndex로 개인 비서 만들기 (0) | 2025.01.22 |
LlamaIndex로 PDF 문서 검색 (0) | 2025.01.22 |