사다리
G1 Schema — does the JSON parse and match the type? ↓ pass G2 Range — are numeric scores in [1,5], probabilities in [0,1]? ↓ pass G3 Grounding — is each finding backed by evidence in the input? ↓ pass G4 Consistency — do the findings imply the score? ↓ pass output accepted
각 게이트는 다음 단계보다 저렴합니다. G1은 Pydantic 검증, G2는 수치 검사입니다. G3는 verifier LLM이 입력을 다시 읽고 인용된 각 사실을 확인합니다. G4는 verifier LLM이 점수가 findings로부터 따라 나오는지 묻습니다. G1이 이미 실패했다면 G4 비용은 지불하지 않습니다.
검증 엔진
core/verification/engine.py가 사다리를 오케스트레이션합니다.core/verification/guardrails.py는 GuardrailType enum과 타입별 validator를 정의합니다.
실패 시 동작
실패는 VERIFICATION_FAIL 훅을 발화시키며, AgenticLoop의ErrorRecoveryStrategy가 이를 잡을 수 있습니다. 기본 복구는 모델에 구조화된 re-ask를 보냅니다.
- 위반된 규칙
- 실패한 정확한 필드
- 기대 형태 (정답을 흘리지 않는 선에서)
최대 N회 재시도 (설정 가능). 그 이상은 analyst 출력이 analyst_failed로 표시되고 synthesizer가 해당 기여자를 건너뜁니다.
가드레일이 다루지 않는 영역
가드레일은 출력의 형상과 방어 가능성을 검사합니다. 편향 검사는 다루지 않습니다. 편향과 도메인별 캘리브레이션은 외부 도메인 플러그인의 책임입니다. cross_llm.md 템플릿이 독립 재스코어링으로 제공하는 Cross-LLM 일관성도 별도 검증 계층입니다.
원인 분류 (synthesizer 잠금)
검증 후 별도의 결정 트리가 원인을 분류합니다. 6가지 중 하나:conversion_failure, undermarketed,discovery_failure, genre_mismatch,technical_debt, none. synthesizer는 재분류가 금지됩니다. 서술만 가능합니다. 이 분리는 서술이 증거에 모순되는 원인을 만들어 내는 것을 막습니다.