"모델한테 'lens.jpg 라는 사진이 있어'라고 말할 순 있어. 그 문장은 사진이 아냐. 모델은 파일 이름을 못 봐."
되는 것처럼 보이는 버그
제일 유혹적인 멀티모달 실패가 이거야. 이미지를 붙이는데, 파이프라인 어딘가에서 코드가 실제 이미지 데이터 대신 User attached: lens.jpg 같은 메시지 — 파일 이름, 어쩌면 크기, 어쩌면 캡션 — 를 모델한테 보내. 모델은 좋은 대화 상대라, 이해한 것처럼 답해: '그 렌즈는 35mm 단렌즈 같네.' 비전이 된 것처럼 보여. 안 됐어. 모델은 lens.jpg 라는 단어를 보고, 실제로 본 적 없는 렌즈에 대해 그럴듯한 답을 즉흥으로 지은 거야. 버그가 안 보이는 건 정확히, 모델이 유능한 척할 만큼 예의 바르기 때문이야.
비전이 실제로 요구하는 것
모델이 이미지를 진짜로 보려면, 세 가지가 adapter 에 함께 닿아야 해:
- 바이트. 진짜, 디코딩된 이미지 데이터 — 경로도, 모델이 못 가져오는 URL 도, 묘사도 아니라.
- media type.
image/jpeg,image/png등, 바이트가 올바로 해석되게(다음 레슨들이 이걸 파). - 올바른 배치. 이미지가 adapter 가 기대하는 모양으로, 요청의 이미지 파트로 배달돼 — 텍스트에 mention 으로 밀수되는 게 아니라.
그보다 덜하면 비전이 아냐. 파일 이름, 캡션, alt-text, '[여기 이미지]' 토큰 — 이건 이미지에 대한 텍스트고, 이미지에 대한 텍스트는 비전 모델한테 딱 전화로 읽어준 묘사만큼 유용해: 없는 것보단 낫고, 보는 거랑은 범주적으로 달라.
보조 vs 대체
해법은 파일 이름이랑 캡션을 금지하는 게 아냐 — 진짜 바이트랑 나란히 진짜로 유용한 보조 컨텍스트일 수 있어. 규칙은 그것들이 절대 바이트의 대체가 되면 안 된다는 거야. 실제 이미지 데이터를 이미지로 보내고, 파일 이름도 힌트로 넣고 싶으면, 괜찮아. 실패는 힌트가 데이터 대신 다닐 때, 그리고 예의 바른 모델이 그 틈을 너무 잘 덮어서 아무도 눈이 안 떠졌던 걸 눈치 못 챌 때야. '모델이 이미지에 대해 답했다'를 이미지를 봤다는 증거로 0 으로 다뤄; 유일한 증거는 진짜 바이트가 adapter 에 닿은 거야.