개요
DocETL은 복잡한 문서 처리 파이프라인을 LLM으로 구축하는 Python 프레임워크. 기존 ETL(Extract-Transform-Load) 개념을 비정형 문서에 적용하여 대규모 문서 분석·변환·집계를 자동화.
- GitHub: https://github.com/ucbepic/docetl
- 개발: UC Berkeley EPIC Lab
- 라이선스: MIT
- 특징: LLM 최적화, 자동 파이프라인 최적화
핵심 개념
ETL vs DocETL
| 전통적 ETL | DocETL |
|---|---|
| 정형 데이터 (CSV, DB) | 비정형 문서 (PDF, 논문, 보고서) |
| SQL·코드 변환 | LLM 프롬프트 변환 |
| 규칙 기반 | 의미론적 이해 |
주요 연산자
| 연산자 | 설명 |
|---|---|
| Map | 각 문서에 LLM 처리 적용 |
| Reduce | 여러 결과를 집계·요약 |
| Filter | 조건에 맞는 문서만 선택 |
| Split | 긴 문서를 청크로 분할 |
| Unnest | 중첩 데이터 펼치기 |
| Resolve | 엔티티 중복 해소 |
| Gather | 관련 컨텍스트 수집 |
설치
pip install docetl파이프라인 예시 (YAML)
# pipeline.yaml
datasets:
medical_notes:
type: file
source: "data/patient_notes/*.txt"
pipeline:
steps:
- name: extract_symptoms
type: map
input: medical_notes
prompt: |
다음 의료 기록에서 증상 목록을 추출하세요.
기록: {{ input.content }}
JSON 형식으로 반환: {"symptoms": ["증상1", "증상2", ...]}
output:
schema:
symptoms: list[str]
- name: filter_severe
type: filter
input: extract_symptoms
prompt: |
다음 증상이 심각한 상태를 나타내는가?
증상: {{ input.symptoms }}
True 또는 False로만 답하세요.
- name: summarize
type: reduce
input: filter_severe
prompt: |
다음 심각한 증상 사례들을 종합하여 패턴을 분석하세요.
사례들: {{ inputs }}
output:
schema:
summary: str
common_patterns: list[str]
output:
type: file
path: "results/analysis.json"Python API
from docetl import Pipeline
# 파이프라인 빌드
pipeline = Pipeline.from_yaml("pipeline.yaml")
# 실행
results = pipeline.run()
# 또는 코드로 직접 구성
from docetl.operations import MapOperation, ReduceOperation
map_op = MapOperation(
name="summarize",
prompt="다음 문서를 한 문단으로 요약하세요: {{ input.text }}",
output_schema={"summary": "str"}
)자동 최적화
DocETL의 핵심 기능: 파이프라인을 자동으로 최적화
사용자 파이프라인 정의
→ DocETL 최적화 엔진
→ 청크 크기 자동 조정
→ 프롬프트 최적화
→ 배치 처리 전략 선택
→ 비용·품질 트레이드오프 최적화
→ 최적화된 파이프라인 실행
활용 사례
- 법률 문서: 계약서에서 조항·의무사항 추출
- 의료 기록: 증상·진단·처방 구조화
- 논문 분석: 대용량 논문에서 트렌드·결론 집계
- 재무 보고서: 여러 보고서에서 KPI 비교 분석
- 고객 피드백: 리뷰에서 주제·감정 분류·집계