개요

DocETL은 복잡한 문서 처리 파이프라인을 LLM으로 구축하는 Python 프레임워크. 기존 ETL(Extract-Transform-Load) 개념을 비정형 문서에 적용하여 대규모 문서 분석·변환·집계를 자동화.


핵심 개념

ETL vs DocETL

전통적 ETLDocETL
정형 데이터 (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 비교 분석
  • 고객 피드백: 리뷰에서 주제·감정 분류·집계

관련 항목