Claude Platform Docs
Messages파일 작업

PDF 지원

Claude로 PDF를 처리하세요: 문서에서 텍스트를 추출하고, 차트를 분석하고, 시각적 콘텐츠를 이해합니다.

제공한 PDF에 포함된 모든 텍스트, 그림, 차트, 표에 대해 Claude에게 질문할 수 있습니다. 몇 가지 사용 사례 예시는 다음과 같습니다:

  • 재무 보고서 분석 및 차트/표 이해
  • 법률 문서에서 핵심 정보 추출
  • 문서 번역 지원
  • 문서 정보를 구조화된 형식으로 변환

시작하기 전에

PDF 요구 사항 확인

Claude는 모든 표준 PDF와 함께 작동합니다. 요청 크기가 다음 요구 사항을 충족하는지 확인하세요:

요구 사항제한
최대 요청 크기퍼스트 파티 Claude API에서 128 MB (플랫폼에 따라 다름, 요청 크기 제한 참조)
요청당 최대 페이지 수600 (요청의 컨텍스트 윈도우가 1M 토큰 미만인 경우 100)
형식표준 PDF (비밀번호/암호화 없음)

두 제한 모두 PDF와 함께 전송되는 다른 모든 콘텐츠를 포함한 전체 요청 페이로드에 적용됩니다. 대용량 PDF의 경우, 요청 페이로드를 작게 유지하기 위해 Files API로 업로드하고 file_id로 참조하는 것을 고려하세요.

PDF 지원은 Claude의 비전 기능에 의존하므로, 다른 비전 작업과 동일한 제한 사항 및 고려 사항이 적용됩니다.

지원되는 플랫폼 및 모델

모든 활성 모델은 PDF 처리를 지원합니다.

Claude로 PDF 처리하기

첫 번째 PDF 요청 보내기

Messages API를 사용하는 간단한 예제로 시작하세요. 세 가지 방법으로 Claude에 PDF를 제공할 수 있습니다:

  1. 온라인에 호스팅된 PDF에 대한 URL 참조로
  2. document 콘텐츠 블록에 base64로 인코딩된 PDF로
  3. Files API의 file_id로

옵션 1: URL 기반 PDF 문서

가장 간단한 방법은 URL에서 직접 PDF를 참조하는 것입니다:

client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {
                        "type": "url",
                        "url": "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf",
                    },
                },
                {"type": "text", "text": "What are the key findings in this document?"},
            ],
        }
    ],
)

print(message.content)

응답은 Claude의 분석을 content의 텍스트 블록으로 반환하며, 토큰 사용량은 usage에 포함됩니다:

Output
{
  "id": "msg_01Hfp8YuFjQ55VgWbpdHDehB",
  "type": "message",
  "role": "assistant",
  "model": "claude-opus-5-5",
  "content": [
    {
      "type": "text",
      "text": "This document is an addendum to the Claude 3 model card, reporting updated evaluation results. The key findings include..."
    }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 45000,
    "output_tokens": 300
  }
}

옵션 2: Base64로 인코딩된 PDF 문서

로컬 시스템에서 PDF를 보내야 하거나 URL을 사용할 수 없는 경우:

import base64
import httpx2

# 먼저 PDF를 로드하고 인코딩합니다
pdf_url = "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf"
pdf_data = base64.standard_b64encode(
    httpx2.get(pdf_url, follow_redirects=True).content
).decode("utf-8")

# 대안: 로컬 파일에서 로드합니다
# with open("document.pdf", "rb") as f:
#     pdf_data = base64.standard_b64encode(f.read()).decode("utf-8")

# base64 인코딩을 사용하여 Claude에 전송합니다
client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {
                        "type": "base64",
                        "media_type": "application/pdf",
                        "data": pdf_data,
                    },
                },
                {"type": "text", "text": "What are the key findings in this document?"},
            ],
        }
    ],
)

print(message.content)

옵션 3: Files API

반복적으로 사용할 PDF이거나 인코딩 오버헤드를 피하고 싶은 경우, Files API를 사용하세요:

client = anthropic.Anthropic()

# PDF 파일을 업로드합니다
with open("/path/to/document.pdf", "rb") as f:
    file_upload = client.files.upload(file=("document.pdf", f, "application/pdf"))

# 업로드한 파일을 메시지에서 사용합니다
message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {"type": "file", "file_id": file_upload.id},
                },
                {"type": "text", "text": "What are the key findings in this document?"},
            ],
        }
    ],
)

print(message.content)

PDF 지원 작동 방식

