본문으로 건너뛰기
r/LangChain조회 1

인도 정부의 복잡한 PDF를 처리하기 위해 구축한 8노드 에이전틱 RAG 시스템

병렬 팬아웃 검색, Cohere 신경 재랭커, VLM 기반 LlamaParse, 부모-자식 청킹을 결합해 인도 정부 문서의 병합 셀·교차 개정 문제를 해결했다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

이 글은 복잡한 병합 셀과 교차 개정이 많은 인도 정부 PDF를 신뢰성 있게 처리하기 위해 구성한 8노드 RAG 파이프라인을 제시한다. 핵심은 세 가지 재구성 쿼리를 병렬로 실행해 후보를 병합한 뒤 Cohere 신경 재랭커로 의미적 관련도를 재평가하는 검색 흐름과, 페이지 사전 필터링(PyMuPDF)과 VLM 기반 LlamaParse로 레이아웃을 보존하는 추출 방식, 그리고 MarkdownHeaderTextSplitter와 RecursiveCharacterTextSplitter를 결합한 부모-자식 청킹으로 문맥을 보강하는 검색 구현이다. 추가로 Jina v3 MRL의 256-dim 사용과 무료 등급 인프라 조합으로 비용 최적화와 무결성 확보를 동시에 추구했다. 이러한 설계는 법률·재무 도메인에서의 환각을 줄이고 근거 기반 응답 비율을 높이는 방향으로 작동했다.

합의점 vs 논쟁점

합의점

  • 시각 기반 추출(VLM)과 부모-자식 청킹을 결합하면 표 구조와 교차 참조를 가진 정부 문서에서 환각을 크게 줄일 수 있다.
  • 검색 단계에서 병렬 쿼리로 다양성을 확보한 뒤 신경 재랭커로 다시 점수를 매기는 방식이 정밀도를 개선한다.
  • 노드별 역할 분리를 통해 비용 절감과 안전성 검증 기능을 동시에 확보할 수 있다.

논쟁점

  • Jina v3 MRL의 256-dim 사용이 저장 공간을 줄였다는 주장은 제시되었으나 재현 가능한 성능 비교 데이터 전체가 원문에 포함되어 있지 않다.
  • LLM을 '판사'로 쓰는 HallucinationGuard의 구체적 판단 기준과 임계값에 관한 상세한 수치가 본문에 부족하다.

실용적 조언

  • 우선 전체 문서에 대해 경량 사전 필터링을 적용해 임베딩·검색 대상이 되는 페이지를 줄이면 즉시 비용 절감이 가능하다. 본 글에서는 PyMuPDF로 실제 개정이 있는 페이지만 선별해 임베딩 비용을 약 60% 낮추었다고 보고되었다. 이 접근은 긴 법률 문서에서 필수적이다.
  • 표와 병합 셀 같은 레이아웃 문제가 잦은 문서는 이미지 기반 VLM 추출을 우선 적용해야 한다. LlamaParse의 VLM 모드는 페이지 스크린샷을 해석해 병합 셀과 중첩 헤더를 보존한 마크다운을 생성하였고, 전통적 텍스트 파싱보다 구조 복구율이 높았다. 시각적 레이아웃 인식은 정규식·휴리스틱 유지보수 비용을 회피한다.
  • 검색 정확도를 위해 병렬 팬아웃으로 쿼리 다양성을 확보하고 합쳐진 후보에 대해 교차형 재랭커를 적용해야 한다. 본 사례에서는 세 가지 쿼리 변형을 병렬 조회한 뒤 Cohere 재랭커로 의미적 관련도를 재평가해 누락률을 낮추었다. 재랭킹은 특히 밀집 법률 텍스트에서 코사인 유사도 한계를 보완한다.

섹션별 상세

