LlamaParse - RAG용 문서 파싱 치트시트
LlamaParse는 LlamaIndex 팀의 문서 파싱 서비스로, LLM 및 RAG 파이프라인을 위해 특별히 구축되었습니다. 그 초점은 어려운 경우입니다: 복잡한 표, 다중 열 레이아웃, 그림, 임베디드 차트가 있는 PDF로, 제네릭 텍스트 추출기가 사용할 수 없는 텍스트로 평탄화합니다. 이는 구조를 보존하는 깔끔한 마크다운을 출력하며, 그것의 구별되는 기능은 자연 언어 파싱 지시사항입니다 — 추출 규칙을 설정하는 대신 문서가 어떻게 배치되어 있는지와 그것으로 무엇을 해야 하는지를 설명합니다.
LlamaParse는 자유 계층 (API 키 필요)이 있는 호스팅 서비스입니다. 완전히 로컬 파싱은 Docling 또는 Marker를 참조합니다.
설치
| 방법 | 명령어 |
|---|
| pip | pip install llama-parse |
| LlamaIndex와 함께 | pip install llama-index llama-parse |
| API 키 | export LLAMA_CLOUD_API_KEY="llx-..." |
| 확인 | python -c "from llama_parse import LlamaParse; print('ok')" |
기본 파싱
from llama_parse import LlamaParse
parser = LlamaParse(result_type="markdown")
documents = parser.load_data("./report.pdf")
print(documents[0].text)
| 매개변수 | 목적 |
|---|
result_type | "markdown" (구조 보존) 또는 "text" |
num_workers | 병렬 페이지 처리 |
verbose | 진행 출력 |
language | 문서 언어 힌트 |
parsing_instruction | 자연 언어 안내 (아래) |
파싱 지시사항 (구별자)
parser = LlamaParse(
result_type="markdown",
parsing_instruction="""
This is a financial report. Preserve all tables as Markdown tables.
For each chart, write a one-paragraph description of the trend it shows.
Ignore page headers and footers.
""",
)
추출 코드를 작성하는 대신 평문으로 문서와 원하는 처리를 설명합니다 — 제네릭 파서가 나쁜 도메인별 레이아웃 (청구서, 과학 논문, 법률 계약)에 유용합니다.
비동기 및 배치
import asyncio
async def parse_many(paths):
parser = LlamaParse(result_type="markdown", num_workers=8)
return await parser.aload_data(paths)
docs = asyncio.run(parse_many(["a.pdf", "b.pdf", "c.pdf"]))
| 방법 | 사용 |
|---|
load_data(path) | 단일 파일, 동기 |
aload_data([paths]) | 비동기, 다중 파일 |
get_json_result(path) | 페이지 메타데이터가 있는 구조화된 JSON |
get_images(...) | 임베디드 이미지 추출 |
지원되는 입력
| 형식 | 참고 |
|---|
| PDF | 주요 대상, 스캔된 포함 (OCR) |
| DOCX / PPTX / XLSX | 오피스 형식 |
| HTML | 웹 문서 |
| 이미지 | OCR을 통한 PNG/JPEG |
RAG 파이프라인에 연결
from llama_parse import LlamaParse
from llama_index.core import VectorStoreIndex
from llama_index.core.node_parser import MarkdownElementNodeParser
docs = LlamaParse(result_type="markdown").load_data("./manual.pdf")
# 마크다운 인식 청킹은 표와 섹션을 그대로 유지
node_parser = MarkdownElementNodeParser()
nodes = node_parser.get_nodes_from_documents(docs)
index = VectorStoreIndex(nodes)
마크다운 출력을 마크다운 인식 노드 파서와 페어링하는 것이 포인트입니다: 표는 파싱 및 청킹을 생존하며, 대부분의 RAG 파이프라인이 표 사실을 잃는 곳입니다.
표를 잘 처리하기
| 기법 | 이유 |
|---|
result_type="markdown" | 표가 마크다운 그리드가 됨 |
| 표에 대한 파싱 지시 | 일관된 표 처리 강제 |
MarkdownElementNodeParser | 표를 한 청크에 유지 |
| 행별 문장 직렬화 | 개별 행을 검색 가능 |
비용 및 실제 참고
| 고려사항 | 세부사항 |
|---|
| 호스팅 서비스 | 문서가 LlamaCloud로 전송됨 |
| 자유 계층 | 하루당 제한된 페이지 |
| 캐싱 | 같은 파일을 재파싱하면 결과 재사용 가능 |
| 개인정보 보호 | 민감한 문서의 경우 로컬 파서 선호 |
LlamaParse vs 로컬 파서
| 측면 | LlamaParse | Docling | Marker |
|---|
| 호스팅 | 클라우드 서비스 | 로컬 | 로컬 |
| 복잡한 표 | 매우 강함 | 강함 | 좋음 |
| 사용자 정의 지시 | 자연 언어 | 설정 | 설정 |
| 개인정보 보호 | 데이터가 기계를 떠남 | 완전히 로컬 | 완전히 로컬 |
| 최적 대상 | 어려운 레이아웃, 빠른 결과 | 자체 호스팅 RAG 수집 | GPU 벌크 변환 |
개인정보 민감 말뭉치의 경우 Docling을 사용합니다; 벌크 로컬 변환의 경우 Marker를 사용합니다.
리소스