"모델한테 'lens.jpg 라는 사진이 있어' 라고 말할 순 있어. 근데 그 문장은 사진이 아냐. 모델은 파일 이름을 볼 수가 없거든."
되는 것처럼 보이는 버그
멀티모달에서 제일 솔깃하게 사람을 속이는 실패가 이거야. 이미지를 붙였는데, 파이프라인 어딘가에서 코드가 실제 이미지 데이터 대신 User attached: lens.jpg 같은 메시지를 모델한테 보내. 파일 이름에 크기나 캡션 정도가 붙은 문장을. 모델은 워낙 상냥한 대화 상대라 알아들은 것처럼 답하고. '그 렌즈는 35mm 단렌즈 같네.' 비전이 된 것처럼 보이지. 안 된 거야. 모델은 lens.jpg 라는 글자를 보고, 본 적도 없는 렌즈에 대해 그럴듯한 답을 즉석에서 지어낸 거거든. 이 버그가 안 보이는 이유는 딱 하나야. 모델이 유능한 척해 줄 만큼 예의 바르다는 거.
비전이 실제로 요구하는 것
모델이 이미지를 진짜로 보려면 세 가지가 adapter 까지 같이 닿아야 해.
- 바이트. 진짜로 디코딩된 이미지 데이터. 경로도 아니고, 모델이 가져올 수도 없는 URL 도 아니고, 설명도 아니고.
- media type.
image/jpeg나image/png같은 거. 바이트를 제대로 해석하라고 붙여 주는 거야. 뒤 레슨에서 더 파고들고. - 제자리에 넣기. 이미지는 adapter 가 기대하는 모양대로 요청의 이미지 파트에 실려야 해. 텍스트 안에 슬쩍 언급으로 끼워 넣는 게 아니라.
이보다 모자라면 비전이 아냐. 파일 이름, 캡션, alt 텍스트, '[여기 이미지]' 토큰. 이건 전부 이미지에 대한 텍스트야. 그리고 이미지에 대한 텍스트는 비전 모델한테, 전화로 읽어 준 설명만큼만 쓸모 있어. 없는 것보단 낫지만 직접 보는 거랑은 아예 종류가 다르지.
곁다리냐 대체냐
해법이 파일 이름이랑 캡션을 금지하는 건 아냐. 진짜 바이트 옆에 나란히 있으면 꽤 쓸모 있는 곁다리 정보거든. 규칙은 그것들이 절대 바이트를 대신하면 안 된다는 거야. 실제 이미지 데이터를 이미지로 보내면서 파일 이름도 힌트로 얹고 싶으면, 그건 괜찮아. 문제가 되는 건 힌트가 데이터 대신 갈 때야. 그리고 예의 바른 모델이 그 빈틈을 너무 잘 메워 줘서, 눈이 애초에 안 떠졌다는 걸 아무도 눈치 못 챌 때고. '모델이 이미지에 대해 답했다' 는 걸 이미지를 봤다는 증거로 치지 마. 증거는 딱 하나야. 진짜 바이트가 adapter 에 닿았다는 것.