모더레이션 시스템 — OpenAI, Perspective, Llama Guard
운영 모더레이션 시스템(production moderation system)은 12-16강에서 정의한 안전 정책을 실제 서비스 표면에서 작동하게 만듭니다. OpenAI Moderation API의 omni-moderation-latest(2024)는 GPT-4o 기반이며, 한 번의 호출로 텍스트와 이미지를 함께 분류합니다. 이전 버전보다 다국어 테스트셋에서 42% 더 높은 성능을 보였고, 응답 스키마는 13개 범주에 대한 불리언(boolean)을 반환합니다. 범주는 harassment, harassment/threatening, hate, hate/threatening, illicit, illicit/violent, self-harm, self-harm/intent, self-harm/instructions, sexual, sexual/minors, violence, violence/graphic이며, 대부분의 개발자에게 무료로 제공됩니다. 계층형 패턴은 입력 모더레이션(input moderation, 생성 전), 출력 모더레이션(output moderation, 생성 후), 맞춤 모더레이션(custom moderation, 도메인 규칙)으로 구성됩니다. 비동기 병렬 호출은 지연 시간을 숨길 수 있고, 플래그가 지정되면 자리표시자(placeholder) 응답을 보낼 수도 있습니다. Llama Guard 3/4(16강)는 14개 MLCommons 위험(hazard) 범주, Code Interpreter Abuse, 8개 언어(v3), 다중 이미지(v4)를 지원합니다. Perspective API(Google Jigsaw)는 LLM-as-moderator 흐름 이전부터 존재해 온 독성(toxicity) 점수화 시스템입니다. 주로 단일 차원 독성에 severe-toxicity, insult, profanity 같은 변형을 더한 방식이며, 콘텐츠 모더레이션 연구의 기준선(baseline)으로 널리 쓰입니다. 한편 폐기 일정도 함께 살펴야 합니다. Azure Content Moderator는 2024년 2월 폐기(deprecated)되었고 2027년 2월 종료(retired)되며, Azure AI Content Safety로 대체됩니다.
유형: Build
언어: Python (표준 라이브러리, 3계층 모더레이션 하네스)
선수 지식: Phase 18 · 16 (Llama Guard / Garak / PyRIT)
소요 시간: 약 60분
학습 목표
- OpenAI Moderation API의 범주 체계(category taxonomy)를 설명하고, Llama Guard 3의 MLCommons 위험 집합과 어떻게 다른지 비교한다.
- 입력, 출력, 맞춤으로 이루어진 3계층 모더레이션 패턴을 설명하고 각 계층의 대표적인 실패 모드(failure mode)를 하나씩 든다.
- Perspective API가 LLM 이전 시대의 기준선으로 어떤 위치를 갖는지, 왜 연구 영역에서 계속 사용되고 있는지 설명한다.
- Azure Content Moderator의 폐기와 종료 일정을 정확히 말한다.
문제
12-16강에서는 공격 기법과 방어 도구를 다뤘습니다. 29강에서는 사용자가 실제로 제품과 마주치는 표면에서 그 방어를 작동시키는 배포된(deployed) 모더레이션 시스템을 다룹니다. 3계층 패턴은 2026년 기준 운영 환경의 기본 구성입니다.
개념
OpenAI Moderation API
omni-moderation-latest(2024)는 GPT-4o 기반의 모더레이션 엔드포인트입니다. 한 번의 호출만으로 텍스트와 이미지를 함께 분류하며, 대부분의 개발자에게 무료로 제공됩니다.
범주(응답 스키마의 13개 불리언)는 다음과 같습니다.
- harassment, harassment/threatening
- hate, hate/threatening
- self-harm, self-harm/intent, self-harm/instructions
- sexual, sexual/minors
- violence, violence/graphic
- illicit, illicit/violent
멀티모달(multimodal) 지원은 violence, self-harm, sexual에는 적용되지만 sexual/minors에는 적용되지 않으며, 나머지 범주는 텍스트 전용입니다.
code/main.py의 코드 하네스(harness)에서는 교육적 단순성을 위해 /threatening, /intent, /instructions, /graphic 같은 하위 범주를 상위 범주로 접어서 다룹니다. 운영 코드는 13개 범주 전체 스키마를 그대로 사용해야 합니다.
이전 세대 모더레이션 엔드포인트와 비교했을 때 다국어 테스트셋에서 42% 더 나은 성능을 보였습니다. 응답은 범주별 점수로 반환되며, 임계값(threshold)은 애플리케이션 쪽에서 정책에 맞게 설정합니다.
Llama Guard 3/4
16강에서 자세히 다뤘습니다. 14개의 MLCommons 위험 범주를 가지며, OpenAI의 13개 응답 스키마 불리언과는 다른 방식으로 구성됩니다. Llama Guard 3는 8개 언어를 지원하고, Llama Guard 4(2025년 4월 공개)는 네이티브 멀티모달을 지원하는 12B 모델입니다.
OpenAI와 Llama Guard의 분류 체계는 서로 겹치는 부분이 있지만 동일하지는 않습니다. OpenAI는 “illicit”을 하나의 넓은 범주로 묶지만, Llama Guard는 “violent crimes”와 “non-violent crimes”를 별도 범주로 둡니다. 따라서 배포 조직은 자신들의 정책 분류 체계와 얼마나 잘 맞는지를 기준으로 선택하게 됩니다.
Perspective API(Google Jigsaw)
LLM-as-moderator 흐름 이전, 즉 2020년 이전부터 존재해 온 독성(toxicity) 점수화 시스템입니다. 제공하는 범주는 TOXICITY, SEVERE_TOXICITY, INSULT, PROFANITY, THREAT, IDENTITY_ATTACK이며, 단일 차원의 TOXICITY가 핵심 점수이고 나머지는 하위 차원 변형으로 붙습니다.
API가 안정적이고 문서화가 잘 되어 있으며 수년간 축적된 보정(calibration) 데이터가 있기 때문에 콘텐츠 모더레이션 연구의 기준선으로 널리 사용됩니다. 다만 현대적인 LLM 인접 사용 사례에서는 보통 Llama Guard나 OpenAI Moderation 쪽이 더 적합합니다.
3계층 패턴
- 입력 모더레이션. 생성 전에 사용자 프롬프트를 분류합니다. 플래그(flag)되면 곧바로 거절합니다. 지연 시간은 분류기 호출 한 번입니다.
- 출력 모더레이션. 사용자에게 전달하기 전에 모델 출력을 분류합니다. 플래그되면 거절 응답으로 대체합니다. 지연 시간은 생성 이후 분류기 호출 한 번이 추가됩니다.
- 맞춤 모더레이션. 도메인별 규칙입니다. 정규식, 허용 목록(allowlist), 비즈니스 정책 등이 포함되며, 입력 단계나 출력 단계 어느 쪽에서든 실행할 수 있습니다.
세 계층은 의도적으로 순차적으로 동작합니다. 입력 모더레이션은 생성이 시작되기 전에 끝나야 하고, 출력 모더레이션은 생성이 끝난 뒤에 실행됩니다. 병렬성은 한 계층 안에서만 적용됩니다. 예를 들어 같은 텍스트에 대해 OpenAI Moderation, Llama Guard, Perspective를 동시에 실행하면 분류기별 지연 시간을 숨길 수 있습니다. 선택적 최적화로, 입력 모더레이션이 진행되는 동안 “잠시만요, 확인 중입니다...” 같은 자리표시자(placeholder) 응답을 보여주고 첫 번째 토큰(token-1)의 스트리밍을 늦추는 방식도 가능합니다. 플래그 발생 시의 동작은 거절(refuse), 정화(sanitize), 사람 검토(human review)로의 에스컬레이션(escalation) 등 정책에 맞게 설정할 수 있습니다.
실패 모드
- 입력 계층만 사용. 출력 환각(hallucination)을 잡지 못합니다. 12-14강에서 다룬 인코딩 공격은 입력 분류기를 우회합니다.
- 출력 계층만 사용. 어떤 입력이든 모델에 도달하게 됩니다. 그만큼 비용이 늘어나고, 내부 추론 과정이 공격자에게 노출될 수 있습니다.
- 맞춤 계층만 사용. 범주 전반을 견고하게 막지 못합니다. 정규식 기반 규칙은 본질적으로 깨지기 쉽습니다.
따라서 계층형 구성이 기본입니다. 벨트와 멜빵을 함께 차는 식의 이중 안전망(belt-and-suspenders) 접근입니다.
Azure 폐기
Azure Content Moderator는 2024년 2월 폐기되었고 2027년 2월 종료됩니다. 대체 서비스는 Azure AI Content Safety로, LLM 기반이며 Azure OpenAI와 통합되어 동작합니다. 이 마이그레이션(migration)은 Azure 배포 환경에서 2024년부터 2027년까지 이어지는 필드(field) 수준의 장기 프로젝트입니다.
Phase 18에서의 위치
16강은 레드팀(red team) 맥락에서 모더레이션 도구를 다룹니다. 29강은 실제 운영에 배포된 모더레이션을 다룹니다. 30강은 현재의 이중 용도(dual-use) 역량 증거를 살피며 페이즈를 마무리합니다.
사용해보기
code/main.py는 3계층 모더레이션 하네스를 구성합니다. 입력 모더레이터(키워드 + 범주 점수), 출력 모더레이터(출력에 같은 분류기를 적용), 맞춤 모더레이터(도메인 규칙)로 이루어져 있어, 다양한 입력을 통과시켜 보면서 어떤 계층이 어떤 위험을 잡아 내는지 직접 관찰할 수 있습니다.
만들어보기
이 레슨은 outputs/skill-moderation-stack.md를 산출물로 만듭니다. 특정 배포(deployment) 환경이 주어지면, 입력에는 어떤 분류기를 쓸지, 출력에는 어떤 분류기를 쓸지, 어떤 맞춤 규칙을 두고 경계 사례(edge case)에 대한 판정자(judge)를 어떻게 둘지를 함께 제안하는 모더레이션 스택 구성을 권장합니다.
연습문제
-
(쉬움) code/main.py를 실행합니다. 정상(benign), 경계선(borderline), 유해(harmful) 입력을 모두 세 계층에 통과시킨 뒤, 각 입력에서 어떤 계층이 먼저 발화(fire)하는지 정리해 보고합니다.
-
(중간) 특정 범주에 대해 Perspective-API 스타일의 독성 점수를 하네스에 추가합니다. 그리고 그 임계값 동작이 기존 범주 점수와 어떻게 다른지 비교합니다.
-
(중간) OpenAI Moderation API 문서와 Llama Guard 3 범주 목록을 읽고, 각 OpenAI 범주를 가장 가까운 Llama Guard 범주에 매핑합니다. 그중 깔끔하게 매핑되지 않는 범주 세 가지를 식별합니다.
-
(어려움) GitHub Copilot 같은 코드 어시스턴트 배포 환경을 위한 모더레이션 스택을 설계합니다. 가장 관련 있는 범주와 가장 관련 없는 범주를 골라 내고, 그에 맞는 맞춤 규칙을 제안합니다.
-
(어려움) Azure Content Moderator는 2027년 2월에 종료됩니다. Azure AI Content Safety로의 마이그레이션 계획을 세우고, 그 과정에서 가장 위험도가 높은 요소를 식별합니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| OpenAI Moderation | “omni-moderation-latest” | GPT-4o 기반 13개 범주 텍스트 분류기이며 일부 범주에서 멀티모달을 지원하는 모더레이션 엔드포인트이다 |
| Perspective API | “Google Jigsaw 독성” | LLM 이전 시대부터 사용된 독성(toxicity) 점수화 기준선이다 |
| Llama Guard | “MLCommons 14개 범주” | Meta의 위험 분류기로 v3는 8B 규모의 텍스트 모델로 8개 언어를 지원하고, v4는 12B 규모의 멀티모달 모델이다 |
| 입력 모더레이션(Input Moderation) | “생성 전 필터” | 모델 호출 전에 사용자 프롬프트에 적용하는 분류기이다 |
| 출력 모더레이션(Output Moderation) | “생성 후 필터” | 사용자에게 전달하기 전에 모델 출력에 적용하는 분류기이다 |
| 맞춤 모더레이션(Custom Moderation) | “도메인 규칙” | 배포별 규칙으로 정규식, 허용 목록, 비즈니스 정책 등을 포함한다 |
| 계층형 모더레이션(Layered Moderation) | “세 계층 모두” | 입력, 출력, 맞춤 계층을 함께 두는 표준 운영 배포 패턴이다 |
더 읽을거리