
멀티 LLM 서비스를 개발하다 보면 모델마다 이미지 입력 방식이 서로 다르다는 걸 알게 된다.
처음에는 단순히
“이미지를 같이 보내면 되겠지?”
라고 생각했는데 실제로는 Provider마다 request 구조가 완전히 다르다.
또한 여러 방식을 지원하는 경우도 있지만, 바이너리를 그대로 보내면 그만큼 토큰도 더 많이 사용하게 되고 메모리도 사용되기 때문에,
상황에 따라 어떤 방식으로 전송하는 것이 좋을지 판단하는 것이 중요하다.
대표적인 차이는 다음 세 가지다.
- 이미지 전달 방식 (Binary vs URL)
- request payload 구조
- 문서(PDF 등) 입력 지원 여부
그래서 스스로도 한 번 정리할 겸.. AWS Bedrock(Claude), Azure OpenAI(GPT), Google Vertex AI(Gemini)의
이미지 입력 방식 차이를 끄적여봐야겠다.🤨
전체 비교
| Provider | 대표 모델 | 이미지 전달 방식 | request 구조 | 문서(PDF 등) 지원 |
| AWS Bedrock | Claude | Binary | image.bytes | 가능 |
| Azure OpenAI | GPT | URL | image_url | 미지원 |
| Google Vertex AI | Gemini | URL | image_url / media |
PDF만 지원
|
- Claude → 이미지 Binary 전달
- GPT / Gemini → 이미지 URL 전달
* 실제 구현 시 request 구조가 꽤 다르기 때문에 멀티 LLM 서비스에서는 별도의 처리 로직 필요
1. AWS Bedrock (Claude)
Claude 모델은 이미지를 바이너리(Binary) 형태로 직접 전달해야 한다.
즉, 이미지 URL을 보내는 것이 아니라,
이미지 파일 자체를 request에 포함해야 한다.
예시 request 구조
{
"image": {
"format": "png",
"source": {
"bytes": "<image_binary>"
}
}
}
특징
- 이미지 Binary 데이터 직접 전달
- 이미지 포맷(png, jpeg 등)을 명시해야 함
- 문서 파일(PDF 등)도 Binary 방식으로 전달 가능
예를 들어 PDF를 전달하는 경우 구조는 다음과 비슷하다.
{
"document": {
"format": "pdf",
"source": {
"bytes": "<file_binary>"
}
}
}
즉 Claude는 이미지와 문서를 모두 파일 자체로 전달하는 방식이다.
2. Azure OpenAI (GPT)
GPT 계열 모델은 Claude와 다르게 이미지 URL을 전달하는 방식을 사용한다.
이미지 파일을 직접 보내지 않고
모델이 접근 가능한 URL을 전달하면 모델이 직접 다운로드한다.
예시 request 구조
{
"type": "image_url",
"image_url": {
"url": "https://cdn.example.com/image.png"
}
}
특징
- 이미지 URL 방식
- 별도의 이미지 포맷 지정 불필요
- 모델이 URL에서 직접 이미지 다운로드
실무 흐름 예시
이미지 업로드 → CDN URL 생성 → LLM에 URL 전달
문서 파일 처리
GPT 모델은 PDF 같은 파일을 직접 전달하는 기능이 제한적이기 때문에 아래와 같은 방식으로 처리 가능하다.
PDF → 텍스트 추출 → LLM에 텍스트로 전달
3. Google Vertex AI (Gemini)
Gemini 역시 이미지 URL 방식을 사용한다.
기본적인 request 구조는 GPT와 비슷하다.
{
"type": "image_url",
"image_url": {
"url": "https://cdn.example.com/image.png"
}
}
특징
- 이미지 URL 전달 방식
- 모델이 직접 이미지 다운로드
- 일부 모델에서는 다른 media 구조 사용
예를 들어 이미지 생성 모델에서는 다음과 같은 구조를 사용한다.
{
"type": "media",
"mime_type": "image/png",
"file_uri": "https://cdn.example.com/image.png"
}
문서 입력
Gemini는 PDF를 URL 형태로 전달하는 방식을 지원한다.
{
"type": "media",
"mime_type": "application/pdf",
"file_uri": "https://cdn.example.com/file.pdf"
}
핵심 차이 정리
세 Provider의 가장 큰 차이를 정리해 보자면..
| 항목 | Claude | GPT | Gemini |
| 이미지 전달 방식 | Binary | URL | URL |
| 이미지 key | image | image_url | image_url / media |
| 이미지 데이터 | bytes | URL | URL |
| 문서 전달 | Binary | 미지원 | PDF URL |
결론
멀티 LLM 서비스를 개발하면서 느낀 점은..
모델마다 입력 방식이 생각보다 많이 다르다는 것이다~~!
특히 이미지 처리에서는 다음 차이를 반드시 고려해야 한다.
1️⃣ 이미지 전달 방식
Claude → Binary
GPT → URL
Gemini → URL
2️⃣ request payload 구조
Provider마다 content schema가 다르다.
3️⃣ 문서 입력 방식
Claude → 파일 직접 전달
GPT → 텍스트 변환
Gemini → PDF URL
따라서 여러 LLM을 동시에 사용하는 시스템에서는
Provider별 입력 변환 로직을 두는 것이 거의 필수적이다.
'Python' 카테고리의 다른 글
| SQS 장시간 작업 처리 (0) | 2025.04.18 |
|---|---|
| LLM Multi-Provider 아키텍처 설계 (Registry + Strategy 패턴) (0) | 2025.04.10 |
| Flask + LangGraph 환경에서 LLM Streaming 처리 구조 (0) | 2025.03.27 |
| LLM 시스템 프롬프트 캐싱 구조 (0) | 2024.03.09 |
| [Anaconda Prompt] 파이썬 아나콘다 & 케라스 설치 / tensorflow 설치 시 에러 (0) | 2023.03.20 |