질의-검색 흐름에서 병렬 팬아웃과 재랭킹을 결합한 설계가 핵심 문제를 해결했다. 한 사용자 질의는 세 가지 재구성 쿼리로 병렬 호출되어 각각 Pinecone에서 후보 청크를 반환하고, 이 후보들이 병합된 뒤 Cohere의 신경 재랭커로 재평가되어 최종 후보가 선정된다. 저자는 이 방식으로 '정확히 물어봤는데도 놓친 답' 문제가 크게 줄었다고 보고했다. 밀집 법률 텍스트에서는 코사인 유사도만으로는 의미적 관련도를 포착하지 못해 재랭킹이 실용적 이득을 제공했다.
문서 추출 단계에서 이미지 기반 레이아웃 인식이 결정적 역할을 했다. PyMuPDF를 먼저 적용해 전체 페이지 중 실제 개정이 포함된 페이지를 사전 필터링하여 임베딩 대상 페이지 수를 줄였고, LlamaParse의 VLM 모드는 각 페이지를 스크린샷으로 처리해 병합 셀과 중첩 헤더를 시각적으로 인식한 뒤 구조화된 마크다운을 출력했다. 저자는 사전 필터링으로 임베딩 비용을 약 60% 절감했다고 명시했다. 시각 기반 추출은 전통적 텍스트 파서나 정규식으로는 복구하기 어려운 표 레이아웃 문제를 제거했다.
청킹 전략은 두 단계와 부모-자식 관계를 결합해 문맥 손실을 방지하도록 설계되었다. 문서는 먼저 MarkdownHeaderTextSplitter로 섹션 계층을 보존하며 나뉘고, 이후 RecursiveCharacterTextSplitter로 적절한 길이의 자식 청크로 세분화되어 각 자식에는 부모 섹션 정보가 결합된다. 검색은 자식 청크 수준에서 이루어지며 매칭된 자식이 있으면 그 자식의 전체 부모 문단이 LLM으로 전달되어 주변 맥락을 확보한다. 이 방식은 교차 참조된 개정 조항에서 단편적 단서로 인한 환각을 줄이는 효과를 냈다.
시스템 전반은 8개의 노드로 분리된 LangGraph 파이프라인으로 운영되어 각 노드가 독립적 역할을 수행한다. 예컨대 분류기 노드는 약 30%의 질의를 벡터 DB 접근 전에 차단해 불필요한 호출을 줄였고 CrossQuestioner는 의도 명확화를 유도하며 HallucinationGuard는 LLM 출력과 근거 청크를 대조해 자신감 높은 오답을 차단한다. 저자는 전체 스택을 무료 등급 서비스(Pinecone Serverless, Render, Supabase, Upstash Redis 등)로 운용할 수 있다고 언급해 실무 비용 효율성을 보였다. 노드화된 구조는 안전성·확장성·디버깅 측면에서 이점이 있었다.
파이프라인 다이어그램으로 사용자 질의부터 검증된 응답까지 8개 노드 흐름을 보여준다.
Diagram이미지는 사용자 질의가 분류기와 의도 확인 장치를 거쳐 병렬 팬아웃으로 세 갈래의 검색을 실행하고 후보를 병합·재랭크해 부모-자식 검색과 생성, 최종 환각 방지로 이어지는 전체 흐름을 선형으로 표현한다. 각 노드가 담당하는 기능과 데이터 흐름이 시각적으로 연결되어 있어 본문에서 언급된 설계 결정들의 상호 연관성을 확인할 수 있다.
동일한 파이프라인 다이어그램의 미리보기 이미지로 동일한 구조적 정보를 재현한다.
Diagram이 이미지는 첫 번째 다이어그램과 내용이 동일해 파이프라인의 노드별 역할과 데이터 병합·재랭크·검증 흐름을 다시 확인하게 한다. 다이어그램의 색상 코드와 노드 레이블은 각 단계의 목적(예: 병렬 팬아웃, Cohere 재랭크, Hallucination Guard 등)을 빠르게 파악하도록 돕는다.
운영 및 효율화 측면에서 여러 최적화가 병행되었다. 벡터 차원 축소를 위해 Jina v3 MRL을 256-dim으로 사용해 표준 1024-dim 대비 약 75%의 저장 공간 절감 효과를 확인했고, PyMuPDF 기반의 사전 필터링으로 임베딩 대상 감소에 따른 비용 절감이 보고되었다. 또한 무결성 확보를 위해 매직 바이트 검증, SHA-256 해시, 세션 범위 벡터 같은 보안 레이어가 도입되었다. 이러한 조합은 비용과 응답 신뢰성을 동시에 향상시키는 실무적 트레이드오프를 만든다.

