독자의 질문
주 모델이 503 오류나 과부하로 멈췄을 때 더 빠르거나 저렴한 모델로 넘겨도, 어떻게 품질 저하·근거 누락·잘못된 도구 실행을 조용히 내보내지 않을 수 있을까요?
짧은 답
전환 자체를 성공으로 보지 마세요. 어느 모델이 답했든 같은 수용 계약(acceptance contract)을 통과한 결과만 외부로 보내고, 실패 원인에 따라 제한 재시도·사람 검토·차단으로 나누는 방식이 안전합니다.
핵심 요약
- fallback은 장애 대응 장치이지 품질 보증 장치가 아닙니다.
- 모델별 검증 규칙이 다르면 전환 순간에 기준이 낮아질 수 있습니다.
- 필수 근거, 도구 결과, 출력 형식, 권한 규칙, 신뢰도 기준을 하나의 공통 validator로 선언하세요.
- 503, 형식 불일치, 근거 누락, 도구 실패, 검증 시간 초과를 미리 주입해 결과 경로를 확인해야 합니다.
- 운영 로그에는 최소한
model_id,validator_version,failure_reason을 남겨야 원인을 되짚을 수 있습니다.

fallback이 작동해도 안심할 수 없는 이유
운영 중인 AI 에이전트는 네트워크 오류, 요청 제한, 일시적 과부하처럼 언제든 응답 경로가 바뀔 수 있는 상황을 만납니다. 이때 fallback을 연결해 두면 서비스가 멈추는 일은 줄일 수 있습니다. 그러나 “응답이 돌아왔다”는 사실과 “그 응답을 사용자나 다음 자동화 단계에 보내도 된다”는 판단은 다릅니다.
예를 들어 주 모델은 고객 문의에 답할 때 근거 링크와 정해진 JSON 형식을 내도록 설계했는데, 대체 모델은 자연어 답변만 반환했다고 가정해 보겠습니다. 화면에는 그럴듯한 문장이 보일 수 있지만, 뒤 단계가 주문 상태를 갱신하거나 담당자에게 안내를 보낼 수 있다면 형식 누락은 조용한 운영 사고가 됩니다.
Google Developers가 소개한 엔지니어링 사례는 주 경로가 503을 반환할 때 다른 모델로 전환하면서도 양쪽 경로가 같은 검증 함수를 통과하도록 구성한 패턴을 보여 줍니다. 이 사례가 모든 업무에서 같은 정확도를 보장한다는 뜻은 아닙니다. 다만 전환 경로에도 같은 합격선을 적용해야 한다는 운영 원칙으로는 매우 유용합니다.
모든 경로에 같은 기준을 두는 방법
공통 validator는 “모델 A의 답”과 “모델 B의 답”을 비교해 누가 더 똑똑한지 가리는 장치가 아닙니다. 해당 작업이 다음 단계로 넘어가기 위해 반드시 지켜야 하는 최소 조건을 검사하는 장치입니다. 이를 수용 계약이라고 부르겠습니다.
Microsoft Learn의 AI 앱 아키텍처 안내도 출력의 변동성을 전제로 검증, 평가, 실패 예측 가능성을 설계하라고 권합니다. 또한 AWS의 prompt routing 문서는 응답 품질 차이를 고려하는 라우팅 개념을 설명합니다. 공급사별 기능과 정책은 다르지만, FLOWIT 관점에서 중요한 것은 라우팅 뒤에 별도의 승인 관문을 둔다는 점입니다.
수용 계약 표: 무엇을 검증할지 정하기
계약은 위험도가 높은 항목부터 짧게 시작하세요. 처음부터 모든 품질을 점수 하나로 만들기보다, “없으면 보내지 않는 조건”을 먼저 명확히 두는 편이 운영하기 쉽습니다.
| 검증 항목 | 통과 기준 | 실패 시 외부 노출 | 로그 필드 |
|---|---|---|---|
| 출력 형식 | 필수 JSON 키와 타입이 모두 맞음 | 금지 | schema_error |
| 근거 | 작업에서 요구한 출처 또는 조회 결과가 존재함 | 금지 또는 사람 검토 | evidence_missing |
| 도구 결과 | 허용된 도구가 성공 상태와 예상 식별자를 반환함 | 금지 | tool_result_invalid |
| 권한·정책 | 승인되지 않은 실행이나 민감 범위 변경이 없음 | 즉시 차단 | policy_violation |
| 완결성 | 사용자 질문에 필요한 결정 또는 다음 조치가 빠지지 않음 | 제한 재시도 또는 검토 | completion_gap |
여기서 비용은 단순히 “더 싼 모델을 썼는가”가 아닙니다. 검증되지 않은 결과가 티켓 재처리, 잘못된 변경, 사람의 긴급 검토로 이어질 때 드는 비용까지 포함해 판단해야 합니다. 대체 모델을 쓰더라도 contract 통과율과 재검토율을 함께 보는 이유입니다.

