jamwithai/production-agentic-rag-course
실습으로 배우는 프로덕션 RAG와 Agentic RAG
arXiv 논문을 수집하고 검색해 질문에 답하는 연구 보조 시스템을 7주 과정으로 구현하는 무료 프로젝트입니다. BM25 검색부터 하이브리드 검색, RAG 운영 모니터링, LangGraph 기반 Agentic RAG까지 단계적으로 다룹니다.
- 주제
AI 요약
이 프로젝트는 arXiv 논문을 자동으로 가져와 내용을 처리하고, 연구 질문에 답하는 RAG(Retrieval-Augmented Generation) 시스템을 직접 구현하는 7주 과정입니다. 벡터 검색부터 시작하지 않고 키워드 검색의 기초를 먼저 다진 뒤, 의미 검색과 생성형 AI를 더하는 순서로 구성했습니다. 각 주차에는 코드와 노트북, 블로그 글이 제공되며, 완성 결과물은 논문 연구 보조 시스템입니다.
검색 기반부터 RAG까지
1주차에는 Docker Compose로 전체 개발 환경을 구성합니다. FastAPI, PostgreSQL 16, OpenSearch 2.19, Apache Airflow 3.0, Ollama를 연동하고 서비스 상태를 확인합니다. 2주차에는 arXiv API에서 논문 정보를 가져오는 파이프라인을 만듭니다. 요청 제한과 재시도 로직을 적용하고, Docling으로 과학 논문 PDF를 처리해 메타데이터와 내용을 저장합니다. Airflow DAG를 이용한 일일 수집 작업도 다룹니다.
3주차는 OpenSearch의 BM25 기반 키워드 검색을 구현합니다. 인덱스와 매핑을 설정하고, 필터와 가중치를 포함한 Query DSL 검색, 관련도 평가를 익힙니다. 4주차에는 문서를 섹션 단위로 나누고 Jina AI 임베딩을 생성해 의미 검색을 추가합니다. BM25와 벡터 검색 결과는 RRF(Reciprocal Rank Fusion)로 결합합니다. 단일 API에서 검색 방식을 선택하도록 구성하며, 검색 방식별 성능과 절충점도 살펴봅니다.
생성, 관측, 에이전트
5주차에는 검색 결과를 로컬 LLM에 전달해 답변을 생성하는 RAG 파이프라인을 완성합니다. Ollama를 사용해 데이터를 로컬에서 처리하며, 표준 응답과 SSE(Server-Sent Events) 스트리밍 응답을 제공합니다. 프로젝트는 프롬프트 최적화로 프롬프트 길이를 80% 줄이고 속도를 6배 높였다고 설명합니다. Gradio 인터페이스로 대화형 사용 화면도 구성합니다.
6주차에는 Langfuse 추적과 Redis 캐시를 붙여 요청 지연과 비용을 관찰하고 성능을 최적화합니다. 캐시 키와 TTL(Time to Live)을 설정하며, 캐시 적중 시 150~400배 속도 향상을 제시합니다. 7주차는 LangGraph로 상태 기반 에이전트 흐름을 구성합니다. 에이전트가 검색 결과의 관련성을 평가하고, 결과가 부족하면 질문을 다시 작성해 검색을 반복합니다. 도메인 밖 질문을 감지하는 가드레일을 두고, 판단 과정을 추적해 디버깅과 검토에 활용합니다. 비동기 처리와 오류 처리를 포함한 Telegram 봇으로 모바일 접근도 구현합니다.
실행 환경과 구성
실행에는 Docker Desktop과 Docker Compose, Python 3.12 이상, UV가 필요하며, 메모리 8GB 이상과 디스크 여유 공간 20GB 이상을 권장합니다. 저장소를 복제하고 .env.example을 .env로 복사한 뒤 uv sync, docker compose up --build -d를 실행합니다. Week 4부터는 Jina 임베딩 API 키가 필요하고, Week 7 Telegram 봇에는 봇 토큰이 필요합니다. Langfuse 키는 모니터링을 사용할 때 설정합니다.
서비스는 API와 논문 저장소뿐 아니라 검색, 데이터 수집, 로컬 LLM, 캐시, 추적 도구까지 Docker 환경에 함께 올립니다. 각 주차 코드는 week1.0부터 week7.0까지 태그로 제공하며, 노트북과 API 문서, Gradio 화면, Airflow 및 OpenSearch 대시보드로 학습과 실행 상태를 확인합니다. 프로젝트는 무료이며, 전체 과정을 로컬에서 실행하면 비용이 들지 않는다고 안내합니다. 외부 LLM API를 선택적으로 사용하면 약 2~5달러가 들 수 있습니다.
원문: GitHub / 번역·요약: Trawling