Claude Platform Docs
Messages파일 작업

PDF 지원

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

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

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

시작하기 전에

PDF 요구 사항 확인

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

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

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

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

지원되는 플랫폼 및 모델

모든 활성 모델은 PDF 처리를 지원합니다. Amazon Bedrock의 Converse API를 통한 PDF 지원에 대해서는 Amazon Bedrock PDF 지원을 참조하세요.

Amazon Bedrock PDF 지원

Amazon Bedrock의 Claude (Opus 4.6 및 이전 버전)의 일부인 Converse API를 통해 PDF 지원을 사용하는 경우, 두 가지 서로 다른 문서 처리 모드가 있습니다:

문서 처리 모드

  1. Converse Document Chat (기존 모드 - 텍스트 추출만)

    • PDF에서 기본 텍스트 추출을 제공합니다
    • PDF 내의 이미지, 차트 또는 시각적 레이아웃을 분석할 수 없습니다
    • 3페이지 PDF에 약 1,000 토큰을 사용합니다
    • 인용이 활성화되지 않은 경우 자동으로 사용됩니다
  2. Claude PDF Chat (새 모드 - 완전한 시각적 이해)

    • PDF의 완전한 시각적 분석을 제공합니다
    • 차트, 그래프, 이미지 및 시각적 레이아웃을 이해하고 분석할 수 있습니다
    • 포괄적인 이해를 위해 각 페이지를 텍스트와 이미지 모두로 처리합니다
    • 3페이지 PDF에 약 7,000 토큰을 사용합니다
    • Converse API에서 인용 활성화가 필요합니다

주요 제한 사항

  • Converse API: 시각적 PDF 분석에는 인용 활성화가 필요합니다. 현재 인용 없이 시각적 분석을 사용할 수 있는 옵션은 없습니다(InvokeModel API와 다름).
  • InvokeModel API: 강제 인용 없이 PDF 처리에 대한 완전한 제어를 제공합니다.

일반적인 문제

Converse API를 사용할 때 Claude가 PDF의 이미지나 차트를 보지 못한다면, 인용 플래그를 활성화해야 할 가능성이 높습니다. 이 플래그가 없으면 Converse는 기본 텍스트 추출로만 대체됩니다.

Claude로 PDF 처리하기

첫 번째 PDF 요청 보내기

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

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

옵션 1: URL 기반 PDF 문서

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

client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-opus-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",
  "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",
    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",
    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",
    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)

문서 배치 처리

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

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",
                "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",
                "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 문서를 확인하세요.

Compatibility

Supported platforms
  • Claude API
  • Claude Platform on AWS
  • Amazon Bedrock
  • Google Cloud
  • Microsoft Foundry

Was this page helpful?