비전 기능이 있는 LLM에는 텍스트 문자열 하나 대신, 텍스트와 image_url 객체를 담은 content 배열을 보낸다. 이 형식은 스크린샷 분석, 영수증 OCR, 차트 질의처럼 이미지와 질문을 함께 처리할 때의 공통 출발점이다.
가장 작은 요청 형식
OpenAI 호환 Chat Completions API의 메시지는 다음처럼 구성한다. 모델명과 엔드포인트만 제공사에 맞게 바꾸면 된다.
{
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "영수증의 합계를 알려줘."},
{"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
]
}]
}URL과 Base64 중 선택하기
| 이미지 위치 | 권장 방식 | 이유 |
|---|---|---|
| 공개 CDN·접근 가능한 서명 URL | HTTPS URL | 요청이 작고 공급자가 이미지를 가져간다 |
| 로컬 파일·내부 문서 | Base64 data URL | 별도 공개 URL이 필요 없다 |
| 만료 가능성이 큰 URL | Base64 또는 수명 관리 | 모델이 이미지를 읽기 전에 URL 접근이 실패할 수 있다 |
import base64
with open("receipt.jpg", "rb") as f:
data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()Base64는 페이로드를 키우므로 큰 파일을 무작정 넣기보다, 질문에 필요한 부분을 자르거나 해상도를 조정한다. 다만 작은 글자·차트·UI는 과도한 축소로 정보가 사라질 수 있다.
여러 이미지와 문서 RAG
여러 페이지는 image part를 여러 개 넣을 수 있지만 이미지 수와 토큰 비용은 모델별로 다르다. 긴 문서 검색에서는 (1) 이미지 내용을 텍스트로 요약해 텍스트 임베딩으로 찾거나, (2) 멀티모달 임베딩으로 이미지와 텍스트를 함께 색인한 뒤, 검색된 텍스트와 원본 이미지를 비전 모델에 전달한다. 실제 영수증·의료·신분증 데이터는 API 전송, 보관, 접근 권한 정책을 먼저 검토해야 한다.
관련 문서
- llm-vision-tips-image-detail — 이미지 detail과 비용·정확도의 관계
- modern-vlms — 비전 언어 모델의 기능과 선택 기준
- rag-anything — 이미지·표·텍스트를 함께 다루는 멀티모달 RAG
참고 자료
- How to Send an Image to an LLM via API (Vision Guide) — OpenRouter (2026-08-14)