CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API
Claude의 기능
PDF support
Claude는 이미지뿐 아니라 PDF 파일에서도 내용을 직접 읽습니다. 놀라운 점은 코드가 이미지 때와 거의 똑같다는 것 — 바꾸는 곳은 단 세 군데입니다. 파일 열기를 earth.pdf로, 블록 type을 image→document로, media_type을 application/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분PDF 읽기 = 이미지 읽기와 거의 같은 코드
파일 열기를 earth.pdf로 (변수 image_bytes→file_bytes)
블록 type: image → document
media_type: image/png → application/pdf
질문은 자유롭게 — 예: "한 문장으로 요약"
Claude는 PDF의 텍스트·이미지·차트·표까지 추출
image 블록과 짝을 이룹니다.media_type. 이미지의 image/png 자리에 들어갑니다.data에 싣는 방식. 이미지·PDF 모두 동일합니다.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)
파일을 earth.pdf로 열고, 블록 type을 document로, media_type을 application/pdf로. 질문은 자유롭게 — 여기서는 한 문장 요약을 부탁합니다.
아래 버튼을 켜면 이미지 코드와 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}, ])
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": "한 문장으로 요약"}, ])
파일 — images/prop_7.png → earth.pdf (변수도 image_bytes→file_bytes)
블록 type — "image" → "document"
media_type — "image/png" → "application/pdf" (그리고 질문은 자유롭게)
나머지 구조 — base64 source, add_user_message, chat() — 는 이미지 때와 완전히 동일합니다.
# 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의 메시지 형식은 콘텐츠 블록 단위라, 이미지든 문서든 같은 골격에 type과 media_type만 갈아 끼우면 됩니다.
Claude는 PDF에서 텍스트만 읽는 게 아닙니다. 안에 든 이미지·차트·표도 함께 읽어 냅니다. PDF에서 거의 모든 정보를 꺼내는 원스톱 창구로 생각해도 좋습니다.
earth.pdf) · type(document) · media_type(application/pdf).Q1이미지 코드를 PDF용으로 바꿀 때 블록의 type은 무엇으로 바꾸나요?
type은 document, media_type은 application/pdf로 바꿉니다. 나머지 골격은 이미지와 동일.
Q2Claude가 PDF에서 읽어 낼 수 있는 것은?
Claude는 PDF 속 텍스트·이미지·차트·표를 모두 읽어 정보 추출의 원스톱 창구가 됩니다.
PDF에서 답을 얻었지만, 사용자는 Claude가 어디서 그 답을 가져왔는지 알 수 없습니다. 다음 장에서는 응답을 출처 문서의 특정 부분으로 되짚는 인용(Citations)을 켭니다. → 인용(Citations)
전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.
이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.