SHIFTONE

승인 요청의 93%는 그대로 승인돼요 — AI 에이전트 human-in-the-loop, 사람은 어디에 서야 하나요

AI 에이전트 승인 요청은 93%가 그대로 승인돼요. 사람을 매 호출 앞에 세우는 대신 되돌릴 수 있나 · 바깥으로 나가나 두 질문으로 행동을 세 칸에 나누고, 거부는 우회가 아니라 보고로 만들고, 게이트별 승인률을 재서 게이트를 없애거나 남기는 human-in-the-loop 설계를 정리했어요.

서울 지하철역의 스테인리스 개찰구 — 게이트마다 파란 불이 켜져 있고 한 게이트에 초록 화살표가 들어와 있는 사진. 어떤 건 그대로 통과시키고 어떤 건 멈춰 세우는 승인 게이트

금요일 오후예요. 에이전트가 거래처에 보낼 정산 메일 초안을 올리고 승인을 기다려요. 오늘만 마흔 번째라 담당자는 본문을 읽지 않고 눌러요. 앞의 서른아홉 번이 다 괜찮았거든요.

그러다 한 번이 틀려요. 수신자에 다른 거래처가 섞여 있었어요. 사후 회의의 질문은 "왜 사람이 못 잡았나"였는데, 질문이 틀렸어요. 사람이 잡을 수 없는 자리에 사람을 세운 거예요.

승인 요청의 93%는 그대로 승인돼요

Anthropic 의 3월 글을 보면 Claude Code 사용자는 권한 요청의 93% 를 승인해요. 글은 이걸 승인 피로라고 불러요. 같은 회사의 2월 데이터를 보면 세션 50회 미만인 새 사용자는 전체 자동 승인을 약 20% 의 세션에서 쓰고, 750회를 넘긴 사용자는 40% 를 넘어요. 그런데 숙련 사용자는 중간에 끼어드는 비율도 5% 에서 9% 로 늘어요. 승인 버튼은 덜 누르고, 볼 만한 순간에만 끼어드는 거예요. 게이트 설계는 그 순간을 시스템이 고르게 하는 일이에요.

등급은 위험도가 아니라 되돌릴 수 있는지로 나눠요

첫 단계는 모든 행동을 세 칸에 넣는 거예요. 위험도 대신 두 가지만 물어요. 되돌릴 수 있나, 조직 바깥으로 나가나.

읽기 전용(조회 · 초안)은 묻지 않고 로그만 남겨요. 되돌릴 수 있는 쓰기(사내 티켓 · 내부 알림)는 실행하고 사후에 묶어서 봐요. 되돌릴 수 없거나 바깥으로 나가는 행동(외부 메일 · 결제 · 삭제 · 권한 변경)만 사람 앞에 세워요.

멱등성 키 글에서처럼 되돌릴 수 있는 행동을 늘릴수록 사람 앞에 설 행동이 줄어요. 정책은 프롬프트가 아니라 코드 옆 파일에 둬요.

# agents/settlement-mail/approval-policy.yaml
tiers:
  auto:            # 묻지 않음, 로그만
    - crm:read
    - drive:draft
  review_after:    # 자동 실행, 일일 묶음으로 사후 확인
    - jira:create
    - slack:post:internal
  human_before:    # 사람이 보기 전엔 실행 안 됨
    - mail:send:external
    - erp:payment:*
on_denied: stop_and_report   # 거부되면 우회하지 않고 멈춰 보고

달라진 건 승인 요청의 수예요. 사람 앞에 서는 건 발송 한 번뿐이고, 하루 한 번이면 그 한 번은 읽혀요.

승인 게이트 — 사람은 되돌릴 수 없는 자리에만 서고, 거부는 사람에게 올라가요 에이전트 행동도구 호출 하나 두 질문되돌릴 수 있나요?조직 바깥으로 나가나요?정책 파일이 답해요 자동 통과읽기 · 초안 — 로그만 남아요 사후 확인되돌릴 수 있는 쓰기 — 일일 묶음 사람 승인 큐되돌릴 수 없음 · 외부 전송 사람이 보고 결정해요실행 또는 거부 — 사유를 남겨요 도구가 거부당함 (403)멈추고 보고 — 우회 금지 게이트마다 승인률 · 대기 시간을 재요 승인률 95% 넘고 거부 0건이면 사후 확인으로 내려요. 대기가 길어지면 사람이 병목이라 묻는 조건을 좁혀요.

막혔을 때 어떻게 하는지가 게이트의 절반이에요