Claude에 PDF를 보내면 다음 단계가 수행됩니다:

  1. 시스템이 문서의 내용을 추출합니다.

    • 시스템이 문서의 각 페이지를 이미지로 변환합니다.
    • 각 페이지의 텍스트가 추출되어 각 페이지의 이미지와 함께 제공됩니다.
  2. Claude가 텍스트와 이미지를 모두 분석합니다.

    • 문서는 분석을 위해 텍스트와 이미지의 조합으로 제공됩니다.
    • 이를 통해 사용자는 차트, 다이어그램 및 기타 비텍스트 콘텐츠와 같은 PDF의 시각적 요소에 대한 인사이트를 요청할 수 있습니다.
  3. Claude가 관련이 있는 경우 PDF의 내용을 참조하여 응답합니다.

    Claude는 응답할 때 텍스트 콘텐츠와 시각적 콘텐츠를 모두 참조할 수 있습니다. PDF 지원을 다음과 통합하여 성능을 더욱 향상시킬 수 있습니다:

비용 추정

PDF 파일의 토큰 수는 문서에서 추출된 전체 텍스트와 페이지 수에 따라 달라집니다:

  • 텍스트 토큰 비용: 각 페이지는 콘텐츠 밀도에 따라 일반적으로 1,500–3,000개의 토큰을 사용합니다. 추가 PDF 요금 없이 표준 API 요금이 적용됩니다.
  • 이미지 토큰 비용: 각 페이지가 이미지로 변환되므로 동일한 이미지 기반 비용 계산이 적용됩니다.

토큰 카운팅을 사용하여 특정 PDF의 비용을 추정할 수 있습니다.

PDF 처리 최적화

성능 향상

최적의 결과를 위해 다음 모범 사례를 따르세요:

  • 요청에서 PDF를 텍스트 앞에 배치하세요
  • 표준 글꼴을 사용하세요
  • 텍스트가 명확하고 읽기 쉬운지 확인하세요
  • 페이지를 올바른 정방향으로 회전하세요
  • 프롬프트에서 논리적 페이지 번호(PDF 뷰어 기준)를 사용하세요
  • 필요한 경우 대용량 PDF를 청크로 분할하세요
  • 반복 분석을 위해 프롬프트 캐싱을 활성화하세요

구현 확장

대량 처리의 경우 다음 접근 방식을 고려하세요:

프롬프트 캐싱 사용

반복 쿼리의 성능을 향상시키려면 프롬프트 캐싱으로 PDF를 캐시하세요:

import base64
import httpx2

# 먼저 PDF를 로드하고 인코딩합니다
pdf_url = "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf"
pdf_data = base64.standard_b64encode(
    httpx2.get(pdf_url, follow_redirects=True).content
).decode("utf-8")

# 캐시된 문서로 메시지를 생성합니다
client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {
                        "type": "base64",
                        "media_type": "application/pdf",
                        "data": pdf_data,
                    },
                    "cache_control": {"type": "ephemeral"},
                },
                {
                    "type": "text",
                    "text": "Which model has the highest human preference win rates across each use-case?",
                },
            ],
        }
    ],
)

print(message.content)

문서 배치 처리

Message Batches API를 사용하여 하나의 요청으로 여러 PDF를 처리하세요:

import base64
import httpx2

# 먼저 PDF를 로드하고 인코딩합니다
pdf_url = "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf"
pdf_data = base64.standard_b64encode(
    httpx2.get(pdf_url, follow_redirects=True).content
).decode("utf-8")

# 문서를 사용하는 요청 배치를 생성합니다
client = anthropic.Anthropic()
message_batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "my-first-request",
            "params": {
                "model": "claude-opus-5-5",
                "max_tokens": 1024,
                "messages": [
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "document",
                                "source": {
                                    "type": "base64",
                                    "media_type": "application/pdf",
                                    "data": pdf_data,
                                },
                            },
                            {
                                "type": "text",
                                "text": "Which model has the highest human preference win rates across each use-case?",
                            },
                        ],
                    }
                ],
            },
        },
        {
            "custom_id": "my-second-request",
            "params": {
                "model": "claude-opus-5-5",
                "max_tokens": 1024,
                "messages": [
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "document",
                                "source": {
                                    "type": "base64",
                                    "media_type": "application/pdf",
                                    "data": pdf_data,
                                },
                            },
                            {
                                "type": "text",
                                "text": "Extract 5 key insights from this document.",
                            },
                        ],
                    }
                ],
            },
        },
    ]
)

print(message_batch)

배치는 비동기적으로 처리됩니다. 진행 상황을 확인하고 처리가 끝난 후 결과를 가져오려면 배치 처리를 참조하세요.

다음 단계

Claude의 비전 기능을 통해 이미지를 처리하고 분석할 수 있어 멀티모달 상호작용의 흥미로운 가능성이 열립니다.

Claude Cookbook 레시피에서 PDF 처리의 실용적인 예제를 살펴보세요.

PDF 지원에 대한 전체 API 문서를 확인하세요.

제공 여부

PDF 지원
API
  • Messages API
  • Managed Agents
모델
  • 모든 모델

데이터 처리

데이터 처리 개요

적용 엔드포인트

  • /v1/messages
제로 데이터 보존적격

적용 모델 제외

HIPAA적격

HIPAA 적격성은 Files API가 아닌 Messages API를 통해 인라인으로 전송된 PDF에 적용됩니다.

이 페이지가 도움이 되었나요?