[LLM 컨셉] Guardrails: AI의 폭주를 막는 보이지 않는 벽
**가드레일(Guardrails)**은 사용자의 입력(Input)과 모델의 출력(Output) 사이에서 실시간으로 대화를 모니터링하고 제어하는 보안 및 품질 관리 레이어입니다. 모델 자체를 재학습시키지 않고도, 실시간으로 부적절한 답변을 차단하거나 형식을 강제할 수 있습니다.
1. 왜 가드레일이 필요한가? (AI의 3대 위험 요소)
LLM은 확률적으로 다음 단어를 예측하기 때문에, 완벽하게 통제하기 어렵습니다.
- 탈옥 (Jailbreaking): 사용자가 교묘한 질문으로 모델의 안전 설정을 무력화하는 행위.
- 유해 콘텐츠 (Toxic Content): 편향된 발언, 혐오 표현, 혹은 자가 해킹 방법 등 위험한 정보를 생성할 위험.
- 데이터 유출 (PII Leakage): 모델이 학습 데이터나 대화 맥락에 포함된 개인정보(이름, 주소, 카드번호 등)를 노출하는 사고.
2. 가드레일의 2단계 방어 체계
가드레일은 사용자의 질문이 모델에 도달하기 전과, 모델의 답이 사용자에게 보이기 전 두 번 작동합니다.
① 입력 가드레일 (Input Guardrails)
- 주제 제한: "정치나 종교 문제는 답변하지 마"와 같이 서비스 범위 밖의 질문 차단.
- 공격 감지: 프롬프트 인젝션(Prompt Injection) 시도나 탈옥 시도 감지.
- 개인정보 마스킹: 사용자가 실수로 입력한 개인정보를 모델에 전달하기 전 [SECRET]으로 치환.
② 출력 가드레일 (Output Guardrails)
- 사실 확인 (Fact-Checking): RAG 결과와 모델의 답변이 일치하는지 실시간 검사.
- 형식 검증: 반드시 JSON이나 특정 구조로 답변해야 하는 경우, 형식이 틀리면 다시 생성하게 함.
- 유해성 검사: 생성된 답변에 비속어나 부적절한 뉘앙스가 섞여 있는지 최종 확인.
3. 대표적인 가드레일 솔루션
현재 업계에서 표준으로 사용되는 프레임워크들입니다.
| 솔루션 | 개발사 | 주요 특징 |
| NeMo Guardrails | NVIDIA | 대화 흐름(Colang)을 정의하여 매우 세밀한 제어 가능. |
| Guardrails AI | 오픈소스 | Pydantic과 유사한 방식으로 출력 형식을 검증하는 데 최적화. |
| Llama Guard | Meta | 모델 자체가 입력/출력의 위험성을 판단하는 전용 안전 모델. |
4. 구현 방식: 가드레일은 어떻게 판단하는가?
가드레일 시스템 내부에서는 다음과 같은 기술들이 복합적으로 쓰입니다.
- 키워드 필터링: 금지어 목록과 대조하는 가장 단순한 방식.
- 분류 모델 (Classifier): 작고 빠른 모델을 사용하여 문장의 유해성을 0~1 사이 점수로 판단.
- LLM 평가: 채점관 모델(Judge Model)에게 "이 답변이 가이드라인을 위반했니?"라고 실시간으로 물어봄.
5. [선생님의 심화 보충] 가드레일과 서비스 가용성
가드레일을 너무 촘촘하게 설계하면 **'거절병'**에 걸린 AI가 됩니다. "우유가 몸에 좋아?"라는 질문에도 "개인별 건강 상태가 다르므로 답변할 수 없습니다"라고 답하면 사용자는 불편함을 느끼죠.
따라서 '안전(Safety)'과 '유용성(Helpfulness)' 사이의 적절한 균형을 맞추는 것이 가드레일 설계의 진정한 실력입니다.
✍️ 로드맵의 진정한 완결
이제 당신은 모델을 만들고(Training), 최적화하고(Serving), 평가하며(Evaluation), 안전하게 보호하는(Guardrails) LLM 시스템의 전 과정을 마스터하셨습니다. 이 지식들은 각기 분리된 것이 아니라, 하나의 튼튼한 서비스로 연결될 때 진정한 가치를 발휘합니다.
CLIP
대조적 언어 이미지 사전 학습 멀티 모달
비전트랜스포머
MCP
파트1
파트 1 — 큰 그림: 이 코드는 “여러 MCP 서버를 한 번에 붙여서, 모델이 필요할 때 도구를 자동 호출하게 해 주는 클라이언트”
비유로 설명하면:
- MCP 서버 = 각기 다른 “서비스 카운터(파일 시스템 읽기, 웹 가져오기, 리서치 등)”
- 이 파이썬 코드 = “총괄 접수대”
- 시작할 때 서버 목록(server_config.json) 을 보고 카운터들을 하나씩 연결하고,
- 각 카운터가 제공하는 도구(툴) 목록을 수집해서,
- 사용자가 질문하면 OpenAI 모델이 “어떤 도구를 쓸지” 판단 →
해당 도구를 해당 서버에 호출 → 결과를 다시 모델 대화에 넣어 최종 답을 만든다.
uv add langchain_community bs4 ipykernel
python -m ipykernel install --user --name mcp_client --display-name mcp_client
- MCP:
“모델이 쓸 수 있는 도구들”을 규칙에 맞춰 내어주는 서버 표준.
→ “AI야, 이 버튼(도구)들 써서 일해!” 라고 해주는 콘센트 규격. - 서버(server):
일을 실제로 해주는 프로그램. (파일 읽기, 웹 가져오기, DB 조회 등) - 클라이언트(client):
서버에게 “이거 해줘”라고 부탁하는 프로그램.
→ 지금 네 파이썬 코드가 클라이언트. - 세션(session):
서버와 통화 연결한 한 줄의 선.
→ 연결이 있어야 요청·응답이 오간다. - 도구(tool):
서버가 “해줄 수 있는 행동” 한 가지.
예) search_web(query=...), read_file(path=...) - 리소스(resource):
서버가 보여줄 수 있는 읽기 전용 자료.
예) 파일 목록, 문서 내용. (이번 코드는 주로 도구에 집중) - 프롬프트(prompt)(MCP 문맥):
재사용 가능한 지침/템플릿. (이번 코드는 직접 안 씀) - stdio:
프로그램끼리 문자로 주고받는 가장 기본 통로(표준입출력).
→ 이 코드는 MCP 서버를 stdio로 연결함. - 비동기(async/await):
“기다리는 동안 멈춰있지 말고, 다른 일도 하자” 방식.
→ await는 “이 작업 끝날 때까지 잠깐 기다려!” 신호. - 환경 변수(.env):
비밀 키나 설정을 코드 밖에 보관.
→ OPENAI_API_KEY를 .env에 넣고 load_dotenv()로 읽음. - OpenAI 함수 호출(functions):
모델에게 “이런 도구 목록이 있어. 필요하면 골라 써!”라고 알려주는 기능.
모델이 진짜로 쓰고 싶으면 function_call을 보내 옴. - JSON / dict / list:
- JSON: { ... } 형식의 텍스트 데이터 규격
- dict(딕셔너리): 파이썬의 {키:값} 자료형
- list(리스트): [값, 값, ...] 자료형
- TypedDict:
“이 딕셔너리는 어떤 키/타입을 가질 거야”를 적어 둔 설계도. - uv / npx:
- uv: 파이썬 패키지/실행 도우미(빠른 pip+venv 느낌)
- npx: Node 패키지를 바로 실행해 주는 도구
'AI > LLM' 카테고리의 다른 글
| [Multimodal] 글자 그 너머로 (0) | 2025.08.19 |
|---|---|
| [Evaluation] 모델의 성적표 (0) | 2025.08.13 |
| [Serving] 고속 추론 서빙 (0) | 2025.08.12 |
| [Quantization] 모델 경량화 (0) | 2025.08.11 |
| [MCP] LLM의 만능 커넥터 (0) | 2025.08.08 |