단순 RAG를 넘어: Next.js, Python, Supabase로 에이전시 워크플로우 구축

발행: (2025년 12월 25일 오전 04:51 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Beyond Simple RAG: Next.js, Python 및 Supabase를 사용한 에이전시 워크플로우 구축

RAG 애플리케이션 흐름

문제: “PDF와 채팅”이 새로운 Hello World

기본 RAG 앱을 만드는 것은 오늘날 매우 쉽습니다. 5페이지 PDF를 업로드하고, 1,000자 청크로 나누면 바로 작동합니다.

제가 500페이지 대학 교과서로 시도했을 때, 표준 파이프라인이 무너졌습니다. 저는 챗봇이 아니라 튜터를 원했습니다. 그래서 Learneazy.io를 만들었습니다.

Source:

The Secret Sauce: 3‑Layer Semantic Indexing

대부분의 RAG 애플리케이션은 문서를 하나의 거대한 텍스트 블롭으로 취급합니다. 하지만 교과서는 자연스러운 계층 구조(목차 → 장 → 내용)를 가지고 있습니다. 저는 이 구조를 Python (Flask) 마이크로서비스와 PyMuPDF를 사용해 데이터베이스에 그대로 반영했습니다.

Layer 1 – “Skeleton” (목차)

목적: 빠르고 높은 수준의 구조적 질의.

Layer 2 – “Container” (장별 청크)

목적: 컨텍스트를 고려한 검색. 예를 들어 “4장에 나오는 열역학”에 대해 질문하면 4장만 검색됩니다.

Layer 3 – “Deep Dive” (세분화된 청크)

목적: 모든 뉘앙스가 중요한 구체적이고 심층적인 질문에 답변.

두뇌: 에이전트 라우팅

계층 인덱스는 어떤 레이어를 조회할지 결정하는 메커니즘이 없으면 쓸모가 없습니다. 저는 각 레이어에 맞는 맞춤형 도구를 장착한 LangChain Agent를 구현했습니다. 이 에이전트는 라우터 역할을 합니다:

  • User: “몇 개의 챕터가 있나요?” → Agent: Index Tool 호출 (빠르고 저렴함).
  • User: “챕터 3을 요약해 주세요.” → Agent: Chapter Tool 호출 (높은 컨텍스트).
  • User: “X에 대한 공식을 설명해 주세요.” → Agent: Deep Dive Tool 호출 (높은 정밀도).

이 라우팅 로직은 토큰 사용량을 약 40 % 감소시키고 정확도를 크게 향상시켰습니다.

채팅을 넘어서: 플래시카드 엔진

가장 어려운 기술적 과제는 사용자가 “Chapter 5에 대한 플래시카드 10장을 생성해 주세요.”라고 말할 수 있게 하는 것이었습니다. AI가 단순히 추측할 수는 없었고, 근거가 있는 워크플로우가 필요했습니다.

  1. Topic Extraction: Chapter Layer를 스캔하여 핵심 주제(예: “Mitochondria”, “Krebs Cycle”)를 식별합니다.
  2. Context Retrieval: 해당 주제에 대해 Deep Dive Layer에서 타깃 벡터 검색을 수행해 정확한 정의를 얻습니다.
  3. Synthesis: LLM(Google Gemini)을 사용해 근거가 있는 사실을 엄격한 Q&A 쌍 형태로 포맷합니다.

결과: 일반적인 인터넷 지식이 아니라 사용자의 특정 자료에서 생성된 플래시카드.

스택: 왜 마이크로서비스인가?

구성 요소기술이유
프론트엔드Next.js 16 (React 19)빠르고 반응성이 뛰어난 UI
처리 서비스Python (Flask)뛰어난 PDF 조작 및 청크 처리 로직
임베딩Cohere (embed-english-v3.0)RAG 검색 품질에 최적화, 이 사용 사례에 OpenAI보다 우수
데이터베이스Supabase (PostgreSQL + pgVector)사용자 데이터(인증, 메타데이터)와 벡터를 함께 저장해 백엔드 간소화
소스 코드github.com/Abhinav-Sriharsha/Learneazy
Back to Blog

관련 글

더 보기 »