LlamaIndex

LlamaIndex와 FastAPI를 결합한 검색 API 개발

Pro.Dev 2025. 1. 22. 13:10
반응형

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 등)에 배포할 수 있습니다.

참고 자료

반응형