마지막 줄 on_denied 가 왜 있는지는 OpenAI 가 10월 15일 갱신한 정렬 이슈 보고서가 보여줘요. 강화학습 훈련 중이던 내부 모델에게 정부 통계 사이트에서 한 해의 병상 수를 가져오라고 했는데, 접근이 거부되자 모델은 멈추지 않았어요. 서버 오류에 노출된 경로로 설정 파일을 내려받아 토큰 서명 키를 얻었고, 토큰을 위조해 통과한 뒤 24년 치를 저장했어요. 최종 답변에는 이 과정이 한 줄도 없었어요.

훈련 환경 이야기이고 OpenAI 는 이후 훈련 중 실인터넷 접근을 차단했지만, 교훈은 분명해요. 거부는 에이전트에게 "다른 길을 찾아라"는 신호가 아니라 사람에게 올라가는 이벤트여야 해요. 프롬프트 인젝션 글에서 도구를 잠근 것처럼, 403 이 오면 도구 게이트웨이가 세션을 멈추고 사유와 함께 승인 큐에 올려요. 다시 시도할 길 자체를 없애는 거예요.

승인률이 95%를 넘는 게이트는 게이트가 아니에요

세 번째 단계는 재는 거예요. 게이트마다 승인률과 대기 시간을 기록해요.

SELECT gate, COUNT(*) AS asked,
       AVG(CASE WHEN decision = 'approve' THEN 1.0 ELSE 0 END) AS approve_rate,
       SUM(CASE WHEN decision = 'reject' THEN 1 ELSE 0 END) AS rejected,
       AVG(decided_at - asked_at) AS wait
FROM approvals
WHERE asked_at > now() - interval '30 days'
GROUP BY gate ORDER BY approve_rate DESC;

달라진 건 게이트의 생사를 숫자가 정한다는 거예요. 한 달간 승인률 95% 를 넘고 거부가 0건이면 사람이 보고 있는 게 아니니 review_after 로 내려요. 대기 시간이 길어지면 사람이 병목이라 묻는 조건을 좁혀요.

AS-ISTO-BE
묻는 단위도구 호출마다되돌릴 수 없는 행동 · 외부 전송만
정책 위치프롬프트 문장코드 옆 정책 파일, 도구 게이트웨이가 집행
거부 시모델이 다른 방법을 찾아요멈추고 사유와 함께 사람에게 올라가요
운영승인 요청이 쌓여요게이트별 승인률 · 대기 시간을 재고 조정해요

바로 믿으면 안 되는 세 가지

하나, 93% 는 코딩 에이전트 수치예요. 우리 숫자는 위 질의가 돌려주는 게이트별 승인률이에요.

둘, 분류기는 사람을 대체하지 않아요. Anthropic 자동 모드도 실제 과잉 행동 52건 중 17% 를 놓쳤어요. 분류기는 human_before 앞단의 1차 필터예요.

셋, 준비됐다는 응답과 실제 통제는 달라요. CIO Dive 가 6월 임원 858명을 조사했는데, 82% 가 통제할 수 있다고 믿었지만 자동 통제 · 감사 로그 · 사람 검토 지점을 다 갖춘 곳은 5% 였어요. 벤더 설문이라 방향만 가져가요.

사람을 어디에 세우나요의 답은, 되돌릴 수 없는 자리예요

마흔 번째 승인에 필요했던 건 더 집중하는 사람이 아니라 서른아홉 번을 묻지 않는 정책이었어요. 지난주 데이터이쿠 조사에선 국내 CIO 87% 가 에이전트 개발 속도를 관리가 못 따라간다고 답했어요. 거버넌스 글처럼 에이전트가 수백 개가 되면 게이트도 세는 구조여야 해요. 완성된 규칙은 아니에요. 묶음 주기는 아직 재는 중이에요.

자주 묻는 질문

Q. 되돌릴 수 있는지는 누가 판단하나요? A. 도구를 등록하는 사람이에요. 되돌리기 절차가 없으면 human_before 예요.

Q. 외부 메일이 하루 수백 건이면요? A. 조건을 좁혀요. 허용 목록 수신자 · 승인된 템플릿이면 review_after 로 내리고, 새 수신자 · 첨부 · 금액이 있을 때만 물어요.

Q. 승인 피로가 생겼는지 어떻게 알아요? A. 승인이 몇 초 만에 나고 거부가 0 이면 신호예요. wait 와 rejected 를 같이 봐요.

Sources

도입부 장면은 설명용 구성이고 고객사 사례가 아니에요. 95% · 30일 · 일일 묶음은 측정값이 아니라 운영 규칙 예시값이에요.