반응형
LlamaIndex와 FastAPI를 결합한 검색 API 개발
FastAPI는 Python으로 RESTful API를 빠르고 간단하게 개발할 수 있는 강력한 프레임워크입니다. 이를 LlamaIndex와 결합하면 데이터 인덱싱 및 자연어 검색 기능을 제공하는 검색 API를 쉽게 구축할 수 있습니다. 이 글에서는 LlamaIndex와 FastAPI를 활용하여 검색 API를 만드는 과정을 단계별로 안내합니다.
1. 프로젝트 개요
목표
- FastAPI로 RESTful 검색 API를 개발합니다.
- LlamaIndex를 활용해 데이터 인덱싱 및 검색 기능을 구현합니다.
주요 기능
- 데이터 로드 및 인덱싱
- 자연어 기반 검색 API 엔드포인트 제공
- JSON 응답 형식으로 검색 결과 반환
2. 개발 환경 준비
2.1 필수 라이브러리 설치
아래 명령어를 실행해 필요한 라이브러리를 설치합니다:
pip install fastapi uvicorn llama-index openai
참고: OpenAI API를 사용하려면 API 키가 필요합니다.
2.2 기본 설정
Python 3.8 이상의 환경에서 개발하는 것을 권장합니다. 가상 환경(venv, Conda)을 사용하면 의존성 관리를 간편하게 할 수 있습니다.
3. FastAPI와 LlamaIndex 결합 구현
3.1 데이터 준비 및 LlamaIndex 설정
간단한 JSON 데이터를 준비하고 이를 LlamaIndex에 인덱싱합니다.
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 FastAPI 서버 및 엔드포인트 구현
아래 코드는 FastAPI 서버와 LlamaIndex를 결합하여 검색 API를 생성하는 방법을 보여줍니다.
import os
import json
from fastapi import FastAPI, HTTPException
from llama_index import GPTSimpleVectorIndex, Document
# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
# FastAPI 앱 생성
app = FastAPI()
# 데이터 로드 및 인덱스 생성
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]
return GPTSimpleVectorIndex.from_documents(documents)
# 데이터 로드 및 인덱싱
index = load_data_and_create_index("data.json")
@app.get("/search")
def search(query: str):
if not query:
raise HTTPException(status_code=400, detail="Query parameter is required")
response = index.query(query)
return {"query": query, "response": response}
3.3 서버 실행
FastAPI 서버를 실행하려면 아래 명령어를 실행합니다:
uvicorn main:app --reload
main은 Python 파일 이름입니다. 파일명이
app.py
라면main
대신app
을 사용하세요.
4. 실행 결과
API 엔드포인트 테스트
FastAPI 서버가 실행되면 http://127.0.0.1:8000/docs
에 접속하여 Swagger UI를 통해 API를 테스트할 수 있습니다.
엔드포인트 예시
- GET /search: 검색 API
- 쿼리 매개변수:
query
- 쿼리 매개변수:
요청 예시
GET /search?query=Engineering 부서의 직원은 누구인가요?
응답 예시
{
"query": "Engineering 부서의 직원은 누구인가요?",
"response": "Engineering 부서에는 Alice (Software Engineer), Charlie (Data Scientist)가 있습니다."
}
5. 확장 가능성
5.1 데이터 소스 확장
- JSON 외에도 데이터베이스, CSV 파일, 또는 외부 API에서 데이터를 가져와 인덱싱할 수 있습니다.
5.2 고급 검색 기능 추가
- 키워드 기반 검색, 필터링, 정렬 등의 고급 기능을 추가하여 검색 시스템을 강화할 수 있습니다.
5.3 사용자 인증
- API 보안을 강화하기 위해 JWT 또는 OAuth를 사용하여 인증 및 권한 관리를 구현할 수 있습니다.
5.4 배포
- Docker를 사용하여 FastAPI 애플리케이션을 컨테이너화하고 클라우드 환경(AWS, GCP 등)에 배포할 수 있습니다.
참고 자료
반응형
'LlamaIndex' 카테고리의 다른 글
LlamaIndex와 PyTorch를 활용한 텍스트 분류 모델 (1) | 2025.01.22 |
---|---|
LlamaIndex와 Pandas를 이용한 데이터 분석 및 검색 (0) | 2025.01.22 |
LlamaIndex를 활용한 웹 크롤러 개발 (0) | 2025.01.22 |
LlamaIndex를 이용한 Python 실시간 데이터 처리 (0) | 2025.01.22 |
LlamaIndex를 사용한 JSON 데이터 인덱싱 (0) | 2025.01.22 |