콘텐츠로 이동

LLM Guard - LLM 보안 도구 키트 치트시트

LLM Guard - LLM 보안 도구 키트 치트시트

LLM Guard (Protect AI 작성)는 LLM 애플리케이션을 위한 오픈소스 보안 도구 키트다. 입력 스캐너 (사용자의 프롬프트가 모델에 도달하기 전에 적용) 및 출력 스캐너 (모델의 응답이 사용자에 도달하기 전에 적용)의 라이브러리를 제공하여 프롬프트 주입, 탈옥, 독성, PII 누출, 비밀, 금지된 주제 등을 감지하고 완화한다. 스캐너는 콘텐츠를 살균하고, 위험을 점수화하며, 불안전한 요청을 차단할 수 있으므로 프로덕션 LLM 앱을 위한 실용적인 가드레일 계층이 된다.

설치

방법명령어
pippip install llm-guard
ONNX (더 빠름) 포함pip install "llm-guard[onnxruntime]"
API 서버 (Docker)공식 llm-guard-api 이미지 실행
첫 실행스캐너 모델 다운로드 (transformers)
확인python -c "import llm_guard; print('ok')"

두 가지 스캔 단계

단계적용 대상목적
Input 스캐너사용자 프롬프트악의적/불안전한 입력이 모델에 도달하는 것 중지
Output 스캐너모델 응답불안전/누출 출력이 사용자에 도달하는 것 중지

입력 스캔

from llm_guard import scan_prompt
from llm_guard.input_scanners import PromptInjection, Toxicity, Secrets

scanners = [PromptInjection(), Toxicity(), Secrets()]
sanitized, results, risk = scan_prompt(scanners, user_prompt)

if any(not ok for ok in results.values()):
    raise ValueError("Unsafe prompt blocked")
반환의미
sanitized(가능하게 수정된) 프롬프트
results스캐너별 통과/실패
risk스캐너별 위험 점수 (0–1)

입력 스캐너

스캐너감지
PromptInjection주입/탈옥 시도
Toxicity독성/모욕적 언어
SecretsAPI 키, 프롬프트의 토큰
AnonymizePII (나중에 익명화 해제하는 기능 포함 수정)
BanTopics금지된 주제
BanSubstrings / BanCompetitors금지 목록
Code코드 / 특정 언어의 존재
TokenLimit과도하게 큰 프롬프트
Language예상치 못한 언어

출력 스캔

from llm_guard import scan_output
from llm_guard.output_scanners import NoRefusal, Sensitive, Relevance

scanners = [NoRefusal(), Sensitive(), Relevance()]
sanitized_resp, results, risk = scan_output(scanners, prompt, model_response)

출력 스캐너

스캐너확인
Sensitive응답에서 누출되는 PII/비밀
NoRefusal거부 감지 (품질/가드레일 신호)
Relevance응답이 실제로 프롬프트에 답변
Toxicity독성 출력
Bias편향된 콘텐츠
MaliciousURLs출력의 위험한 링크
Deanonymize신뢰할 수 있는 표시를 위해 수정된 PII 복원
FactualConsistency응답이 컨텍스트와 일치

PII 익명화 / 익명화 해제 흐름

from llm_guard.input_scanners import Anonymize
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault

vault = Vault()
safe_prompt, _, _ = scan_prompt([Anonymize(vault)], user_prompt)
# ... safe_prompt로 모델 호출 ...
final, _, _ = scan_output([Deanonymize(vault)], safe_prompt, model_response)

Vault는 최종 답변에서 수정된 엔티티를 복원할 수 있도록 매핑을 저장한다.

배포

옵션참고
프로세스 내 라이브러리scan_prompt/scan_output 임포트 및 호출
API 서버언어 불가지론적 게이트웨이용 llm-guard-api
ONNX 런타임스캐너 모델의 더 빠른 CPU 추론
설정스캐너별 빠른 실패, 임계값, 매치 전략

일반적인 워크플로우

# 모든 LLM 호출 주위 가드레일 래퍼
def guarded_chat(user_input):
    prompt, r_in, _ = scan_prompt(input_scanners, user_input)
    if not all(r_in.values()):
        return "Request blocked by safety policy."
    resp = call_llm(prompt)
    out, r_out, _ = scan_output(output_scanners, prompt, resp)
    return out if all(r_out.values()) else "Response withheld by safety policy."

LLM Guard vs 관련 도구

측면LLM GuardNeMo GuardrailsGarak
역할입력/출력 스캐너 (런타임)프로그래밍 가능한 대화 레일LLM 취약점 스캐너 (테스팅)
포커스주입, PII, 독성, 비밀대화 흐름 제어레드 팀/프로빙
시기요청 경로에요청 경로에배포 전 테스팅
최고드롭인 가드레일복잡한 규칙 기반 흐름약점 찾기

자료