C.W.K.
Stream
Lesson 03 of 06 · published

PDF 입력: 두 길 · 언제 어느 쪽

~14 min · pdf, document, files-api

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

네이티브 PDF 지원

Claude가 document 타입 콘텐츠 블록으로 보내면 PDF 직접 읽을 수 있어. 모델이 텍스트랑 visual 요소(테이블, figure) 둘 다 parse. 대부분 문서 — 계약서, 논문, 매뉴얼 — 에 마찰 가장 적은 길.

Files API는 재사용용

같은 PDF가 많은 턴 먹이면 Files API로 한 번 업로드하고 매 턴 file_id로 참조. 대역폭과 지연 절약. Trade-off는 업로드 단계랑 옛 파일 cleanup 잊지 않기.

스캔 PDF엔 OCR fallback

Born-digital PDF가 네이티브로 잘 동작. 무거운 스캔 PDF(특히 옛 계약서)는 가끔 텍스트 추출 fail — 보내기 전에 Tesseract나 managed OCR service로 preprocess, 또는 layout 중요하면 페이지마다 vision 블록.

원칙: One-shot 읽기엔 네이티브 PDF, 재사용 자산엔 Files API, 레거시 paper 세계엔 OCR fallback.

Code

네이티브 PDF document 블록·python
import base64, pathlib

pdf_b64 = base64.standard_b64encode(pathlib.Path("contract.pdf").read_bytes()).decode()

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=2048,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {
                        "type": "base64",
                        "media_type": "application/pdf",
                        "data": pdf_b64,
                    },
                },
                {"type": "text", "text": "List all parties named in the agreement."},
            ],
        }
    ],
)
반복 읽기에 Files API·python
uploaded = client.beta.files.upload(
    file=("contract.pdf", open("contract.pdf", "rb"), "application/pdf"),
)

# 후속 턴은 file_id로만 참조
for question in ["List the parties.", "Find termination clauses.", "Total fees over 24 months?"]:
    r = client.beta.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": [
                {"type": "document", "source": {"type": "file", "file_id": uploaded.id}},
                {"type": "text", "text": question},
            ],
        }],
        betas=["files-api-2025-04-14"],
    )
    print(question, "->", r.content[0].text[:120])

External links

Exercise

매 턴 재업로드하는 PDF 질의응답 flow 골라. Files API 사용하게 변환, 5턴 세션에 대해 지연·토큰 측정.
Hint
Files API도 주변 텍스트의 prompt caching 혜택 — 둘 다 함께 고려.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.