용어 해설

검색 증강 생성(RAG)
검색 증강 생성(RAG)은 외부 문서 검색 결과를 모델 입력으로 주입해 응답을 생성하는 방식이다. 이 글에서는 검색 단계에서 여러 쿼리 변형을 병렬로 실행하고 후보 청크를 병합한 뒤 재랭크하여 LLM 입력으로 전달하는 흐름으로 구현되었다. RAG은 긴 참조 문서에서 근거 기반 응답을 얻기 위해 중요하다.
재랭킹(Reranking)
재랭킹은 초기 검색 결과를 추가 신경망 혹은 교차 인코더로 재평가해 실제 의미적 관련도를 기준으로 재정렬하는 과정이다. 본문에서는 벡터 코사인 유사도와 달리 Cohere의 신경 재랭커가 밀집 법률 텍스트에서 의미적 적합도를 잡아냈다. 재랭킹은 검색의 정밀도를 높여 LLM의 환각을 줄이는 데 기여한다.
시각 레이아웃 모델(VLM)
VLM은 페이지 이미지를 입력으로 받아 시각적 레이아웃과 텍스트를 함께 해석하는 모델 계열을 말한다. 본문에서는 LlamaParse의 VLM 모드가 페이지 스크린샷을 분석해 병합 셀과 중첩 헤더를 보존한 마크다운을 생성했다. VLM은 표 구조 복구와 레이아웃 기반 추출에서 휴리스틱을 대체할 수 있다.
부모-자식 검색 아키텍처(Parent-Child Retrieval)
부모-자식 검색은 작은 단위(자식)로 정밀 검색을 수행하고, 일치가 발견되면 해당 자식의 상위 문단(부모)을 함께 가져와 문맥을 보강하는 방식이다. 이 글에서는 MarkdownHeaderTextSplitter와 RecursiveCharacterTextSplitter의 조합으로 자식-부모 관계를 생성해 LLM에 충분한 맥락을 제공했다. 이 구조는 교차 참조된 개정 조항 등에서 단편적 정보로 인한 환각을 줄였다.
병렬 팬아웃(Parallel Fan-out)
병렬 팬아웃은 하나의 사용자 질의를 여러 쿼리 변형으로 동시에 실행해 서로 다른 검색 결과 집합을 얻는 전략이다. 본문에서는 세 가지 재구성된 쿼리를 Pinecone에 병렬로 보내고 후보를 병합한 뒤 재랭크함으로써 '정확히 물어봤는데 놓친' 문제를 축소했다. 이 방식은 검색 다양성을 늘려 누락률을 낮추는 데 유효하다.

언급된 도구

Pinecone추천

벡터 검색 및 저장을 담당하는 서버리스 벡터 DB

Cohere추천

검색 후보의 의미적 관련도를 재평가하는 신경 재랭커 서비스

LlamaParse추천

VLM 모드로 페이지 스크린샷을 시각적으로 해석해 구조화된 마크다운을 생성하는 추출 도구

PyMuPDF추천

문서 페이지를 빠르게 스캔해 사전 필터링용 메타데이터를 추출하는 라이브러리

Jina v3 MRL중립

저차원 임베딩 포맷으로 저장 공간을 절감하는 임베딩 처리 옵션

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 06. 28.수집 2026. 06. 28.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.