반드시 해볼 5개 실패 주입 테스트
실패 주입은 실제 사용자 요청을 망가뜨리자는 뜻이 아닙니다. 격리된 테스트 환경에서 예상한 실패를 만들어, validator와 라우팅이 약속대로 행동하는지 확인하는 절차입니다.
| 테스트 | 주입 조건 | 기대 상태 | 외부 노출과 복구 |
|---|---|---|---|
| 1. 주 모델 503 | 주 모델 호출이 일시 오류를 반환 | 대체 모델 호출 후 동일 validator 실행 | validator 통과 전까지 보류, 실패 사유 기록 |
| 2. 형식 불일치 | 대체 모델이 필수 키 없는 응답 반환 | retryable 또는 unverified | 자동 실행 금지, 형식 보정 재시도 횟수 제한 |
| 3. 근거 누락 | 답은 있으나 요구된 조회 결과·근거가 없음 | unverified | 사람 검토 큐 또는 근거 재수집 경로 |
| 4. 도구 호출 실패 | 읽기/쓰기 도구가 성공 식별자를 돌려주지 않음 | unsafe | 후속 변경 중단, idempotency 키로 중복 실행 점검 |
| 5. 검증 시간 초과 | validator가 허용 시간을 넘김 | retryable 또는 unverified | 결과를 성공으로 추정하지 말고 제한 재시도 후 검토 |
실패 조건의 핵심은 “대체 모델이 답을 만들었다”를 통과로 취급하지 않는 것입니다. 특히 쓰기 권한이 있는 자동화에서는 도구 실행 전 dry-run 결과, 대상 식별자, 중복 방지 키를 함께 검사해야 합니다.
통과·재시도·검토·차단을 나누는 라우팅
모든 실패를 같은 방식으로 재시도하면 비용과 지연이 커지고, 모든 실패를 사람에게 넘기면 운영자가 곧 병목이 됩니다. 실패 성격에 맞춰 네 가지 결과로 나누면 판단이 단순해집니다.

| 검증 결과 | 다음 경로 | 자동 재시도 | 사람 검토 | 필수 기록 |
|---|---|---|---|---|
| pass | 결과 전달 또는 승인된 다음 단계 | 불필요 | 불필요 | model_id, validator_version |
| retryable | 제한된 재시도 | 횟수·간격 제한 | 반복 실패 시 | failure_reason, retry_count |
| unverified | 검토 큐 | 근거 재수집처럼 안전한 경우만 | 필수 | missing_check, evidence_state |
| unsafe | 차단 및 경보 | 원인 제거 전 금지 | 필수 | policy_scope, tool_trace |
업무별 validator 예시
공통 관문은 유지하되, 통과 조건은 작업에 맞게 바뀌어야 합니다. “신뢰도 점수 0.8 이상” 같은 단일 수치만으로 서로 다른 일을 승인하면 오히려 판단 근거가 흐려질 수 있습니다.

