AI에게 스티어링 휠을 주지 말라
Source: Dev.to
제어 가능한 AI 에이전트를 구축하기 위한 실용 체크리스트
AI 에이전트는 계획, 추론, 작업 수행 능력이 점점 향상되고 있습니다.
이 에이전트가 내 시스템에서 행동하도록 안전하게 허용할 수 있을까? 대부분의 경우 정직한 답은 아니오입니다.
이 글은 AI가 “나쁘다”는 이유를 다루는 것이 아니라, 프로덕션에서 실행할 만큼 안전한 에이전트를 만드는 방법에 대해 이야기합니다.
에이전트가 프로덕션 준비가 안 된 경우
에이전트가 다음 중 하나라도 수행한다면, 아직 프로덕션에 투입할 수 없습니다:
- 실제 행동을 직접 실행함 (금전 이체, 인프라 변경, 설정 업데이트, 데이터 변조 등)
- 동일한 입력에 대해 다른 결과를 생성함
- 숨겨진 컨텍스트나 대화 기록에 의존함
- 누가 행동을 승인했는지 설명할 수 없음
- 입력이 불분명할 때 멈추지 않고 계속 진행함
이것들은 예외 상황이 아닙니다.
계층형 아키텍처 (프롬프트가 아니라 레이어로 생각하기)
[ AI Agent ]
↓
[ Structured Output ]
↓
[ Deterministic Decision Layer ]
↓
[ Human / Policy Veto ]
↓
[ Execution ]
AI는 어떤 레이어도 건너뛰어서는 안 됩니다.
좋은 패턴 vs. 나쁜 패턴
구조화된 Intent vs. 자유 형식 명령
나쁨
Deploy the new config to production.
좋음
{
"intent": "deploy_config",
"risk_level": "high",
"missing_info": ["rollback_plan"],
"confidence": 0.72
}
코드 기반 결정 vs. 모델 전용 결정
나쁨
if model_says_yes:
deploy()
좋음
if risk_level == "high" and not approved:
block()
결정론적 출력 vs. 추측
나쁨 – 누락된 값을 추측하거나, 다른 도구를 시도하거나, “그냥 계속”한다.
좋음
status = "FAIL"
reason = "Insufficient information"
침묵이나 모호함은 절대 허가가 될 수 없습니다.
금지된 직접 호출
명시적인 인간 감독 없이 다음 함수들을 에이전트가 호출하도록 절대 허용하지 마세요:
trade()deploy()delete()write_prod_config()
에이전트는 행동을 제안해야 하며, 인간이 고위험 행동을 승인해야 합니다.
인간 / 정책 거부(Veto) 요구 사항
- 고위험 행동에 대해 인간 승인 단계를 반드시 포함합니다.
- 누가 언제 승인했는지를 기록합니다.
- 승인 단계는 우회할 수 없게 만듭니다.
누구도 “내가 승인했다”고 말할 수 없으면, 스스로에게 물어보세요:
“같은 입력으로 내일 이 결정을 다시 재현할 수 있을까?”
답이 아니오라면, 에이전트는 프로덕션에 안전하지 않은 것입니다. 재현 가능성은 설명 가능성을 능가합니다.
재현 가능성 체크리스트
- 에이전트를 즉시 중지할 수 있는가?
- 마지막 결정을 정확히 재현할 수 있는가?
- 승인을 한 인간을 지목할 수 있는가?
- 동일한 행동을 다시 수행할 것임을 증명할 수 있는가?
위 질문 중 하나라도 아니오라면, 실행 권한을 부여하지 마세요.
제어된 에이전트의 가치
이러한 제한이 있더라도 에이전트는 다음과 같은 영역에서 여전히 매우 유용합니다:
- 의미 파싱
- 위험 감지
- 워크플로우 조정
- 인간의 인지 부하 감소
미래는 제어된 에이전트의 것이며, 완전 자율 에이전트가 아닙니다. 에이전트가 똑똑할수록 견고한 안전 장치가 더욱 필수적입니다.
마무리 생각
프로덕션 시스템이 실패하는 이유는 AI가 약해서가 아니라, 제어 휠을 빼고 실제 브레이크를 설치하지 않았기 때문입니다. 에이전트를 데모 환경 밖에서도 살아남게 하려면, 스티어링 휠을 빼고 진짜 브레이크를 달아 주세요.