에이전트 시스템에서 무엇이 무너지는지 실무자들에게 물어보면, 대개 능력(capability) 때문이라고 답하지 않습니다. 실패는 더 조용합니다. 바로 모델이 결정을 내리지만, 그 결과가 건전한지 유창한지 아무도 알 수 없기 때문입니다.
모델 출력은 샘플(sample)일 뿐입니다. 결정에는 샘플이 갖지 못한 속성들이 있습니다. 즉, 고정된 입력에 대한 결정론적 특성, 만족해야 하는 불변량(invariants), 그리고 왜 이것이고 대안이 아닌지에 대한 감사 추적 기록(audit trail)입니다. 이러한 속성이 누락될 때, 그 '결정'은 높은 확신을 가진 추측일 뿐입니다.
본 글은 이 간극에 기계적인 처리를 제공합니다: 다섯 가지 결정 역할의 분류 체계(taxonomy), 각 결정을 그것을 수행할 수 있는 가장 작은 모델로 라우팅하는 규칙, 그리고 '에이전트가 X를 결정했다'는 것을 나중에 건전했음을 증명할 수 있는 무언가로 바꾸는 검증 메커니즘입니다. 마지막으로는 자신의 시스템의 모든 행동에 적용해 볼 수 있는 기준표(rubric)를 제시합니다.
"지역 에이전트에게서 제가 계속 부딪히는 간극은 능력이 아니라 검증입니다. 에이전트는 파일을 읽었거나, 도구를 호출했거나, 결정을 내렸다고 말합니다..." — r/LocalLLaMA, "Best Local Agents — Jun 2026"
"LLM 에이전트가 실패할 때, 그것은 블랙박스이며 아무도 이유를 모릅니다. 채택에 대한 실제 병목 현상은 정확도를 92%에서 96%로 올리는 것이 아니라, [왜 X라고 결정했는지 아는 것]입니다." — r/AI_Agents, "The gap between decision and execution"
커뮤니티는 세 가지 직관으로 수렴했습니다: 모델에게 최종 결정을 맡기지 않는다, 가장 작은 유능한 모델로 결정을 라우팅한다, 그리고 결정 과정을 설명 가능하게 만든다. 부족했던 것은 이 세 가지를 동시에 실행할 수 있게 만드는 프레임워크였습니다.
왜 '답변은 하지만, 결정하는가?'
모델 출력은 하나의 시퀀스로 축소된 토큰 분포이며, 같은 프롬프트를 두 번 실행해도 중요하게 작용하는 토큰에서 정확히 다른 두 개의 시퀀스가 생성될 수 있습니다. 반면, 결정은 고정된 입력에 대해 결정론적이며, 명시적인 불변량을 만족하고, 어떤 분기가 선택되었고 왜 그렇게 되었는지 기록하는 감사 추적을 남깁니다.
모델 주변에 시스템 장치(machinery) 없이 '결정'을 내릴 때, 그러한 속성들은 존재하지 않습니다. 출력이 준수해야 하는 불변량(invariant)도 없고, 어떤 분기 경로를 거쳤는지에 대한 기록도 없으며, 그 결정을 재현하여 검증할 방법조차 없습니다. 이 격차는 지능의 문제가 아니라, 확률적 출력(probabilistic output)이 결정론적 출력을 위해 설계된 슬롯에 배치되었다는 문제입니다.
실무자들의 본능은 모델을 의사결정 과정에서 완전히 배제하는 것입니다:
“LLM은 시스템에서 최종 결정을 내리지 않습니다. 그 역할은 순전히 논리 정제, 스트레스 테스트, 시나리오 생성, 설명에 국한됩니다.” — r/AI_Agents, '가격 검증을 위한 LLM을 '추론 에이전트'로 사용하기…'
이는 원칙(maxim)으로 제시된 올바른 태도입니다. 이를 적용하려면 주어진 행동에 대해 모델이 어떤 역할을 수행해야 하는지 분류하는 방법이 필요한데, 아래의 분류 체계(taxonomy)가 바로 그것을 제공합니다.
다섯 가지 의사결정 역할 (Five decision roles)
시스템이 내리는 모든 결정은 다섯 가지 역할 중 하나로 할당될 수 있습니다. 이 역할은 모델 출력에 대한 신뢰도, 감사 가능성(auditability), 실패 방식, 그리고 인간의 개입 여부를 결정합니다.
| 역할 | 모델의 행동… | 신뢰 수준 | 감사 가능성 | 일반적인 실패 모드 | 인간 개입 여부 |
|---|
| 결정자 (Decider) | 호출을 확정함 | 가장 낮음 — 제약되어야 함 | 결정 기록(decision record)을 반드시 방출해야 함 | 고신뢰의 잘못된 분기 경로 | 예, 비가역적이거나 높은 위험이 따를 경우 |
| ... | | | | | |
이 표는 메뉴가 아니라 제약 조건으로 읽어야 합니다. 대부분의 결함 있는 시스템은 하나의 공통적인 결함을 공유합니다: 단일 모델이 다섯 가지 역할을 한꺼번에 수행한다는 것입니다. 따라서 결정론적(determinism) 역할이 요구되는 '결정자' 역할이 유창성(fluency)에 최적화된 구성 요소('생성자')로 처리됩니다. 모델이 생성자 역할을 할 때는 의사결정 장치 자체가 필요하지 않습니다 — 콘텐츠 검토만 필요합니다. 피해야 할 실패는 이 둘을 혼동하는 것입니다: '에이전트가 환경 삭제를 결정했다'라는 문구는 보통 결정을 내린 품질 문제가 아니라, 누락된 승인 게이트(approval gate)일 가능성이 높습니다.
의사결정을 가장 작고 유능한 모델로 라우팅하기 (Route the decision to the smallest competent model)
역할(role)이 고정되면, 라우팅 질문은 어떤 모델 계층(model tier)이 해당 역할을 수행하는가 하는 문제입니다. 실무자들은 그 효과를 직접 보고합니다:
"모델 라우팅: 분류/라우팅 결정에는 Haiku를, 실행에는 Sonnet을, 설계/계획에는 Opus만 사용했습니다. 모든 작업에 Opus를 사용하던 것을 멈춘 후 비용이 약 60% 절감되었습니다." — r/AI_Agents, "2026년의 전체 AI 에이전트 스택은 무엇인가요"
이 수치는 모델 선택을 시스템 단위가 아닌 역할(per-role) 단위로 처리함으로써 얻어진 것입니다. 라우팅 호출 — "이것이 이메일 분류인지 환불 승인인지?"와 같은 질문 — 은 분류(classification)에 해당하며, 분류는 최첨단 모델(frontier model)을 필요로 하지 않습니다. 수천 번 실행되기 때문에 작고 빠르며 낮은 온도(low-temperature)의 모델만 필요합니다. 계층 메커니즘 — 즉, 기능 기반(capability-based), 비용 인식적(cost-aware), 지연 시간 인식적(latency-aware) 선택과 폴백 체인(fallback chains) — 은 Model Routing: Stop Using One Model for Everything에서 다루고 있으며, 여러 모델을 활용하는 오케스트레이션 패턴은 Multi-Model System Design에 있습니다.
결정 프레임워크를 추가함으로써 얻는 이점은 **신뢰도 기반 에스컬레이션(confidence-based escalation)**입니다. 이는 '가장 작은 역량 있는 모델'을 가정하는 것이 아니라 측정할 수 있게 만듭니다. 가장 작은 계층부터 시작합니다. 모델이 보정된 신뢰도(calibrated confidence) 또는 구조화된 자체 평가를 방출하고 이 임계값(threshold)을 통과하면 중단합니다. 그렇지 않으면 한 단계 높은 계층으로 에스컬레이션하고 그 과정을 기록합니다. 따라서 역량은 더 이상 모델당 가정되는 속성이 아니라 호출당 검증되는 속성입니다.
어떤 계층에 관계없이 절대적으로 지켜져야 하는 제약 조건이 하나 있습니다. 바로 라우터 역할 자체가 자유로운 언어 모델(free language-model) 호출이 되어서는 안 된다는 것입니다. 작업 유형, 페이로드 크기, 비용 예산 등에 대한 규칙으로 구성된 결정론적 골격(deterministic spine)이 분기(branch)를 선택하고, 모델은 그 내부의 리프 결정(leaf decisions)만을 채우도록 제한됩니다. 이 골격은 감사 가능(auditable)하며 단위 테스트가 가능(unit-testable)합니다. 즉, 모델은 실제로 잘하는 범위 내에 갇히게 됩니다.
결정을 검증 가능하게 만들기
여기서 '에이전트가 X를 했다고 말하는' 격차가 해소됩니다. 해결책은 결정을 채팅 턴의 부수 효과가 아니라, 1급 구조화된 아티팩트로 만드는 것입니다:
- 구조화된 결정 저장소(structured decision store). 모델이 내릴 수 있도록 허용된 모든 결정은 로그 라인에 기록되는 것이 아니라 테이블에 작성되어야 합니다: 입력값, 역할, 모델 및 티어, 신뢰도, 고려된 대안들, 타임스탬프. 결정은 나중에
SELECT할 수 있는 무언가여야 합니다. 만약 그것이 대화 기록 안에만 존재한다면, 그것은 추측일 뿐입니다.
- 실행 로그와 분리된 결정 로그(decision log). 실행 로그는 무슨 일이 일어났는지 말하고; 결정 로그는 무엇이 결정되었고 어떤 근거로 결정되었는지를 말합니다. 이 분리는 중요합니다. 왜냐하면 실패는 보통 실행 과정에 있는 것이 아니라, 결정 자체에 있기 때문입니다—에이전트는 삭제를 완벽하게 실행했지만, 버그는 삭제하기로 결정한 데 있었습니다. 구조화되고 추가 전용(append-only)인 로깅 메커니즘은 LLM Guardrails in Practice에서 컴플라이언스 감사 추적(compliance audit trails)에 사용되는 것과 동일합니다.
- 불변성(Invariants) 및 단언(assertions). 결정자(decider) 및 평가자(evaluator) 역할의 경우, 모델이 이를 방출한 후에도 결정은 결정론적 코드에서 확인되는 불변성을 만족해야 합니다. 가격 추천기는 어떤 것이든 방출할 수 있지만, "권장 가격은 [최저가, 최고가] 범위 내여야 한다"는 불변성은 코드를 통해 강제됩니다. 모델이 제안하고; 불변성이 처리합니다(disposes).
- 비가역성 경계에서의 인간 승인 게이트(Human-approval gates at the irreversibility boundary). 이 게이트는 모델의 신뢰도가 아니라, 행동의 파급 범위(blast radius)라는 속성에 달려 있습니다. 임계값 이하의 환불은 자동 승인이 가능하지만, 그를 초과하는 것은 아닙니다. 99%의 신뢰도를 가진 모델이라도 감사 기록이 없는 비가역적 행동을 승인할 수는 없습니다.
flowchart LR
A["Action requires<br/>a decision"] --> B{"Classify<br/>the role"}
B --> C["Route to smallest<br/>competent tier"]
...
핵심 논점: 92%→96% 정확도 향상이 병목 지점이 아니라 설명 가능성(Explainability)이다. 모든 결정이 기록되고, 불변성 검사(invariant-checked)를 거치며 경계에서 게이팅되는 92% 수준의 시스템은 안전하게 배포될 수 있다. 왜냐하면 잘못된 결정의 8%는 피해를 주기 전에 찾아낼 수 있기 때문이다. 반면, 블랙박스 의사결정 프로세스를 가진 99%의 시스템은 그렇지 못하다. 왜냐하면 그 1%는 포렌식 기록(forensic record)이 없는 실시간 사고이기 때문이다. 어시스턴트 내에서 게이트 자체가 어디에 위치하는지—어떤 컴포넌트가 승인 권한을 가지며 요청이 어떻게 도달하는지—는 AI Assistant Architecture: LLM, Memory, Tools, Routing, Observability에서 설명한다.
실제 적용 사례 (Worked examples)
세 가지 시스템과 각각의 역할 할당을 보여준다.
가격 검증 — 모델은 추천자일 뿐, 결정을 내리는 주체는 아니다. 에이전트가 공급업체의 가격 변동을 검토하고 순위 목록(accept, negotiate at X, reject)을 생성한다. 최종 호출은 결정론적 규칙(deterministic rules)으로 채워진 결정자 슬롯이다: 비용 하한선(cost floor) 이하일 경우 자동 승인; 상한선(ceiling) 초과 시 인간에게 라우팅; 그 사이에는 '협상된 가격이 Y%까지 마지막 승인 가격을 능가해야 한다'는 불변성 규칙을 적용한다. 모델은 결코 자신의 추천을 승인하지 않으며, 만약 잘못될 경우 해당 추천은 결정 저장소(decision store)에 근거 추적 기록(rubric trace)과 함께 보관된다.
에이전트 작업 라우팅 — 중심축(spine)이 결정자이며, 모델은 잎사귀(leaves)에 위치한다. 수신 요청(이메일, 티켓, 명령)은 페이로드 형태와 의도 카테고리(intent category)에 의해 경로가 할당된다. 이는 결정론적이고 단위 테스트(unit-testable) 가능하다. 작은 모델은 분기 내부의 잎사귀 결정만 채운다. 잘못된 라우팅은 폭발 반경 이벤트(blast-radius event)이므로, 분기 선택 자체가 결정론적이어야 하는 이유가 바로 여기에 있다.
LLM-as-judge — 모델을 평가자로, 루브릭(rubric)을 제약 조건으로. 한 모델이 버전화된 루브릭에 따라 다른 모델의 출력을 점수 매기고, 단순히 숫자뿐만 아니라 점수와 루브릭 추적 기록 모두를 저장합니다. 알려진 실패 모드는 자체 선호 편향(self-preference bias) — 즉, 모델이 자신의 생성 스타일을 더 높게 평가하는 것 — 이며, 이를 완화하기 위한 구조적 방법은 다음과 같습니다: 모델이 자신이 만든 기준에 대해 조용히 점수를 매기는 일이 없도록 루브릭을 버전 관리해야 합니다.
진정한 경계(The honest boundary)
LLM이 절대 해서는 안 되는 결정의 유형이 있으며, 이는 규모의 문제가 아닙니다. 바로 되돌릴 수 없고(irreversible), 높은 위험도가 따르며(high-stakes), 대안이 없는(no fallback) 행동들입니다 — 데이터 삭제, 자금 이동, 외부 약속 등이 해당됩니다. 롤백할 수 없는 행동에 대한 검증은 불가능하기 때문에 "자율 에이전트(autonomous agent)"는 모델 품질과 관계없이 같은 벽에 부딪히고 있습니다.
극장 같은 것이 아닌 실제 인간 개입(human-in-the-loop)은 바로 그 경계선에 존재하며, 다른 곳에는 없습니다. 모든 저위험 결정(low-stakes decision)을 검토하는 인간은 마찰만 추가할 뿐 안전성을 더하지 못합니다. 반면, 고위험 결정(high-stakes decision)에서 인간이 부재한 것이 사고를 유발합니다. 동일한 원칙이 에이전트 메모리에서도 좁은 형태로 나타납니다: 자기 강화 메모리 루프는 어떤 내용이라도 영구 상태(durable state)에 도달하기 전에 명시적인 인간 승인(explicit human approval)을 거쳐 후보 메모리 쓰기 작업을 게이트(gate)로 막습니다 — 이 게이트의 크기는 해당 쓰기가 무엇을 망가뜨릴 수 있는지에 맞춰져 있습니다. 다중 에이전트 시스템의 경우, 이에 상응하는 질문은 누가 누구를 대신하여 행동할 수 있는가이며, 이를 위한 신원 확인, 위임(delegation), 감사 추적(audit-trail) 메커니즘은 A2A 및 MCP 에이전트 보안에 있습니다.
의사결정 루브릭(The decision rubric)
시스템의 모든 행동에 대해 이것을 실행해 보세요:
- 역할 분류(Classify the role). 결정자(Decider), 추천기(recommender), 평가기(evaluator), 생성기(generator), 또는 라우터(router) 중 무엇인가요? 역할이 명시되지 않은 것은 버그입니다 — 결정자 슬롯에 있지만 생성기의 확신을 착용한 모델과 같습니다.
- 해당 역할의 등급 선택(Pick the tier for that role). 가장 작고 유능하며, 역량이 호출당 측정되도록 확신 기반 에스컬레이션(confidence-based escalation) 기능을 갖춥니다.
- 검증 정의(Define the verification). 어떤 불변성(invariants)이 유지되어야 하나요? 결정 저장소(decision store)에 무엇이 들어가나요? 감사 추적(audit trace)은 무엇인가요? 검증 경로가 없는 역할은 기본적으로 결정자입니다.
- 인간 게이트 설정(Set the human gate). 확신(confidence)이 아닌 폭발 반경(blast radius)을 기준으로 인간의 개입 지점을 설정합니다. 되돌릴 수 없거나 위험도가 높은 경우 → 게이팅(gated). 그렇지 않은 경우 → 자동 실행하며, 나중에 찾을 수 있도록 결정은 기록됩니다.
런타임 액션(runtime actions)이 아닌 엔지니어링 선택에 동일한 원칙을 적용하는 것이 바로 결정 기록(decision records)의 역할입니다 — Decision Records for AI-Driven Development는 나중에 검토할 수 있도록 왜 특정 선택이 이루어졌는지 포착하며; 위의 기준표(rubric)는 실행 중인 시스템이 내리는 결정에 대해서도 동일한 역할을 수행합니다.
다가오는 것: 제품으로서의 결정자 (the decider as a product)
이 프레임워크는 자체적인 상품화(commoditization)를 예측합니다: 일단 "결정을 가장 작고 유능한 모델로 라우팅한다"가 패턴이 되자, 다음 단계는 오직 결정만 하는 모델 클래스가 되는 것이었습니다. 그 단계가 이제 실현되었습니다.