byteforce

CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API

Claude의 기능

PDF 지원

PDF support

Claude는 이미지뿐 아니라 PDF 파일에서도 내용을 직접 읽습니다. 놀라운 점은 코드가 이미지 때와 거의 똑같다는 것 — 바꾸는 곳은 단 세 군데입니다. 파일 열기를 earth.pdf로, 블록 typeimagedocument로, media_typeapplication/pdf로. 게다가 Claude는 PDF의 텍스트는 물론 이미지·차트·표까지 읽어 냅니다.

전체 내레이션영상 나레이션 한국어 번역 (전체)

Stephen Grider · Anthropic 기술 스태프

이미지 외에도, Claude는 PDF 파일에서 내용을 곧바로 읽을 수 있습니다. 이번 영상에서 그 방법을 보여 드리겠습니다. 영상에 earth.pdf라는 문서가 첨부돼 있습니다. 열어 보면 위키백과의 'Earth(지구)' 문서 중 몇 페이지일 뿐입니다. 이 PDF를 내려받아 노트북과 같은 디렉터리에 두세요.

PDF를 읽을 때는, 이미지를 읽어 Claude에 넣을 때 쓰던 코드와 거의 똑같은 코드를 씁니다. 지금 이미지를 열고 있는 곳을 찾아 earth.pdf로 바꿉니다. 변수 이름도 image_bytes에서 file_bytes로 바꾸겠습니다 — 더 이상 이미지를 읽는 게 아니니까요. 아래쪽 변수도 같이 고쳐 줍니다.

그다음 블록의 type을 image에서 document로 바꾸고, media_type을 image/png에서 application/pdf로 바꿉니다. 마지막으로 이 문서에 던지는 질문은, 이전 셀의 커다란 프롬프트 대신 "이 문서를 한 문장으로 요약해 줘"로 합니다. 실행하면 요약이 나오고, PDF 내용을 성공적으로 읽었음을 확인할 수 있습니다.

Claude는 PDF에서 텍스트만 읽는 게 아닙니다. 이미지나 차트, 표 같은 것도 읽어 냅니다. 그래서 Claude를 PDF 문서에서 거의 모든 종류의 정보를 추출하는 원스톱 창구처럼 생각해도 좋습니다.

이 장에서 배우는 것What you'll learn

약 2분
1

PDF 읽기 = 이미지 읽기와 거의 같은 코드

2

파일 열기를 earth.pdf로 (변수 image_bytesfile_bytes)

3

블록 type: imagedocument

4

media_type: image/pngapplication/pdf

5

질문은 자유롭게 — 예: "한 문장으로 요약"

6

Claude는 PDF의 텍스트·이미지·차트·표까지 추출

먼저 짚고 갈 용어
document 블록
PDF 같은 문서를 메시지에 넣는 콘텐츠 블록. 이미지의 image 블록과 짝을 이룹니다.
application/pdf
문서의 media_type. 이미지의 image/png 자리에 들어갑니다.
base64 인코딩
파일 바이트를 텍스트로 바꿔 data에 싣는 방식. 이미지·PDF 모두 동일합니다.
정보 추출 원스톱
텍스트뿐 아니라 PDF 속 이미지·차트·표까지 한 번에 읽어 냅니다.

이미지와 거의 같은 코드

Almost the same code

PDF를 읽는 코드는 이미지를 읽어 Claude에 넣던 코드와 거의 똑같습니다. 같은 base64 인코딩, 같은 add_user_message, 같은 chat() — 달라지는 건 세 군데뿐입니다.

이전 — 이미지 읽기 (비교용)
# (이전) 이미지 읽기 — 비교용
with open("images/prop_7.png", "rb") as f:
    image_bytes = base64.standard_b64encode(f.read()).decode("utf-8")

messages = []
add_user_message(messages, [
    {"type": "image",
     "source": {"type": "base64",
                "media_type": "image/png",
                "data": image_bytes}},
    {"type": "text", "text": prompt},
])
chat(messages)

바꾸는 곳 세 군데

The three changes

파일을 earth.pdf로 열고, 블록 typedocument로, media_typeapplication/pdf로. 질문은 자유롭게 — 여기서는 한 문장 요약을 부탁합니다.

image → document · 바뀌는 곳은 단 3군데

아래 버튼을 켜면 이미지 코드와 PDF 코드에서 달라지는 세 지점이 칠해집니다.

이미지 이전 코드
with open("images/prop_7.png", "rb") as f:
    image_bytes = ...

add_user_message(messages, [
  {"type": "image",
   "source": {"type": "base64",
     "media_type": "image/png",
     "data": image_bytes}},
  {"type": "text",
   "text": prompt},
])
PDF 바꾼 코드
with open("earth.pdf", "rb") as f:
    file_bytes = ...

add_user_message(messages, [
  {"type": "document",
   "source": {"type": "base64",
     "media_type": "application/pdf",
     "data": file_bytes}},
  {"type": "text",
   "text": "한 문장으로 요약"},
])
1

파일images/prop_7.pngearth.pdf (변수도 image_bytesfile_bytes)

2

블록 type"image""document"

3

media_type"image/png""application/pdf" (그리고 질문은 자유롭게)

나머지 구조 — base64 source, add_user_message, chat() — 는 이미지 때와 완전히 동일합니다.

PDF 읽기 · 변경점 3곳
# PDF 읽기 — 바꾸는 곳은 단 3군데(아래 하이라이트)
with open("earth.pdf", "rb") as f:
    file_bytes = base64.standard_b64encode(f.read()).decode("utf-8")

messages = []
add_user_message(messages, [
    {"type": "document",
     "source": {"type": "base64",
                "media_type": "application/pdf",
                "data": file_bytes}},
    {"type": "text", "text": "이 문서를 한 문장으로 요약해 줘"},
])
chat(messages)
출력 · 한 문장 요약
[TextBlock(text="이 문서는 지구의 물리적 특성, 대기와
기후, 생명의 진화, 그리고 태양계 내 위치를 개괄하는
위키백과 'Earth' 문서의 발췌입니다.", type="text")]
왜 이렇게 단순할까

Claude의 메시지 형식은 콘텐츠 블록 단위라, 이미지든 문서든 같은 골격typemedia_type만 갈아 끼우면 됩니다.

텍스트만이 아니다

More than text

Claude는 PDF에서 텍스트만 읽는 게 아닙니다. 안에 든 이미지·차트·표도 함께 읽어 냅니다. PDF에서 거의 모든 정보를 꺼내는 원스톱 창구로 생각해도 좋습니다.

핵심 정리
  • PDF 읽기는 이미지 읽기와 거의 같은 코드 — base64 인코딩과 메시지 골격이 동일.
  • 바꾸는 곳 3군데: 파일(earth.pdf) · type(document) · media_type(application/pdf).
  • 질문은 자유 — 예: 한 문장 요약.
  • Claude는 PDF의 텍스트·이미지·차트·표까지 추출한다.

Q1이미지 코드를 PDF용으로 바꿀 때 블록의 type은 무엇으로 바꾸나요?

Q2Claude가 PDF에서 읽어 낼 수 있는 것은?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.