REST API로 Haystack 파이프라인 서빙하기

REST API로 Haystack 파이프라인 서빙하기

만든 RAG 애플리케이션을 REST API로 서빙하는 실제 사례를 살펴볼게요. Haystack 로직은 FastAPI 기반 컨테이너에 담고, Elasticsearch를 벡터 저장소로 함께 띄우는 구조예요. 실제 프로덕션에서 파이프라인을 API로 노출하고 싶을 때 참고할 수 있는 예시예요.

출처: 공식문서

구조

이 저장소는 색인과 질의를 위한 REST API를 가진 단순한 Haystack RAG 애플리케이션이에요. 두 개의 컨테이너로 구성돼요.

  • Elasticsearch 컨테이너: 문서와 임베딩을 저장해요.
  • REST API 컨테이너: FastAPI 기반으로 Haystack 로직을 통합하고, 색인과 질의용 파이프라인을 사용해요. 파이프라인은 YAML 파일로 구성돼요.

시작하기

먼저 Python과 Docker가 설치돼 있어야 해요.

  1. 이 저장소를 클론해요.
  2. OPENAI_API_KEY 환경 변수를 설정해요.
  3. Docker Compose로 Elasticsearch와 REST API를 함께 띄워요.
docker-compose up -d

REST API가 준비됐는지 확인하려면 readiness 엔드포인트를 호출해요. true가 응답으로 오면 준비 완료예요.

curl http://localhost:8000/ready

대화형 API 문서는 http://localhost:8000/docs 에서 볼 수 있어요.

색인 (Indexing)

예제 데이터로 애플리케이션을 채우려면 스크립트를 실행해요.

python ingest_example_data.py

자신의 텍스트 파일을 색인하려면 file-upload 엔드포인트를 써요. multipart/form-data로 파일을 업로드하면 돼요.

curl -X 'POST' \
'http://localhost:8000/file-upload?keep_files=false' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F '[email protected];type=text/plain'

질의 (Querying)

query 엔드포인트에 질문을 던지면 파이프라인이 문서를 검색해 답을 반환해요. 예를 들어 "Who are Torres Strait Islanders?"를 물어보면, 쿼리 문자열은 URL 인코딩해서 넘겨요.

curl -X 'GET' \
  'http://127.0.0.1:8000/query?query=Who%20are%20Torres%20Strait%20Islanders%3F' \
  -H 'accept: application/json'

응답에는 모델이 생성한 data(답), 사용한 model, 토큰 사용량 같은 메타데이터가 담겨요. 이런 형태예요.

{
  "answer_builder": {
    "answers": [
      {
        "data": "Torres Strait Islanders are ethnically Melanesian people who obtained their livelihood from seasonal horticulture and the resources of their reefs and seas.",
        "query": "Who are Torres Strait Islanders?",
        "metadata": {
          "model": "gpt-3.5-turbo-0613",
          "index": 0,
          "finish_reason": "stop",
          "usage": {
            "prompt_tokens": 727,
            "completion_tokens": 29,
            "total_tokens": 756
          }
        },
        "documents": ["..."]
        }
    ]
  }
}

참고사항

이 저장소는 REST API 뒤에서 Haystack 파이프라인을 서빙하는 방법을 보여주던 초기 예시예요. 이후 deepset은 이런 기능을 Hayhooks로 재구성했어요. Hayhooks는 파이프라인 서빙을 명시적이고 포괄적으로 지원하므로, 새 프로젝트에서는 Hayhooks를 검토해 보는 걸 권장해요.

더 알아보기