DEV Community

Cover image for GLM-5.3-Flash Vision: 1M 컨텍스트 모델로 이미지 전송
Rihpig
Rihpig

Posted on Originally published at apidog.com

GLM-5.3-Flash Vision: 1M 컨텍스트 모델로 이미지 전송

대부분의 비전 모델은 선택을 요구합니다. 이미지를 보낼 수도 있고 많은 텍스트를 보낼 수도 있지만, 한 가지를 잘하는 모델은 다른 것을 잘하지 못하는 경우가 많습니다.

오늘 Apidog 사용해 보기

GLM-5.3-Flash는 1,048,576토큰 컨텍스트 창에서 이미지와 텍스트를 동일한 콘텐츠 블록으로 처리합니다. 이미지 입력과 100만 토큰 컨텍스트를 함께 사용하면, 단일 기능 모델로는 어려웠던 워크플로를 구현할 수 있습니다.

이 글에서는 요청 페이로드, 구현 가치가 있는 워크플로, 검증이 필요한 한계를 정리합니다.

어댑터가 아닌 네이티브 멀티모달 방식

Z.ai의 기존 비전 모델인 GLM-5V-Turbo와 GLM-4.6V는 별도 모델 ID와 엔드포인트를 사용했습니다. 즉, 텍스트와 이미지 트래픽을 분리해 라우팅해야 했습니다. GLM-5.3도 이미지를 네이티브로 처리하지 않고 어댑터를 통해 비전을 처리합니다.

GLM-5.3-Flash는 GLM-5 시리즈에서 이미지와 텍스트가 같은 호출, 같은 컨텍스트, 같은 모델 안에서 처리되는 첫 번째 모델입니다.

실무적으로는 다음을 의미합니다.

  • 하나의 모델 ID
  • 하나의 청구 항목
  • 하나의 속도 제한 정책
  • 이미지와 텍스트를 함께 담는 하나의 컨텍스트 창

기존 비전 모델을 사용 중이라면 GLM-5V-Turbo API 가이드GLM-4.6V 가이드를 참고하세요.

페이로드

이미지 입력은 타입이 지정된 콘텐츠 블록으로 전달합니다. content는 문자열이 아니라 배열입니다.

from openai import OpenAI
import os

client = OpenAI(
    [REDACTED CREDENTIAL],
    base_url="https://api.z.ai/api/paas/v4/",
)

response = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What is wrong with this layout on mobile?"},
                {
                    "type": "image_url",
                    "image_url": {"url": "https://example.com/mobile-view.png"},
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

로컬 또는 비공개 이미지는 base64 데이터 URL로 전달합니다.

import base64
from pathlib import Path

def image_block(path: str) -> dict:
    data = base64.b64encode(Path(path).read_bytes()).decode("utf-8")
    suffix = Path(path).suffix.lstrip(".").replace("jpg", "jpeg")
    return {
        "type": "image_url",
        "image_url": {"url": f"data:image/{suffix};base64,{data}"},
    }
Enter fullscreen mode Exit fullscreen mode

여러 이미지는 여러 콘텐츠 블록으로 추가합니다.

content = [
    {"type": "text", "text": "Image 1 is the design. Image 2 is what we built. List the differences."},
    image_block("design.png"),
    image_block("built.png"),
]
Enter fullscreen mode Exit fullscreen mode

블록 순서가 중요합니다. 모델은 배열 순서대로 읽으므로, 이미지 앞에 맥락을 설명하는 텍스트를 두고 이미지마다 명확한 레이블을 지정하세요. 예를 들어 "이미지 1은 디자인입니다"라고 지정하면 모델이 답변을 올바르게 연결하기 쉬워집니다.

기본 설정과 인증은 GLM-5.3-Flash API 가이드에서 확인할 수 있습니다.

구축할 가치가 있는 워크플로

스크린샷 디버깅

Z.ai는 모델이 인터페이스, 렌더링 결과, 상호작용 피드백을 관찰하도록 설계되었다고 설명합니다. 따라서 단순한 이미지 설명보다 코딩 에이전트 워크플로에 적합합니다.

깨진 화면과 해당 소스를 한 요청에 넣으세요.

content = [
    {"type": "text", "text": "This component renders incorrectly below 400px. Here is the screenshot and the source."},
    image_block("bug-mobile.png"),
    {"type": "text", "text": f"```
{% endraw %}
jsx\n{component_source}\n
{% raw %}
```"},
]
Enter fullscreen mode Exit fullscreen mode

이 방식은 사람이 시각적 문제를 말로 번역하는 과정에서 발생하는 정보 손실을 줄입니다. 모델은 설명이 아니라 실제 렌더링 결과를 기준으로 추론합니다.

디자인 비교

두 이미지와 비교 기준을 함께 보냅니다. 픽셀 diff 도구가 변경 사항을 찾고, 모델이 그 변경이 의미 있는지 판단하도록 구성하면 CI에서 시각적 회귀를 분류하는 데 유용합니다.

다만 모델의 비교 결과는 단언이 아니라 판단입니다. 모델 결과만으로 배포를 차단하기보다, 사람이 검토할 diff를 우선순위화하는 용도로 사용하세요.

문서와 사양서 대조

1M 컨텍스트는 긴 사양서와 렌더링 결과를 하나의 요청에서 비교할 때 특히 유용합니다.

content = [
    {"type": "text", "text": f"Specification:\n\n{spec_text}"},
    {"type": "text", "text": "Below is the generated report. Does it satisfy every requirement above? List gaps."},
    image_block("generated-report.png"),
]
Enter fullscreen mode Exit fullscreen mode

40페이지 사양서와 이미지를 하나의 프롬프트에 넣는 작업은 128K 컨텍스트와 어댑터 기반 비전을 가진 모델에서는 어렵습니다. 이것이 네이티브 멀티모달 1M 컨텍스트의 실질적인 장점입니다.

Z.ai의 릴리스 노트는 사무 문서와 금융 연구 워크플로도 에이전트 행동의 주요 활용 사례로 언급합니다.

차트 및 대시보드

차트 이미지에서 구조화된 데이터를 추출할 때는 JSON만 반환하도록 요청하고, 반드시 결과를 검증하세요.

content = [
    {"type": "text", "text": "Extract the series in this chart as JSON: [{label, values: [...]}]. Return only JSON."},
    image_block("quarterly.png"),
]
Enter fullscreen mode Exit fullscreen mode

차트 읽기는 모델이 확신에 찬 잘못된 숫자를 만들 수 있는 작업입니다. 스키마 검증은 값 자체의 오류를 모두 잡지는 못하지만, 출력 형식 오류를 방지합니다.

전용 문서 추출이 필요하다면 범용 모델보다 전문 모델이 더 적합할 수 있습니다. 문서 이해를 위한 GLM-OCR도 검토하세요.

비디오 및 파일 입력

Z.ai 문서는 이미지뿐 아니라 비디오와 파일도 같은 콘텐츠 블록 메커니즘으로 입력할 수 있다고 안내합니다.

하지만 비디오 지원은 새롭고 공개 검증 사례가 이미지 입력보다 적습니다. 모델이 지원하는 기능과 현재 사용하는 게이트웨이가 지원하는 기능은 다를 수 있습니다.

비디오가 핵심 요구사항이라면 설계 전에 자체 미디어와 실제 공급업체 경로에서 직접 테스트하세요. 기능 표의 한 줄만으로 운영 가능하다고 판단하면 안 됩니다.

알아야 할 한계

네이티브 멀티모달리티가 곧 안정적인 멀티모달리티를 의미하지는 않습니다. 출시 전 다음 네 가지 실패 모드를 고려하세요.

차트에서 읽은 확신에 찬 숫자

그래프의 값을 읽는 작업은 유창하고 형식은 맞지만 실제로는 틀린 답변을 생성하기 쉽습니다. 숫자가 중요하다면 이미지가 아니라 원본 데이터에서 가져오세요.

작은 텍스트

고밀도 UI 스크린샷, 저해상도 표, 압축된 이미지 속 코드는 정확도가 떨어질 수 있습니다. 비용 절감을 위한 다운스케일링은 문제를 악화시킬 수 있으므로, 전체 이미지를 축소하기보다 필요한 영역을 잘라내세요.

공간 정밀도

모델은 레이아웃 문제를 설명하는 데는 강하지만 정확한 측정에는 약합니다. "버튼이 입력 상자와 겹칩니다"는 대체로 신뢰할 수 있지만, "버튼이 왼쪽으로 12픽셀 너무 멉니다"는 신뢰하기 어렵습니다.

순서 및 참조 혼동

한 요청에 여러 이미지를 넣으면 세부 사항을 잘못된 이미지에 연결할 수 있습니다. 텍스트 블록으로 이미지를 명시적으로 레이블링하고, 정밀성이 중요할수록 한 요청의 이미지 수를 줄이세요.

이 한계는 GLM-5.3-Flash에만 해당하지 않습니다. 이는 비전 언어 모델의 일반적인 한계이며, 57 Intelligence Index 점수도 이를 해결하지는 않습니다. 잘못된 답변이 그대로 실행되지 않도록 검증 단계를 워크플로에 넣으세요.

비용

이미지는 컨텍스트 토큰을 소비하며 입력 토큰으로 청구됩니다. 별도 이미지 추가 요금은 없습니다.

정가 기준 입력 100만 토큰당 비용은 $0.15이며, 2026년 9월 9일까지 적용되는 출시 할인 기간에는 $0.075입니다. 고해상도 이미지는 많은 토큰을 소비하므로, 해상도는 직접적인 비용 레버입니다.

reasoning_effort의 기본값은 max이며, 추론은 출력 토큰으로 청구됩니다. 이미지에서 직접 정보를 추출하는 작업은 보통 low로 충분하며 비용도 줄일 수 있습니다. 자세한 내용은 GLM-5.3-Flash 가격 분석에서 확인하세요.

이미지 비용 관리

다음 순서로 최적화하세요.

  • 축소 전에 자르기: 전체 화면을 절반 해상도로 보내기보다 필요한 영역만 원래 해상도로 보내세요.
  • 질문에 맞는 해상도 사용: "레이아웃이 깨졌습니까?"는 강한 다운스케일링에서도 판단할 수 있지만, "이 오류 메시지는 무엇을 의미합니까?"는 그렇지 않습니다.
  • 같은 이미지를 재전송하지 않기: 다중 턴 대화에서 이미 보낸 이미지는 컨텍스트에 남아 있습니다. 매 턴 다시 첨부하면 매번 비용이 발생합니다.
  • reasoning_effort 명시하기: 기본값은 max입니다. 단순 추출에는 보통 필요하지 않습니다.

응답의 usage 객체를 기록하세요. 파일 크기만으로 추정하는 대신, 호출별 실제 토큰 사용량과 이미지 비용을 확인할 수 있습니다.

다중 모달 호출 테스트

다중 모달 요청은 수동 테스트가 불편합니다. base64 데이터 URL은 수천 자에 달해 curl 명령을 읽고 수정하기 어렵고, 자유 형식 텍스트 응답은 회귀를 놓치기 쉽습니다.

다음 두 가지를 운영 기준으로 삼으세요.

  1. 작은 고정 참조 이미지 세트와 예상 답변을 유지합니다.
  2. 구조화된 추출 결과는 육안 확인 대신 스키마로 검증합니다.

Apidog을 사용하면 저장된 요청에 이미지 페이로드를 보관하고, API 키는 환경 변수로 관리하며, JSON 추출 결과에 어설션을 추가할 수 있습니다. 모델을 변경하거나 공급업체가 업데이트했을 때 테스트 스위트를 다시 실행하면, 사용자가 문제를 발견하기 전에 비전 경로의 회귀를 확인할 수 있습니다.

FAQ

GLM-5.3도 이미지를 지원하나요?

기본적으로는 지원하지 않습니다. GLM-5.3은 별도 어댑터로 비전을 처리하고, Flash는 네이티브 멀티모달 모델입니다. 자세한 차이는 GLM-5.3-Flash와 GLM-5.3 비교에서 확인할 수 있습니다.

요청당 이미지 수 제한은 있나요?

여러 이미지를 보낼 수 있으며, 각각 별도의 image_url 블록으로 구성합니다. 실제 제한은 컨텍스트 예산입니다.

URL과 base64 중 무엇을 사용해야 하나요?

둘 다 지원합니다. 이미 호스팅되어 접근 가능한 이미지는 공개 URL을 사용하고, 로컬 또는 비공개 이미지는 base64를 사용하세요.

비디오도 지원하나요?

Z.ai는 비디오 입력을 문서화했지만, 아직 새롭고 공개 검증 사례가 적습니다. 자체 미디어와 공급업체 경로에서 먼저 확인하세요.

이미지에 별도 비용이 있나요?

추가 요금은 없습니다. 다만 이미지가 입력 토큰을 소비하므로 해상도가 비용에 직접 영향을 줍니다.

Top comments (0)