AI/LLM

[Guardrails] 안전한 AI 설계

jumemory 2025. 8. 14. 17:44

[LLM 컨셉] Guardrails: AI의 폭주를 막는 보이지 않는 벽

**가드레일(Guardrails)**은 사용자의 입력(Input)과 모델의 출력(Output) 사이에서 실시간으로 대화를 모니터링하고 제어하는 보안 및 품질 관리 레이어입니다. 모델 자체를 재학습시키지 않고도, 실시간으로 부적절한 답변을 차단하거나 형식을 강제할 수 있습니다.


1. 왜 가드레일이 필요한가? (AI의 3대 위험 요소)

LLM은 확률적으로 다음 단어를 예측하기 때문에, 완벽하게 통제하기 어렵습니다.

  1. 탈옥 (Jailbreaking): 사용자가 교묘한 질문으로 모델의 안전 설정을 무력화하는 행위.
  2. 유해 콘텐츠 (Toxic Content): 편향된 발언, 혐오 표현, 혹은 자가 해킹 방법 등 위험한 정보를 생성할 위험.
  3. 데이터 유출 (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 서버 = 각기 다른 “서비스 카운터(파일 시스템 읽기, 웹 가져오기, 리서치 등)”
  • 이 파이썬 코드 = “총괄 접수대”
    1. 시작할 때 서버 목록(server_config.json) 을 보고 카운터들을 하나씩 연결하고,
    2. 각 카운터가 제공하는 도구(툴) 목록수집해서,
    3. 사용자가 질문하면 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