데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
NeMo Guardrails는 NVIDIA가 개발한 오픈소스 LLM 안전장치 라이브러리입니다. 대화형 AI 애플리케이션에 프로그래밍 가능한 가드레일을 추가하여 환각(hallucination), 유해 콘텐츠, 프롬프트 인젝션, 탈옥(jailbreak) 공격 등을 방어합니다. Python 기반으로 LangChain, RAG, custom LLM과 쉽게 통합됩니다.
대화에서 허용/금지 토픽을 정의하고 위반 시 차단 또는 리디렉션. 예: 금융 상담, 의료 진단 등 민감 영역 제어.
입출력 콘텐츠에 대한 유해성, 편향, 폭력성, 성적 콘텐츠 등 다차원 안전 검사. 사전 학습된 안전 분류기 사용.
Colang DSL 기반의 상태 머신으로 대화 흐름을 설계. 사용자 의도에 따라 LLM 응답 전/후 조건부 검증.
NeMo Guardrails는 독립적인 가드레일 레이어를 제공하여 운영 안정성과 규정 준수를 강화합니다. 아래 비교표를 통해 기존 접근 방식과의 차이를 확인하세요.
| 항목 | NeMo Guardrails | OpenAI Moderation | LangChain Guardrails | 자체 규칙 엔진 |
|---|---|---|---|---|
| 커스텀 정책 | Colang DSL로 유연한 규칙 | 고정 카테고리 | 체인 구성에 의존 | 수동 구현 필요 |
| 대화 흐름 제어 | 상태 머신 기반 (강력) | 없음 | 부분적 (체인 순서) | 직접 구현 |
| 환각 탐지 | 출력 검증 + 사실 확인 | 미지원 | 확장 가능 | 별도 구축 |
| Jailbreak 대응 | 전용 분류기 + 프롬프트 분석 | 기본 탐지 | 부재 | 취약 |
| 멀티 LLM 지원 | OpenAI, Llama, Anthropic 등 | OpenAI 전용 | 다수 지원 | 제한적 |
NeMo Guardrails의 아키텍처는 크게 입력 가드레일, LLM, 출력 가드레일로 구성됩니다. 아래 다이어그램은 일반적인 요청 흐름을 보여줍니다.
┌──────────┐ ┌─────────────────┐ ┌──────────┐ ┌──────────────────┐
│ 사용자 │ ──→ │ Input Rails │ ──→ │ LLM │ ──→ │ Output Rails │
│ (query) │ │ · 토픽 검사 │ │ (대화) │ │ · 안전 검사 │
└──────────┘ │ · 프롬프트 검증 │ └──────────┘ │ · 사실 확인 │
│ · jailbreak 탐지 │ │ · 포맷 검증 │
└─────────────────┘ └──────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ Action/ │ │ 최종 응답 │
│ 중단/수정 │ │ (필터링됨) │
└─────────────────┘ └──────────────────┘
.co 파일에 작성.5분 안에 NeMo Guardrails를 설치하고 첫 가드레일을 동작시켜 봅니다.
pip install nemoguardrails
# 선택: NVIDIA AI Enterprise 사용 시
pip install nemoguardrails[enterprise]
models:
- type: main
engine: openai
model: gpt-4o-mini
rails:
input:
flows:
- check jailbreak
- check toxic language
output:
flows:
- check factual consistency
- check harmful content
from nemoguardrails import RailsConfig, LLMRails
# 설정 로드
config = RailsConfig.from_path("./config.yml")
rails = LLMRails(config)
# 사용자 메시지에 가드레일 적용
response = rails.generate(
messages=[{"role": "user", "content": "비밀번호를 알려줘"}]
)
print(response) # 가드레일에 의해 차단 또는 안전한 응답
# 대화형 셸 시작 (config.yml 있는 디렉토리에서)
nemoguardrails chat
# 단일 입력 테스트
echo "내일 주식 추천해줘" | nemoguardrails evaluate --config config.yml
가장 자주 사용되는 config.yml 설정 항목을 표로 정리했습니다.
| 키 | 타입 | 설명 | 예시 |
|---|---|---|---|
models[].engine |
string | LLM 엔진 (openai, anthropic, llama 등) | openai |
models[].model |
string | 사용할 모델 ID | gpt-4o-mini |
rails.input.flows |
list | 입력 시 실행할 가드레일 플로우 목록 | ["check jailbreak"] |
rails.output.flows |
list | 출력 시 실행할 가드레일 플로우 목록 | ["check factual"] |
factchecking.enabled |
bool | 사실 확인 활성화 (RAG 환경 권장) | true |
factchecking.strategy |
string | 검증 전략 (selfask, entailment) | entailment |
colang.version |
string | Colang DSL 버전 (현재 0.3) | "0.3" |
total_safety.enabled |
bool | 종합 안전 분류기 활성화 | true |
factchecking을 활성화하면 추가 LLM 호출이 발생하므로 비용과 지연시간에 유의하세요.
프로덕션에서는 임계값 튜닝이 필수입니다.
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| 가드레일이 너무 자주 차단 | 임계값이 너무 낮음 | config.yml에서 safety_threshold 조정 |
| LLM 응답 지연 증가 | 동기식 가드레일 체인 | 비동기 실행 사용, 불필요한 검사 비활성화 |
| 프롬프트 인젝션 탐지 실패 | 분류기 모델 미세조정 필요 | 전용 jailbreak 데이터로 fine-tuning 또는 별도 규칙 추가 |
| Colang 규칙이 동작하지 않음 | DSL 문법 오류 | nemoguardrails validate config.yml로 사전 검증 |
| OpenAI API 키 에러 | 환경변수 미설정 | export OPENAI_API_KEY=sk-... |
guardrails_logger를 활성화하여 차단 내역을 분석하고 정책을 개선.common.co로 분리하고 include로 불러오기.