| 에이전트 유형 | 우선 validator | 즉시 차단 조건 | 완화 가능한 실패 |
|---|---|---|---|
| 데이터 분석 | 지표 정의, 기준 시점, 원본 조회 결과, 계산 재현성 | 기간 혼합, 출처 없는 수치, 민감 데이터 노출 | 설명 누락 후 재생성 |
| 업무 자동화 | dry-run, 대상 ID, 권한 범위, idempotency 키 | 승인 없는 쓰기, 대상 불명확, 중복 실행 위험 | 읽기 조회 시간 초과 |
| 코딩 에이전트 | 테스트, 정적 검사, 변경 범위, 비밀값 검사 | 테스트 실패, 권한 밖 파일 변경, 비밀값 노출 | 문서 설명 보강 |
도입 판단은 작게 시작하는 편이 좋습니다. 먼저 읽기 전용 작업 하나에 contract를 붙이고, 실패 주입 카드 다섯 장을 통과한 뒤에만 제한적인 쓰기 작업으로 확장하세요. 권한이 커질수록 “모델의 자신감”보다 도구 흔적과 승인 경로를 더 무겁게 다뤄야 합니다.
도입 전 운영 체크리스트
- 주 경로와 대체 경로가 같은 validator 버전을 호출하는지 확인했습니다.
- 필수 형식, 근거, 도구 결과, 권한 규칙을 문서화했습니다.
- 503·형식 불일치·근거 누락·도구 실패·시간 초과를 격리 환경에서 주입했습니다.
- 재시도 횟수와 사람 검토 기준을 분리했습니다.
- 쓰기 작업에는 dry-run, 대상 ID, idempotency 키를 확인하는 규칙을 넣었습니다.
- 실패 결과가 사용자나 후속 자동화로 나가지 않는지 확인했습니다.
- 로그로 모델·계약 버전·실패 이유를 한 요청 단위로 추적할 수 있습니다.
다음에 함께 읽으면 좋은 글
- AI 모델 교체 준비 런북 — 모델을 바꾸기 전에 확인할 범위와 준비물입니다.
- AI 자동화 모델 라우팅 — 작업별 모델 선택의 기본 프레임을 다룹니다.
- 데이터 에이전트 품질 릴리스 게이트 — 데이터 검증 관문을 더 깊게 살펴볼 수 있습니다.
- 비동기 코딩 에이전트 PR 인수 패킷 — 코드 변경을 받기 전의 인수 기준을 확인할 수 있습니다.
자주 묻는 질문
fallback은 항상 더 저렴한 모델이어야 하나요?
그렇지 않습니다. 장애 시 빠른 복구가 중요한 작업도 있고, 비용보다 형식 준수나 도구 사용 안정성이 더 중요한 작업도 있습니다. 비용은 모델 호출 단가뿐 아니라 재처리와 검토에 드는 운영 비용까지 함께 비교하는 편이 안전합니다.
validator가 실패하면 무조건 재시도하면 되나요?
아닙니다. 일시적 네트워크 오류처럼 복구 가능성이 높은 경우만 제한 재시도하세요. 근거 누락, 권한 위반, 대상 불명확처럼 판단 근거가 부족하거나 위험한 실패는 사람 검토 또는 차단 경로가 맞습니다.
데이터 분석과 업무 자동화에 같은 validator를 써도 되나요?
공통 관문의 구조는 공유할 수 있지만 통과 조건은 다르게 두어야 합니다. 데이터 분석은 정의·시점·계산 근거가 핵심이고, 업무 자동화는 권한·대상·중복 실행 방지가 핵심입니다.
대체 모델의 결과가 주 모델보다 좋아 보이면 바로 승인해도 되나요?
겉으로 자연스러운 문장만으로 승인하면 안 됩니다. 해당 업무의 contract에 필요한 형식, 근거, 도구 결과, 권한 조건을 통과했는지 확인한 뒤에만 결과를 전달하세요.
가장 먼저 기록해야 할 로그는 무엇인가요?
요청 식별자, 사용 모델, fallback 사용 여부, validator 버전, 검증 결과, 실패 이유부터 남기세요. 이 여섯 항목만 있어도 장애 후에 어느 경로에서 기준이 무너졌는지 추적하기 쉬워집니다.
참고 자료
- Google Developers Blog — 강한 AI 에이전트 제출작의 엔지니어링 패턴: 주 경로와 대체 경로에 공통 검증 함수를 적용한 사례의 출발점입니다.
- AWS Documentation — intelligent prompt routing: 응답 품질 차이를 고려한 라우팅 개념을 확인하는 자료입니다.
- Microsoft Learn — AI App Architecture for Startups: 변동성 있는 출력에 검증·평가·실패 예측 가능성을 설계하는 관점을 보강합니다.
이 글이 마음에 드세요?
FLOWIT on YouTube
영상으로도 FLOWIT을 이어서 보세요
AI 자동화, Claude Code, n8n, 데이터 분석 흐름을 블로그와 영상으로 함께 정리하고 있습니다.
AI 코딩 에이전트, 벤치마크 1위면 도입해도 될까? 우리 저장소에서 먼저 돌릴 10개 업무 실험 카드
AI 에이전트 승인창이 많을수록 안전할까? 장기 작업의 승인 피로를 막는 5칸 개입 예산
“AI 에이전트가 503 때 싼 모델로 바뀌어도 될까? fallback 품질을 같게 만드는 5개 테스트”에 대한 1개의 생각