LLM의 유해 콘텐츠 생성 방지, 편향 완화, 환각 탐지, 그리고 Constitutional AI와 RLHF의 원리를 다루며 안전한 AI 출력을 위한 다층 전략을 설계합니다.
4장에서 가드레일 시스템을 설계했습니다. 이 장에서는 LLM 출력의 콘텐츠 안전성을 깊이 있게 다룹니다. 유해 콘텐츠 분류, 편향 완화, 환각 탐지, 그리고 모델 수준의 안전 정렬 기법인 Constitutional AI와 RLHF를 살펴봅니다.
| 카테고리 | 예시 | 심각도 |
|---|---|---|
| 폭력/위험 | 무기 제조, 폭발물, 신체 위해 | 최고 |
| 아동 안전 | 아동 착취, 그루밍 | 최고 |
| 자해/자살 | 자해 방법, 자살 조장 | 최고 |
| 성적 콘텐츠 | 명시적 성적 내용, 비합의적 상황 | 높음 |
| 혐오/차별 | 인종/성별/종교 차별, 혐오 발언 | 높음 |
| 불법 활동 | 마약 제조, 해킹 도구, 금융 사기 | 높음 |
| 개인 정보 | PII 유출, 신상 정보 공개 | 중간 |
| 허위 정보 | 의료/법률 오정보, 딥페이크 조장 | 중간 |
from azure.ai.contentsafety import ContentSafetyClient
from azure.core.credentials import AzureKeyCredential
client = ContentSafetyClient(
endpoint="https://your-resource.cognitiveservices.azure.com",
credential=AzureKeyCredential("your-key"),
)
def analyze_content(text: str) -> dict:
"""텍스트의 안전성 분석"""
from azure.ai.contentsafety.models import AnalyzeTextOptions
response = client.analyze_text(
AnalyzeTextOptions(text=text)
)
results = {}
for category in response.categories_analysis:
results[category.category] = {
"severity": category.severity, # 0, 2, 4, 6
"is_safe": category.severity <= 2,
}
return resultsAzure Content Safety는 4가지 카테고리(Hate, SelfHarm, Sexual, Violence)에 대해 0(안전)~6(심각)의 심각도를 반환합니다.
async def detect_hallucination(
client,
question: str,
answer: str,
sources: list[str],
) -> dict:
"""답변이 소스에 근거하는지 검증"""
source_text = "\n---\n".join(sources)
response = await client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
messages=[{
"role": "user",
"content": f"""다음 답변이 제공된 소스 자료에 충실한지 검증해주세요.
소스 자료:
{source_text}
질문: {question}
답변: {answer}
검증 결과를 JSON으로:
{{
"is_faithful": true/false,
"unsupported_claims": ["소스에서 확인할 수 없는 주장 목록"],
"confidence": 0.0-1.0
}}""",
}],
)
return parse_json(response.content[0].text)같은 질문에 여러 번 답변을 생성하고, 일관성을 확인합니다.
async def check_self_consistency(
client,
question: str,
num_samples: int = 3,
) -> dict:
"""여러 번 생성하여 일관성 확인"""
answers = []
for _ in range(num_samples):
response = await client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
temperature=0.7,
messages=[{"role": "user", "content": question}],
)
answers.append(response.content[0].text)
# 답변 간 일관성 평가
consistency_check = await client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=300,
messages=[{
"role": "user",
"content": f"""다음 {num_samples}개의 답변이 서로 일관되는지 평가하세요.
{chr(10).join(f'답변 {i+1}: {a}' for i, a in enumerate(answers))}
JSON 응답:
{{"is_consistent": true/false, "inconsistencies": ["불일치 내용"], "confidence": 0.0-1.0}}""",
}],
)
return parse_json(consistency_check.content[0].text)bias_detection_prompt = """다음 텍스트에서 잠재적 편향을 분석해주세요.
텍스트: {text}
다음 편향 유형을 검사:
1. 성별 편향: 특정 성별에 대한 고정관념이나 불균형
2. 인종/민족 편향: 특정 인종이나 민족에 대한 편견
3. 연령 편향: 특정 연령대에 대한 선입견
4. 문화 편향: 특정 문화적 관점의 과대 대표
5. 확증 편향: 한쪽 관점만 제시
JSON 응답:
{{
"has_bias": true/false,
"detected_biases": [
{{"type": "성별", "description": "설명", "severity": "low/medium/high"}}
],
"suggestion": "개선 제안"
}}"""Anthropic이 개발한 Constitutional AI(CAI)는 모델에 "헌법(constitution)"을 부여하여 자체적으로 안전성을 판단하게 합니다.
Constitutional AI 프로세스:
1. 모델이 응답 생성
2. 헌법 원칙에 따라 자체 비판 수행
3. 비판을 반영하여 응답 수정
4. 수정된 응답으로 학습 (RLAIF)
헌법 원칙의 예시:
인간 피드백 기반 강화 학습으로 모델의 안전성을 향상시킵니다.
RLHF 프로세스:
1. 모델이 여러 응답 후보 생성
2. 인간 평가자가 안전/유해 순위 매김
3. 보상 모델(Reward Model) 학습
4. PPO로 정책 최적화
Constitutional AI와 RLHF는 모델 제공사(Anthropic, OpenAI 등)가 모델 학습 시 적용하는 기법입니다. 애플리케이션 개발자가 직접 수행하기 어렵지만, 이 원리를 이해하면 모델의 안전 동작 방식과 한계를 이해하는 데 도움이 됩니다. 개발자의 영역은 주로 가드레일(4장)과 프롬프트 설계(2장)입니다.
고위험 도메인에서는 추가적인 안전 장치가 필요합니다.
DOMAIN_DISCLAIMERS = {
"medical": "이 정보는 의학적 조언을 대체하지 않습니다. 반드시 의료 전문가와 상담하세요.",
"legal": "이 정보는 법률 자문을 대체하지 않습니다. 구체적인 법률 문제는 변호사와 상담하세요.",
"financial": "이 정보는 투자 조언이 아닙니다. 투자 결정 전 전문 금융 자문을 받으세요.",
}
class DomainSafetyGuardrail(BaseGuardrail):
def __init__(self, domain: str):
self.domain = domain
self.disclaimer = DOMAIN_DISCLAIMERS.get(domain, "")
async def check(self, content: str, context: dict) -> GuardrailResult:
# 면책 조항이 포함되어 있는지 확인
if self.domain in ["medical", "legal", "financial"]:
if self.disclaimer and self.disclaimer not in content:
modified = f"{content}\n\n---\n{self.disclaimer}"
return GuardrailResult(
passed=False,
action="modify",
reason="면책 조항 추가",
modified_content=modified,
)
return GuardrailResult(passed=True, action="allow")콘텐츠 안전성은 유해 콘텐츠 분류, 환각 탐지, 편향 완화의 세 축으로 구성됩니다. Azure AI Content Safety 같은 분류 API, LLM 기반 환각 탐지, Constitutional AI의 자체 비판 등 다양한 도구와 기법을 조합하여 안전한 출력을 보장합니다. 고위험 도메인에서는 면책 조항과 전문가 검토를 추가로 포함해야 합니다.
다음 장에서는 LLM 애플리케이션의 인증, 권한 관리, 그리고 에이전트의 도구 접근 제어를 다룹니다.
이 글이 도움이 되셨나요?
LLM 기반 시스템의 인증 아키텍처, 에이전트 도구 접근 제어, 최소 권한 원칙, API 키 관리, 그리고 Human-in-the-Loop 패턴을 실전 중심으로 다룹니다.
LLM 가드레일 시스템의 설계 원리, Llama Guard, NeMo Guardrails, Guardrails AI 등 주요 도구의 비교와 활용, 그리고 커스텀 가드레일 구축을 다룹니다.
AI 시스템의 레드티밍 방법론, 자동화된 보안 테스트, 프롬프트 인젝션 퍼징, 그리고 지속적 보안 검증 파이프라인 구축을 다룹니다.