AI 모델마다 툴 호출이 제멋대로 깨지는 이유가 있었음
turns out the reason your tool calls randomly break on some models isn't random
핵심 요약
AI 모델별로 JSON 스키마 제약 조건을 처리하는 방식이 달라 발생하는 오류 해결법을 공유합니다.
- 모델별 오류 유형 — 모델마다 스키마 제약 조건을 무시하거나 오류를 내는 방식이 제각각임
- 해결책 — 프롬프트로 제약 조건을 강제하는 대신 속성 설명(description) 필드로 이동함
- 검증 전략 — 전체 스키마는 유지하되 모델별로 최적화된 런타임 버전을 생성하는 방식이 권장됨
우리 팀원들이 계속 "Claude에서는 되는데 Kimi K3에서는 깨져" 같은 말을 하길래 한동안 이유를 알 수가 없었음.
그래서 16개 모델에 걸쳐 30가지 정도의 서로 다른 스키마 제약 조건을 테스트해 봤는데, 뭐, 모든 제공업체가 각자 멍청한 방식으로 깨지더라고.
- OpenAI 추론 모델은 마음에 안 드는 스키마 속성을 발견하면 그냥 오류를 뱉음.
- Gemini는 더 심함. 솔직히 오류도 안 내고 그냥 조용히 제약 조건을 무시한 채 아무 일 없다는 듯이 계속 진행함. 나중에야 알아차리게 되는데 디버깅하기 진짜 짜증남.
- DeepSeek랑 Llama는 대문자로 강조해서 애원해도 가끔은 그냥 툴 호출 자체를 안 함.
결국 해결책은 허무할 정도로 쉬웠음.
프롬프트랑 씨름하는 대신 제약 조건 텍스트를 속성 설명(description)으로 옮겼을 뿐임.
솔직히 지금은 좀 허무한 기분임.


