TL;DR
Anthropic Messages API에서 tools[].strict=true 환경에서 입력 스키마가 $ref로 서브스키마를 참조할 때 constrained decoder가 동일 호출 내에서 모델의 reasoning과 상충하는 값을 반환하는 버그가 보고되었다. 작성자는 재현 저장소와 간단한 JSON 예시를 제시하며 이 출력이 이후 컨텍스트를 오염시켜 수천 토큰의 피해를 유발할 수 있음을 지적했다. 해결책으로 grammar compiler에서 서브스키마를 인라인화할 것을 권고하고, 이미 피해를 본 고객에 대한 환불 검토를 요구했다.
커뮤니티 반응
원글은 Anthropic 서브레딧에도 게시되었으나 반응이 크지 않았다고 작성자는 전했다. Fin을 제외하면 Anthropic 측의 주목을 끌 방법이 제한적이라는 불만이 제기되었다. 작성자는 이 문제를 심각한 버그로 간주하며 더 많은 검토와 시정을 촉구했다.
주요 논점
tools[].strict와 $ref 조합에서 constrained decoder가 스키마를 제대로 적용하지 못해 동일 호출 내에서 모순된 출력을 생성한다는 점은 재현 가능한 버그이며 실사용에 심각한 피해를 유발한다.
grammar compiler에서 서브스키마를 인라인화하면 참조 해석 단계에서 발생하는 불일치를 제거해 constrained decoder가 스키마 제약을 일관되게 적용할 가능성을 높일 수 있다.
버그로 인해 이미 피해를 본 고객들에 대한 환불 검토가 합당하며, 오류가 컨텍스트를 오염시키는 특성상 단순한 경고만으로는 적절한 조치가 되지 않는다.
합의점 vs 논쟁점
합의점
- 게시글은 재현 저장소와 간단한 예시를 통해 문제가 실제로 발생함을 입증해 보였다.
논쟁점
- 버그에 대한 환불 요구는 비용·정책 측면에서 논쟁의 여지가 있으며 회사 차원의 결단이 필요하다.
실용적 조언
- 현재 상태에서는 tools[].strict=true와 $ref 참조가 동시에 사용되는 입력 스키마를 피하는 것이 위험을 줄이는 단기적인 방책이다. 호출 설계를 변경해 서브스키마를 미리 펼쳐 넣거나 $ref 없이 단일 스키마로 제공하면 constrained decoder가 적용되는 경로를 단순화할 수 있다. 또한 재현 저장소를 기반으로 자체 테스트를 수행해 동일한 모순 사례가 발생하는지 확인해야 한다.
- 장기적으로는 grammar compiler에서 참조를 인라인화하는 방식을 도입해 스키마를 컴파일 단계에서 완전한 형태로 생성하도록 만드는 것을 권장한다. 이 방식은 constrained decoder가 실제 적용해야 할 제약을 명시적으로 받게 하므로 검증 실패를 조기에 탐지할 가능성을 높인다. 변경 전후의 출력과 토큰 사용량을 비교해 문제가 해결되었는지 측정해야 실무적 신뢰를 확보할 수 있다.
섹션별 상세
용어 해설
- tools의 strict 플래그(tools[].strict = true)
- — Anthropic Messages API에서 tools 배열 항목에 strict=true를 설정하면 입력 스키마에 맞추어 출력을 제한하려는 동작이 활성화된다. 게시글은 이 모드가 $ref로 참조된 서브스키마를 포함한 경우에도 검증 실패 신호 없이 모순된 값을 반환했다고 보고했다. 문제는 strict가 안전성을 높여야 할 상황에서 오히려 유해한 출력을 생성했다는 점이다.
- $ref (JSON Schema 참조)({"$ref": "#/$defs/..."})
- — 입력 스키마가 하나의 서브스키마를 $ref로 참조하도록 구성되면 원래 정의는 별도 $defs에 보관된다. 원글은 이 구성에서 constrained decoder가 참조된 서브스키마를 올바르게 반영하지 못하고, 동일 툴 호출 내에서 모델의 reasoning과 상충하는 필드 값을 내보냈다고 보고했다. 참조 기반 스키마가 문제의 원인으로 지목됐다.
- 스키마 제약 디코더(constrained decoder)
- — constrained decoder는 tools.strict 모드에서 모델 출력이 입력 스키마를 따르도록 강제하는 구성 요소이다. 게시글에 따르면 이 디코더가 $ref를 포함한 서브스키마를 처리할 때 오류 없이 모순된 값을 생성했다. 그 결과 모델 추론의 일부 값이 스키마와 일치하지 않는 상태로 downstream 컨텍스트에 포함되었다.
- 서브스키마 인라인화(inline subschemas)
- — 원글은 grammar compiler에서 $ref로 분리된 서브스키마를 인라인으로 풀어넣는 방식으로 문제를 해결할 것을 권고했다. 인라인화는 참조 해석 단계와 스키마 적용 로직을 단순화해 constrained decoder가 실제 제약을 적용할 가능성을 높인다. 이 방식은 구현상 컴파일러가 입력 스키마를 펼쳐서 직접 처리하도록 만드는 방법이다.
코드 예제
{"reasoning": "A ripe banana is yellow.", "verdict": "purple"}이 JSON 예시는 문제를 매우 단순화해 보여준다. 모델의 reasoning 필드에는 'A ripe banana is yellow.'라는 합리적 진술이 들어있고 같은 호출의 출력에 들어간 verdict는 'purple'로 모순된 값을 가리킨다. 게시글은 이처럼 스키마 제약을 활성화했는데도 내부적으로 서로 모순되는 필드가 동시에 생성되는 현상을 재현할 수 있다고 보고했다.
언급된 도구
Anthropic에 주목을 끌기 위한 채널
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.