본문 바로가기
C.W.K.
Stream
Lesson 02 of 06 · published

이미지는 질문에 필요한 크기만 보내

~14 min · vision, images, multimodal

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

바이트나 URL로 image 블록을 만들어

이미지는 image 콘텐츠 블록으로 넣어. 로컬 파일은 source: {type: 'base64', media_type: 'image/png', data: ...}처럼 base64 바이트를 보내고, 이미 CDN에 있는 자산은 source: {type: 'url', url: ...}로 참조할 수 있어.

해상도가 토큰 비용을 키워

이미지 비용은 크기에서 계산한 토큰 수를 따라가므로 큰 사진일수록 비싸. OCR이나 일반 물체 설명에는 폭 1024픽셀 정도로 줄인 사진이 충분한 경우가 많아. 4K 원본이 답의 정확도를 높이지 않는다면 남는 픽셀은 그대로 낭비야.

강한 질문과 약한 질문을 구분해

Claude는 차트와 표 읽기, 도식 해석, 장면 설명, UI와 문서 배치, 화면 속 코드 이해에 강해. 정확한 픽셀 좌표나 비슷한 물체의 대량 계수, 아주 세밀한 공간 추론은 덜 안정적이야. 필요한 능력에 맞춰 질문과 검증 방법을 정해.

원칙: 질문에 답할 수 있는 가장 작은 이미지를 보내. 크기 조절 한 줄이 즉시 비용을 줄여.

Code

Base64로 로컬 PNG 보내기·python
import base64, pathlib

data = base64.standard_b64encode(pathlib.Path("chart.png").read_bytes()).decode()

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "image", "source": {
                    "type": "base64",
                    "media_type": "image/png",
                    "data": data,
                }},
                {"type": "text", "text": "Read off the y-axis values for the bars."},
            ],
        }
    ],
)
보내기 전 resize·python
from PIL import Image
import io, base64

img = Image.open("photo.jpg")
img.thumbnail((1024, 1024))  # long side에 1024 bound
buf = io.BytesIO()
img.save(buf, format="JPEG", quality=85)
data = base64.standard_b64encode(buf.getvalue()).decode()
# 이제 `data`를 image source로 보내

External links

Exercise

비전 기능 하나에 긴 변을 1024픽셀로 제한하는 크기 조절 단계를 넣어. 표본 10개의 토큰 사용량과 답 품질을 전후 비교해.
Hint
1024에서 품질이 떨어지면 1536이나 2048로 올려. 그보다 큰 원본이 필요한 경우는 드물어.

Progress

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

댓글 0

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

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