Strict 모드도 놓치는 거 있어
Structured-output strict 모드가 JSON syntactic validity 보장. 값이 semantically valid는 보장 X: enum mismatch, range 밖 값, business-rule 위반. validator와 repair loop 여전히 필요.
패턴
- Generate.
- Pydantic / Zod / JSON Schema validator로 semantic rule 가지고 validate.
- Invalid면 모델한테 validation error 보내고 fix 요청.
- Retry cap — 보통 2나 3.
- 여전히 invalid면 user한테 structured error.
이게 prompt 이슈인 이유
Repair loop는 프롬프트가 validation rule 미리 설명하면 cheap. "reason_codes는 enum [low_confidence, missing_evidence, policy_block, ok]에서 와야; 적용 enum 값 없으면 'ok' notes 있게 써"가 모델이 rejection으로 rule discover하게 두는 것보다 훨씬 cheap.