AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

RAG 앱 구축을 설정 파일 하나로, NyRAG의 5단계 파이프라인

RAG(Retrieval-Augmented Generation) 애플리케이션을 만들려면 벡터 데이터베이스 설정부터 임베딩 파이프라인 구성, 인프라 오케스트레이션까지 복잡한 과정을 거쳐야 합니다. 개발자 입장에서는 수주가 걸리는 일이죠. 하지만 이 모든 과정을 YAML 설정 파일 하나로 해결할 수 있다면 어떨까요?

사진 출처: NyRAG GitHub

Abhishek Thakur가 공개한 NyRAG는 코드 없이 RAG 애플리케이션을 구축할 수 있는 오픈소스 프레임워크입니다. 웹 크롤링이나 문서 처리부터 Vespa 기반 하이브리드 검색, 챗봇 UI까지 전체 파이프라인을 자동화했습니다.

출처: NyRAG GitHub Repository – Abhishek Thakur

5단계 멀티쿼리 검색 파이프라인

NyRAG의 핵심은 정교한 검색 파이프라인입니다. 사용자가 질문을 하면 다음 과정을 거칩니다.

1단계: 쿼리 확장(Query Enhancement)
LLM이 사용자 질문을 분석해 추가 검색 쿼리를 자동 생성합니다. 예를 들어 “API 인증 방법은?”이라는 질문에서 “OAuth 설정”, “토큰 발급 과정” 같은 관련 쿼리를 만들어냅니다. 검색 커버리지를 넓히는 전략이죠.

2단계: 임베딩 생성
각 쿼리를 설정된 SentenceTransformer 모델로 벡터 임베딩으로 변환합니다. 기본 모델은 sentence-transformers/all-MiniLM-L6-v2(384차원)이지만, 설정으로 sentence-transformers/all-mpnet-base-v2 같은 다른 모델로 교체할 수 있습니다.

3단계: Vespa 검색
Vespa의 nearestNeighbor 검색과 best_chunk_score 랭킹 프로파일을 사용해 가장 관련성 높은 문서 청크를 찾습니다. Vespa는 하이브리드 검색 엔진으로 벡터 검색과 키워드 검색을 동시에 처리합니다.

4단계: 청크 융합(Chunk Fusion)
여러 쿼리에서 나온 결과를 통합하고, 중복을 제거한 뒤 점수 기준으로 재랭킹합니다. 상위 k개 청크만 선별하는 과정이죠.

5단계: 답변 생성
선별된 청크만을 컨텍스트로 LLM에 전달해 근거 있는 답변을 생성합니다. 할루시네이션을 줄이는 핵심 단계입니다.

이 멀티쿼리 RAG 방식은 단일 쿼리 검색보다 훨씬 포괄적인 답변을 만들어냅니다. 청크 단위 검색으로 긴 문서에서도 정확한 부분만 추출할 수 있고요.

설정 파일로 끝나는 배포 프로세스

NyRAG의 진짜 강점은 설정 기반 워크플로우입니다. 웹 크롤링 예시를 볼까요?

name: company_docs
mode: web
start_loc: https://docs.company.com/
exclude:
  - https://docs.company.com/legacy/*

crawl_params:
  respect_robots_txt: true
  follow_subdomains: true
  user_agent_type: chrome

rag_params:
  embedding_model: sentence-transformers/all-MiniLM-L6-v2
  chunk_size: 1024
  chunk_overlap: 50

이 YAML 파일 하나면 끝입니다. 환경 변수를 설정하고 nyrag process --config config.yml 명령을 실행하면 크롤링, 텍스트 추출, 청킹, 임베딩, 인덱싱이 자동으로 진행됩니다. 문서 처리 모드도 비슷합니다. mode: docs로 바꾸고 start_loc에 로컬 경로를 지정하면 PDF, DOCX, TXT, Markdown 파일을 재귀적으로 처리합니다.

크롤링 파라미터도 세밀하게 조정할 수 있습니다. aggressive_crawltrue로 설정하면 동시 요청을 늘려 속도를 높이고, strict_mode는 시작 URL 패턴과 정확히 일치하는 페이지만 크롤링합니다. allowed_domains로 특정 도메인만 허용하거나 file_extensions로 특정 파일 형식만 처리하는 것도 가능합니다.

로컬 개발과 클라우드 배포의 유연성

NyRAG는 배포 모드를 환경 변수로 제어합니다. NYRAG_LOCAL=1로 설정하면 로컬 Docker에서 Vespa를 실행하고, NYRAG_LOCAL=0으로 설정하면 Vespa Cloud로 배포합니다. 개발 단계에서는 로컬로 빠르게 테스트하고, 프로덕션에는 클라우드로 전환하는 워크플로우를 쉽게 구현할 수 있죠.

LLM 통합도 유연합니다. OpenAI 호환 API라면 뭐든 연결됩니다. OpenRouter로 100개 이상의 모델에 접근할 수도 있고, Ollama나 LM Studio로 로컬에서 Llama, Mistral을 돌릴 수도 있습니다. vLLM으로 고성능 추론 서버를 구축하는 것도 지원합니다.

# Ollama 로컬 모델 사용 예시
export LLM_BASE_URL=http://localhost:11434/v1
export LLM_MODEL=llama3.2
export LLM_API_KEY=dummy

nyrag ui

환경 변수가 설정 파일보다 우선순위가 높아서, 배포 환경마다 다른 LLM을 쓰거나 임베딩 모델을 바꾸는 게 간단합니다.

기존 프레임워크와의 차이점

LangChain이나 LlamaIndex 같은 프레임워크는 커스터마이징이 자유롭지만 코딩이 필요합니다. Haystack은 모듈러 설계가 강점이지만 러닝 커브가 가파릅니다. NyRAG는 정반대 접근입니다. 유연성을 일부 포기하는 대신 통합 파이프라인과 제로 코드 배포에 집중했습니다.

회사 문서로 챗봇 만들기, 연구 논문 검색 도구, API 문서 내비게이션처럼 빠른 프로토타이핑이나 표준 RAG 유스케이스에 NyRAG가 적합합니다. 반면 복잡한 커스텀 워크플로우나 특수한 검색 로직이 필요하면 LangChain이 더 나을 수 있습니다.

RAG 개발 진입장벽을 낮추는 의미

NyRAG의 가치는 단순히 편리한 도구를 넘어섭니다. RAG 기술이 표준이 됐지만, 실제 구축에는 여전히 높은 진입장벽이 있었습니다. 벡터 데이터베이스 선택부터 임베딩 모델 튜닝, 청킹 전략, 검색 파이프라인 설계까지 전문 지식이 필요했죠. NyRAG는 이 복잡성을 추상화해 누구나 몇 분 만에 프로덕션급 RAG 앱을 만들 수 있게 합니다.

물론 한계도 있습니다. 아키텍처 유연성이 낮고, Vespa에 종속되며, 청킹 전략이나 검색 알고리즘을 세밀하게 조정하기 어렵습니다. 하지만 80%의 일반적인 RAG 유스케이스에는 충분히 강력한 도구입니다. 아이디어를 빠르게 검증하고, 필요하면 나중에 커스텀 솔루션으로 마이그레이션하는 전략도 가능합니다.

RAG 애플리케이션 구축이 이제 설정 파일 하나의 문제가 됐습니다. 중요한 건 기술 스택이 아니라 어떤 문제를 풀 것인가입니다.

참고자료:


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다