LangGraph를 활용한 RAG용 Human-in-the-Loop 문서 파서(LongParser) 오픈소스 공개
Using LangGraph to build a Human-in-the-Loop document parser for RAG (Open-Sourced)
핵심 요약
RAG 성능 향상을 위해 LangGraph로 문서 파싱 단계에 인간의 검토 과정을 도입한 오픈소스 도구 LongParser를 소개함.
- LongParser 도구 — LangGraph를 기반으로 문서 파싱 후 인간의 검토를 거쳐 RAG 성능을 높이는 오픈소스 파싱 엔진임.
- 하이브리드 청킹 전략 — 토큰, 계층 구조, 테이블 인식 등 6가지 전략을 문서 구조에 따라 자동으로 라우팅함.
- Human-in-the-Loop — 파싱된 데이터가 벡터 저장소로 넘어가기 전 사람이 직접 수정하거나 승인할 수 있는 워크플로우를 제공함.
- LangChain 통합 — 기존 LangChain 설정에 바로 적용 가능한 커스텀 리트리버를 제공하여 사용 편의성을 높임.
r/langchain 여러분 안녕하세요,
최근 표준 문서 로더를 사용하다가 한계에 부딪혔습니다. 평면화된 표, 뒤섞인 다단 레이아웃, 병합된 헤더 등이 데이터가 벡터 저장소에 들어가기도 전에 검색 품질을 떨어뜨리고 있었습니다.
임베딩 전에 검토 단계가 필요하다는 것을 깨닫고, LangGraph를 사용하여 수집 상태를 관리하고 Human-in-the-Loop(HITL) 워크플로우를 구현한 오픈소스 파싱 엔진인 LongParser를 만들었습니다.
아키텍처: 단순한 선형 스크립트 대신, 수집 프로세스를 그래프로 관리합니다. 이를 통해 파싱(텍스트, 표, 제목, 수식 추출) 후 파이프라인 실행을 일시 중지하고, 추출된 블록에 대한 인간의 승인, 수정 또는 거부를 기다릴 수 있습니다. 승인되면 그래프가 재개되어 구조화된 청크를 벡터 저장소로 보냅니다.
이 방식으로 만든 이유:
- 제어: 표준 로더는 "블랙박스"입니다. LLM이 환각을 일으키기 전까지는 청킹이 실패했는지 알 수 없습니다.
- 하이브리드 청킹: 문서 구조에 따라 파이프라인이 라우팅하는 6가지 전략(토큰, 계층, 테이블 인식, 의미론적)을 구현했습니다.
- 네이티브 통합: 기존 LangChain 설정에 바로 적용할 수 있도록 커스텀 리트리버를 만들었습니다.
리트리버 사용법:
from longparser import PipelineOrchestrator
from longparser.integrations.langchain import LongParserRetriever
# The pipeline handles the LangGraph-powered ingestion
pipeline = PipelineOrchestrator()
# Drop-in replacement for standard retrievers
retriever = LongParserRetriever(
pipeline=pipeline,
file_path="complex_research_paper.pdf"
)
# Returns structured documents with rich metadata (block type, hierarchy)
results = retriever.get_relevant_documents("What is the methodology?")
리소스: 이 도구는 완전히 로컬에서 작동하며, MIT 라이선스를 따르고, PDF, DOCX, PPTX, XLSX, CSV(LaTeX/수식 OCR 포함)를 지원합니다.
커뮤니티에 드리는 질문: 현재 LangGraph를 에이전트/채팅 라우팅용으로만 사용하고 계신가요, 아니면 데이터 수집 및 ETL 워크플로우 관리에도 사용하고 계신가요? 저희는 후자에 매우 강력하다고 판단하고 있으며, 다른 분들이 복잡한 수집 상태를 어떻게 처리하고 계신지 궁금합니다.

