5단계로 거절 게이트를 구축하고 이를 파괴해 보기
요약
본 글은 AI 시스템에서 '거절(refusal)'의 위치와 구조적 검증에 초점을 맞춥니다. 단순히 모델 자체의 신뢰성을 묻기보다, 다섯 단계로 구성된 게이트를 구축하여 각 단계마다 명확한 검증 절차를 거치도록 설계하는 방법을 제시합니다. 이 게이트는 데이터 기반으로 중단 조건을 정의하고, 무료 모델 접근 환경을 활용하며, 최종적으로 모델 호출 전에 증거(evidence)를 확인하여 '전송' 버튼과 같은 결정적 지점에서 오류를 방지하는 것이 핵심입니다.
핵심 포인트
- AI 시스템의 신뢰성은 모델 자체보다 거절 게이트 구축에 달려있다.
- 중단 조건은 위키 규칙이 아닌, `stop_conditions.json` 파일 등 데이터로 정의해야 한다.
- 게이트는 모델 호출 전에 증거(evidence)를 확인하여 토큰 소모 없이 오류를 방지한다.
- 실제 구현 시에는 무료 서버 접근 및 표준 라이브러리만 사용하여 테스트하는 것이 중요하다.
화요일 아침의 지원 대기열을 상상해 보세요. 상담원이 티켓 하나를 읽고 환불 약속 초안을 작성합니다. 그런데 그 티켓에는 주문 상태 정보가 빠져 있습니다. 고객이 답장을 할 때까지 아무도 알아차리지 못합니다.
그 초안은 증거가 부족한 상태에서 내려진 결정이었습니다. 이 결정의 주체는 지원팀 리더였습니다. 그리고 그 결과는 고객에게 돌아왔습니다. 되돌릴 수 있는 지점(point of reversibility)은 바로 '전송' 버튼이었습니다.
그래서 저는 모델 자체가 신뢰할 만한지 여부를 묻는 것을 멈췄습니다. 대신, 거절(refusal)이 어디에 위치해야 하는지를 물었습니다. 사과문보다 게이트가 훨씬 저렴합니다. 여기 다섯 단계로 구성된 장치(harness)가 있으며, 각 단계마다 자체적인 검증 절차가 있습니다.
1단계: 서술이 아닌 데이터로 중단 조건을 작성하기
위키에 적힌 규칙은 한 번만 읽힙니다. 파일 안에 있는 규칙은 실행됩니다. 여러분의 규칙을 stop_conditions.json 파일에 넣어보세요.
[
{
"id": "refund-promise",
...
가장 중요한 네 가지 필드는 트리거(trigger), 증거(evidence), 주체(owner), 복구(recovery)입니다. 만약 한 명의 주체를 지정할 수 없다면, 그것은 규칙이 아니라 정책일 뿐입니다.
검증: python -m json.tool stop_conditions.json > /dev/null && echo "schema ok"를 실행했을 때 schema ok가 출력되고 종료 코드가 0이어야 합니다. 만약 이 파일이 비어 있다면, 여러분의 게이트는 단순한 도장 찍기(rubber stamp)에 불과합니다.
2단계: 무료 모델 접근으로 장치 구축하기
저는 게이트 작업을 위해 임시 서버를 유지하고 있습니다. 중요한 점은 프로덕션 환경을 망가뜨리지 않고도 부술 수 있는 기계여야 한다는 것입니다.
MonkeyCode라는 오픈 소스 프로젝트는 이러한 종류의 실험에 필요한 무료 모델 접근과 무료 서버 옵션을 광고합니다. 이것들은 운영자가 제공하는 가용성 주장(availability claims)이며, 저는 이를 약속이 아닌 가용성으로 간주합니다. 의존하기 전에 반드시 현재 이용 약관을 확인하세요.
공개 고지: 본 기사는 MonkeyCode의 제품 홍보 활동의 일환으로 작성되었습니다.
ssh you@your-free-server
python3 -V # 아래 표준 라이브러리 호출을 위해 3.9 이상 필요
git clone <your-fork-url> stop-gate && cd stop-gate
...
여기서 모델 이름을 언급하지 않는 이유는 목록이 계속 바뀌고, 제가 이름을 지정하면 금방 구식이 될 것이기 때문입니다.
검증: python -c "import os; print(bool(os.environ['MODEL_BASE_URL']))"를 실행하면 True가 출력됩니다. 전체 하네스(harness)에 작동하는 전송 호출(transport call) 한 번이면 충분합니다.
3단계: 모델 앞에 게이트 설치하기
게이트는 모델 호출 전에 증거(evidence)를 확인합니다. 따라서 거절(refusal)은 토큰을 소모하지 않습니다.
# gate.py — 참고 구현, stdlib만 사용
import json, os, urllib.request
...
이제 사람들이 건너뛰는 부분입니다. 거절이 모델에 도달하는 일이 절대 없음을 증명해야 합니다.
# test_gate.py
from gate import decide
...
검증: python test_gate.py를 실행하면 refusal gate ok: support-lead ask_customer_for_order_id가 출력됩니다. 만약 거절이 여전히 모델을 호출한다면, 당신은 게이트를 구축한 것이 아닙니다. 주석(comment)을 만든 것입니다.
4단계: 폐기된 정보를 기록에 남기기
거절은 침묵이 아니라 데이터입니다. 무엇이 부족했는지, 누가 소유하고 있는지, 그리고 인간이 어떻게 복구할 수 있는지를 기록해야 합니다.
def record(path, case_id, rule, missing, decision, owner, recovery, ts):
line = {"case_id": case_id, "rule": rule, "missing": sorted(missing),
"decision": decision, "owner": owner,
...
검증: jq -r 'select(.decision=="REFUSE") | .missing[]' decisions.jsonl | sort | uniq -c | sort -rn는 블로커들을 개수별로 그룹화합니다.
14 order_state
9 refund_policy_id
14번의 거절, 단 하나의 필드입니다. 프롬프트(prompt)를 수정하는 대신 입력 양식(intake form)을 수정해야 합니다. 이것이 마지막으로 로깅할 필요가 있다는 전체 논거입니다.
5단계: 인간에게 거절 카드 보여주기
이 카드는 네 줄로 구성되어 있으며, 순서는 다음과 같습니다: 에이전트가 하려고 했던 것, 어떤 증거가 부족한지, 누가 이를 해결할 수 있는지, 그리고 어쨌든 승인한다는 것이 무엇을 의미하는지. 초점의 순서는 이 읽는 순서와 일치해야 합니다. 색상만으로 신호를 보내면 안 됩니다. 시스템 이름 없이 평범한 단어여야 합니다.
저의 검토 프로토콜은 작고 반복 가능합니다. 두 명의 검토자가 한 카드를 소리 내어 읽으며, 그중 한 명은 화면 판독기(screen reader)를 사용합니다. 저는 주저하는 횟수를 세고 각 사람이 소유자 이름과 복구 경로를 말하는 데 걸리는 시간을 측정합니다.
성공 측정 기준: 모든 거절 카드(refusal card)는 정확히 하나의 소유자(owner)와 10초 이내의 복구 경로(recovery path)를 명시해야 합니다. 중단 측정 기준: 필수 필드가 비어 있는 상태에서 승인(approval)이 진행되는 경우입니다. 이런 일이 발생하면, 배포를 중단하고 규칙을 수정하십시오. 결코 고정 장치(fixture)를 느슨하게 만들지 마십시오.
이 하네스(harness)가 증명하지 못하는 것들
이것은 모델이 안전하다는 것을 증명하는 것이 아니라, 단지 하나의 행동 클래스가 증거를 기다린다는 것만을 증명합니다. 자유로운 접근성(Free access)은 가용성일 뿐 보장이 아니며, 약관은 변경될 수 있습니다.
규제 기관에서 문서에 고정된 계약 모델 버전(contractual model version pinned to a document)을 요구하는 경우 이 과정을 건너뛰십시오. 하네스는 기록을 작성하기 때문에 서브-초 단위의 상호작용 흐름(sub-second interactive flows)에는 적합하지 않습니다. 팀이 단 하나의 의사 결정 소유자(decision owner)조차 지정할 수 없다면 이 과정도 건너뛰십시오. 익명의 거절은 아무것도 가르쳐주지 못합니다.
그렇다면 이번 주에 당신의 승인을 멈추게 할 빠진 증거 조각은 무엇일까요? 그 규칙 하나를 작성하고, 하네스를 실행하여 게이트가 대신 거부하도록 하십시오.
만약 이 하네스를 위한 스크래치 머신(scratch machine)이 필요하다면, MonkeyCode의 무료 서버 옵션에서 이 하네스를 처음부터 끝까지 실행할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기