1. 스트리밍 guardrail 커버리지 질문
guardrail 규칙은 스테이지(input, output, 또는 both)와 액션 —
다섯 중 하나: block, mask, flag, annotate, 또는 spotlight — 을
운반합니다. 스테이지는 게이트웨이가 그것을 언제 실행할지 결정하고;
액션은 무엇을 하는지 결정합니다. 스트리밍이 답의 형태를 바꾸는 유일한
곳은 output 스테이지입니다 — 그것이 게이트웨이가 바이트를 먼저 전체
페이로드를 쥘 기회 없이 도착하는 대로 클라이언트로 전달하는 유일한
스테이지이기 때문입니다.
따라서 매트릭스에는 스트리밍이 중요한 두 셀이 있고, 그것들은 다르게
동작합니다: 출력 block은 스트림에서 완전히 강제되고(스캐너가 끊음),
출력 mask는 비스트리밍 응답에서만 강제됩니다. 스트리밍 응답에서
스캐너는 여전히 매치를 탐지하고 block 결정에 작용할 수 있지만, 오늘날
마스킹된 텍스트를 스트림에 재작성하지 않습니다 — 인밴드 스트리밍 출력
마스킹은 로드맵에 있습니다.
입력은 결코 문제가 아닙니다. 입력 스테이지 규칙은 모델 전에
실행됩니다 — 게이트웨이는 당신의 요청을 검사하고(
mask의 경우,
재작성하고), 그 다음 정화된 버전을 업스트림으로 전달합니다. 응답이
스트리밍될지는 무관합니다; 요청은 게이트웨이가 전부 쥐는 완전한
페이로드입니다. 입력 스캐닝은 모든 요청에서 완전히 라이브이며, 마스킹
포함입니다.2. 커버리지 매트릭스
이것을 위에서 아래로 읽으세요. 모든 block 셀은 스트리밍을 포함하여 라이브입니다 — 하지만 output + mask + 스트리밍은 스트림에서 아직 강제되지 않는 하나의 셀입니다: mask 규칙은 비스트리밍 응답을 마스킹하고, 스트리밍 응답에서는 델타를 재작성하지 않고 매치를 탐지합니다(스트림 내 출력 마스킹은 로드맵에 있습니다).| 스테이지 · 액션 | 비스트리밍 | 스트리밍 |
|---|---|---|
input · block | 요청을 거부 | 요청을 거부 |
input · mask | 요청을 재작성 | 요청을 재작성 |
output · block | 응답을 거부 | 스트림을 끊음 |
output · mask | 응답을 마스킹 | 매치를 탐지; 스트림 내에서 마스킹 안 함(로드맵) |
| any · flag | 기록만 | 기록만 |
annotate와 spotlight는 트래픽을 거부하지 않고 메모를 첨부(또는 매치된
텍스트를 감싸기)하며 실제로는 입력 스테이지 액션이므로, 위의
출력/스트리밍 셀을 변경하지 않습니다; 다른 규칙처럼 매치를 기록합니다.
input — 완전히 라이브, 양방향 (block + mask)
input — 완전히 라이브, 양방향 (block + mask)
입력 스테이지 규칙은 업스트림 모델이 실행되기 전에 요청을 검사합니다.
block은 호출을 단락시킵니다(HTTP 400 guardrail_blocked, 계량
전이므로 쿼터를 소모하지 않음). mask는 프롬프트의 매치된 필드를
제자리에서 재작성합니다 — 정화된 텍스트가 업스트림으로 가는 것이고,
모델은 원본을 결코 보지 못합니다. 이 중 어느 것도 응답이 스트리밍되는지에
달려 있지 않습니다.output · block — 스트리밍 및 비스트리밍에서 강제됨
output · block — 스트리밍 및 비스트리밍에서 강제됨
비스트리밍 응답에서 완성은 반환되기 전에 전부 검사됩니다 — 차단은
**HTTP 400
guardrail_blocked**로 표시됩니다. 스트리밍 응답에서
스트림 스캐너가 델타가 흐르는 대로 그것을 지켜봅니다; block 규칙이
발동하면 스트림을 끊습니다 — 스캐너를 봉인하고, 나머지 대신 짧은
대체 알림을 내보내고, 추가 차단된 콘텐츠가 클라이언트에 도달하기 전에
SSE 채널을 닫습니다. 그때쯤이면 200 SSE 헤더가 이미 나갔으므로,
스트리밍 차단은 400을 반환할 수 없습니다: HTTP 오류가 아니라 최종
인밴드 델타로 차단을 전달합니다.output · mask — 비스트리밍만 (스트리밍은 로드맵)
output · mask — 비스트리밍만 (스트리밍은 로드맵)
비스트리밍 응답에서
mask 규칙은 완성을 재작성합니다 — 예: 이메일이
[EMAIL]이 됩니다 — 그리고 정화된 텍스트가 클라이언트가 받는
것입니다. 스트리밍 응답에서 스트림 스캐너는 여전히 매치를 탐지하고
마스크를 계산하지만, 마스킹된 텍스트를 델타에 전달하지 않습니다 —
마스킹된 출력은 폐기되고 block 결정에만 작용됩니다. 따라서 mask 규칙은
오늘날 스트리밍 응답을 마스킹하지 않습니다; 인밴드 스트리밍 출력
마스킹은 로드맵에 있습니다. 지금 당장 스트리밍 응답에서 PII를 차단해야
한다면, 규칙을 block으로 작성하거나(스캐너가 매치 시 스트림을 끊음)
비스트리밍으로 검사하세요.flag — 관찰 전용, 어디서나 동일
flag — 관찰 전용, 어디서나 동일
flag 규칙은 결코 트래픽을 변경하지 않습니다 — 매치를 기록하고
바이트를 통과시킵니다. 스테이지와 스트림은 그 동작을 변경하지 않습니다.
규칙을 block으로 프로모트하기 전에 그 히트율을 측정하는 데
사용하세요.3. 하나의 구체적인 예 — 스트리밍 응답에서 PII 차단
모델이 RAG 컨텍스트에서 고객 이메일을 드러낼 수 있고, 당신의 앱이 스트리밍한다고 합시다. 출력mask는 오늘날 스트림에서 마스킹하지
않습니다(스트림 내 출력 마스킹은 로드맵에 있습니다) — 따라서
스트리밍 응답에서 PII를 차단하려면, 출력 규칙을 block으로
작성하세요: 스캐너가 매치가 나타나는 순간 스트림을 죽입니다. (출력
mask는 비스트리밍 응답에서 마스킹합니다.)
정책 편집은 당신의 콘솔 세션에 대한 관리 액션입니다(**Developer+**로
게이팅); sk-orca-... 릴레이 키는 /v1/* 트래픽만 보내고 정책을 결코
편집하지 않습니다.
/console/guardrails를 열고, New guardrail,stream-pii-out으로 이름을 지정합니다.- 규칙을 하나 추가합니다:
- Type: PII detection
- Stage:
output - Action:
block← 매치 시 스트림을 끊음; 스트림에서mask는 탐지만 함(비스트리밍 응답을 마스킹함)
- 저장한 뒤,
/console/token에서 키의 Guardrail 드롭다운을 통해 연결합니다.
stream: true로 게이트웨이를 호출합니다:
4. 매트릭스 전반의 PII Shield
PII Shield 프리셋은 단일pii 규칙, 액션 mask, 스테이지 both
입니다. 그것을 매트릭스에 매핑하면 커버리지는 §2에서 예상하는 것과 정확히
같습니다:
- 입력 스테이지 — 완전히 라이브, 스트리밍이든 아니든. 요청은 모델이 보기 전에 마스킹됩니다(입력 마스킹의 핵심 가치).
- 출력 스테이지, 비스트리밍 — 완성은 반환되기 전에 마스킹됩니다.
- 출력 스테이지, 스트리밍 — 스트림 스캐너는 매치를 탐지하지만 오늘날 델타를 재작성하지 않으므로, 마스킹된 형태가 스트리밍 클라이언트에 도달하지 않습니다(스트림 내 출력 마스킹은 로드맵에 있습니다).
block으로
작성하여(또는 비스트리밍으로 호출하여) 매치 시 스트림이 끊기게 하세요.
PII Shield와
마스킹 형식을 참조하세요.
5. 스트리밍 차단이 소모하는 것
스트리밍 차단은 다른 출력 차단과 동일한 회계를 운반합니다 — 모델이 이미 실행되었으므로, 게이트웨이가 환불을 대신 처리합니다:- 비스트리밍 응답에서 호출은 발동한 guardrail과 규칙을 명시하는
**HTTP 400
guardrail_blocked**를 반환합니다. 스트리밍 응답에서200SSE 헤더가 이미 전송 중이므로, 차단은400대신 최종 인밴드 대체 델타와 깔끔한 채널 닫힘으로 도착합니다. - 쿼터가 청구되지 않습니다. 입력 차단은 계량 전에 발동하고; 출력 차단(스트리밍이든 아니든)은 응답이 거부되면 사전 소모된 쿼터를 환불합니다. 어느 쪽이든 호출자는 아무것도 지불하지 않습니다.
- 요청은 skip-retry로 표시됩니다 — 동일한 프롬프트를 다시 실행해도 그저 다시 차단될 뿐이므로, 게이트웨이는 다른 채널에서 재시도를 태우지 않습니다.
GET /api/guardrail/match, 모든 Member에게 개방); 매치된
부분 문자열은 guardrail의 Log raw content 토글이 켜져 있을 때만
캡처됩니다(기본적으로 꺼짐). 전체 상세는
guardrail_blocked 오류와
matches 피드에 있습니다.
6. 출시 전에 당신의 스테이지/액션 조합 증명하기
매트릭스의 어느 셀이 당신의 정책에 적용되는지 추측하지 마세요 — 검증하세요. 두 도구 모두 관리 API를 통해 당신의 콘솔 세션에서 실행됩니다:Test 탭
각 guardrail 에디터에는 Test 탭이 있습니다: 샘플을 붙여넣고,
스테이지를 선택한 뒤, 업스트림 호출 없이, 쿼터 없이 현재 정책을
실행합니다. 판정과(mask 규칙의 경우) 렌더링된 텍스트를 보세요. Test
샌드박스는 **Developer+**로 게이팅됩니다(유료 judge/grounding 호출과
아웃바운드 통합 요청을 발동할 수 있음).
Eval 탭
Eval 탭은 번들 또는 커스텀 JSONL 코퍼스에 대해 guardrail을
채점합니다 — 키를 연결하기 전에 block 규칙이 알려진 유출을 잡는지
확인하는 데 유용합니다. 평가 실행은 읽기 액세스(viewer+)만 필요합니다.
7. 다음으로 갈 곳
스트림 안전 규칙
스캐너가 SSE 스트림을 도중에 어떻게 끊는지, 그리고 스트리밍 트래픽에서
유지되는 정책을 작성하는 방법.
출력 스테이지
모델의 응답 검사 — block vs. mask, 쿼터 환불, 그리고 grounding.
입력 스테이지
모델 앞에서 요청 검사 — 마스킹 포함, 스트리밍이든 아니든.
액션
block, mask, flag, annotate, spotlight를 심층적으로 — 각각이 올바른
선택일 때.
관련 개념
관련 개념
전체 엔진 레퍼런스
전체 엔진 레퍼런스
Guardrails — grounding과 LLM judge를 포함한
모든 규칙 타입, 필드, 라우트.
