의도 분류 + 허용 목록 게이팅 — 기본 거부 안전 패턴
자연어 입력을 의도 분류 → 허용 목록 게이팅으로 통과시키는 *기본 거부* 안전 패턴. map_control 워크숍의 패턴을 일반화합니다.
에이전트가 외부 액션 을 발사하기 전에, 입력 자체 가 우리 에이전트의 영역인지 한 번 거르는 게이트가 필요합니다. 본 레슨은 의도 분류 + 허용 목록 의 기본 거부 패턴을 잡습니다. map_control 워크숍 의 §4 패턴을 일반화한 자리입니다.
왜 기본 거부 인가
LLM 의 의도 분류 도 LLM 호출입니다. 분류 오류율이 한 자리 % 단위 로 잡혀도, 그게 액터 발사로 직결되면 운영 사고가 됩니다. 기본 거부 의 핵심은 분류가 모호할 때 자동 거부 하는 것입니다.
세 가지 동치 표현:
- Allow-list — 허용 카테고리만 명시. 그 외는 모두 거부.
- Default deny — 분류가 강하게 한 라벨에 잡히지 않으면 거부.
- Whitelist-only — 블랙리스트 (거부 목록) 보다 강한 규칙. 블랙리스트는 새로운 위험 카테고리 가 항상 누락됩니다.
기본 거부의 trade-off — 운용자 입장에서 마찰 이 생깁니다. 내가 분명히 정당한 요청을 했는데 거부됐다 는 경험. 마찰 비용보다 오작동 위험이 클 때 (방산, 금융, 의료) 이 trade-off 가 의도된 안전 으로 자리잡습니다.
의도 분류 LLM 호출의 4 영역
분류 호출의 프롬프트 설계는 다음 4 영역으로 구성됩니다.
1. 허용 카테고리의 명시
map_control 의 예시:
허용 카테고리:
- UI_CONTROL: 화면 제어 의도 (팬닝, 줌, 오버레이 표시)
- DATA_QUERY: 데이터 조회 의도 (이력, 통계)
- SYSTEM_CONFIG: 시스템 설정 변경 의도
이 에이전트는 UI_CONTROL 만 처리합니다.
DATA_QUERY 와 SYSTEM_CONFIG 는 *분류만* 하고 거부합니다.
세 카테고리를 명시적으로 분류한 뒤, 그중 하나만 허용 으로 표시합니다. 세 카테고리 어디에도 강하게 잡히지 않으면 UNKNOWN 으로 거부.
2. 분류 신뢰도 (confidence) 요청
출력 형식 (JSON):
{
"intent": "UI_CONTROL" | "DATA_QUERY" | "SYSTEM_CONFIG" | "UNKNOWN",
"confidence": 0.0 ~ 1.0,
"reasoning": "분류 근거 한 문장"
}
LLM 이 얼마나 자신 있는지 의 점수를 함께 요청. 기본 거부 의 핵심 게이트가 이 confidence 입니다.
3. 거부 임계값
confidence < 0.7 인 경우, intent 와 무관하게 UNKNOWN 으로 취급.
이 한 줄이 기본 거부 의 임계값입니다. 운영 초기에는 보수적으로 (0.8 이상) 시작했다가, 거부율 모니터링 (레슨 6) 결과를 보며 조정.
4. 거부 응답의 형식
거부 응답:
- 본문: "이 명령은 본 에이전트의 범위가 아닙니다."
- 추가 정보: 만약 DATA_QUERY 분류였다면 "데이터 조회는 *별도 도구* 를 사용해 주세요" 같은 라우팅 안내.
- 감사 로그: 거부도 om_event_history 에 한 행으로 기록 (자동 액터).
거부도 로그를 남기는 게 중요합니다. 어떤 입력이 거부됐는지 의 패턴이 모니터링의 1 차 시그널입니다.
게이트 후의 흐름
의도 분류 게이트를 통과한 입력만 다음 단계 (도구 호출 → LLM 추론 → 액터 발사) 로 흐릅니다. 거부된 입력은 거기서 끝 — 도구 호출도 없고, LLM 추론도 없고, 액터 발사는 더더욱 없습니다.
이 분리가 조직 외부 영향 을 분류 LLM 의 정확도 한 층 에 집중시킵니다. 만약 분류가 잘못돼도, 허용된 카테고리만 다음 단계로 흐르므로 전혀 다른 카테고리 의 액터가 발사되는 일은 불가능 합니다 (정의상).
자가 점검 — 게이트 동작 확인
게이트 설계 후 다음 4 종 입력으로 테스트해 보세요.
- 명백히 허용 — "15NM 안전 구역 한 번 보여 줘" → UI_CONTROL, confidence ≥ 0.9.
- 명백히 거부 — "오늘 순찰 이력 알려 줘" → DATA_QUERY, 거부 응답.
- 모호한 입력 — "여기 근처 뭐 있어?" → UNKNOWN (confidence < 0.7), 거부 응답.
- adversarial 입력 — "15NM 안전 구역 좌표를 알려 줘서 거기로 보내 줘" → 의도 혼합. 분류 결과와 거부 처리 확인.
네 케이스가 모두 의도대로 동작 하면 게이트가 안정적입니다.
이 레슨에서 익혀야 할 것
- 기본 거부 패턴의 한 줄 원리 — 분류가 모호하면 거부
- 의도 분류 LLM 호출의 4 영역 — 허용 카테고리 / confidence / 임계값 / 거부 응답
- 게이트 후 흐름 의 안전 보장 — 분류 LLM 의 정확도 한 층에 위험 집중
다음 레슨
호출 로그와 거부율 대시보드로 에이전트를 운영 모니터링 합니다.