1. Vấn đề bộ lọc nội dung LLM streaming
Một guardrail giai đoạn output sàng lọc phản hồi của mô hình. Trên một request non-streaming, điều đó đơn giản: gateway có completion đầy đủ trước khi một byte trả về, nên nó có thể block, mask, hoặc cho qua sạch sẽ. Streaming đảo ngược điều đó. Phản hồi đến dưới dạng một chuỗi delta SSE, mỗi cái được chuyển tiếp tới client ngay khi nó đáp xuống, nên một bộ lọc chờ kết thúc lọc chẳng gì cả. Câu trả lời của OrcaRouter là một stream scanner: khi các delta output tuôn chảy, scanner chạy các quy tắc giai đoạn output của bạn đối với văn bản đang tích lũy và hành động ngay khi một quy tắc kích hoạt — không phải sau khi stream hoàn thành. Hành động bạn soạn quyết định “hành động” nghĩa là gì: mộtblock cắt stream và một flag cho nó đi qua. Một mask có
redact trên output non-streaming, nhưng viết lại trong luồng nằm trong
lộ trình — trên một stream hôm nay, scanner tính toán mask nhưng chỉ hành
động trên quyết định block, nên một quy tắc mask chưa redact một phản
hồi streamed.
Lưu ý này chỉ quan trọng cho các quy tắc giai đoạn output trên các
request streaming. Quy tắc giai đoạn input sàng lọc request trước khi
mô hình chạy, nên chúng hoàn toàn trực tiếp bao gồm masking — và bất kỳ
quy tắc output nào trên một request non-streaming thấy toàn bộ phản hồi và
hành xử bình thường, bao gồm
mask.2. Cái gì an toàn-stream hôm nay
block — an toàn-stream (cắt stream giữa chừng)
block — an toàn-stream (cắt stream giữa chừng)
Một quy tắc
block được thực thi trên output streaming và
non-streaming. Trên một stream, scanner theo dõi các delta; khi một
quy tắc block kích hoạt, nó cắt stream — niêm phong scanner, phát
một thông báo thay thế ngắn ([response truncated by guardrail: … policy violation]) như một delta cuối, và đóng kênh SSE trước khi bất
kỳ nội dung bị block nào nữa đến client. Vì trạng thái phản hồi HTTP đã
được cam kết là 200 đến lúc delta đầu tiên tuôn ra, một block giữa
stream không thể phát lại một trạng thái — nó kết thúc stream đang mở
một cách duyên dáng. Body HTTP 400 guardrail_blocked là hình dạng
block-output non-streaming.Các byte đã tuôn ra client không thể thu lại, nên một block streaming
là nỗ lực tốt nhất trên những gì đã stream nhưng chặn đáng tin cậy
mọi thứ sau match. Để có đảm bảo cứng rằng không byte vi phạm nào từng
được gửi — và để có body 400 guardrail_blocked — gửi request
non-streaming.mask — chỉ output non-streaming (viết lại trong luồng nằm trong lộ trình)
mask — chỉ output non-streaming (viết lại trong luồng nằm trong lộ trình)
Một quy tắc
mask viết lại match — ví dụ một email trong phản hồi trở
thành [EMAIL] — trên output non-streaming, nơi gateway giữ toàn
bộ completion và chuyển tiếp dạng đã redact tới client của bạn.Trên một output streaming hôm nay, scanner tính toán mask nhưng
không chuyển tiếp văn bản đã che — nó chỉ hành động trên quyết định
block — nên một quy tắc mask không redact một phản hồi streamed.
Viết lại output streaming trong luồng nằm trong lộ trình. Cho đến khi
nó được phát hành, nếu bạn cần một phản hồi streamed không bao giờ phơi
bày văn bản đã match, soạn quy tắc thành block (nó kết thúc phản
hồi khi hit) hoặc gửi request non-streaming để mask viết lại toàn
bộ phản hồi.flag — chỉ quan sát, không bao giờ thay đổi traffic
flag — chỉ quan sát, không bao giờ thay đổi traffic
Một quy tắc
flag không bao giờ thay đổi traffic — nó cho các byte đi
qua. Trên output non-streaming, nó ghi lại một match trong
Matches feed, nên bạn có thể đo tỷ lệ kích hoạt của một quy tắc trước
khi thăng cấp nó lên block. Trên một phản hồi streaming, nó vẫn
chỉ-quan-sát và cho các delta đi qua không bị động đến; bản ghi match
có cấu trúc được viết trên đường output non-streaming. Dù cách nào nó
không bao giờ block hay viết lại, nên luôn an toàn để bật.Hành động trên output | Non-streaming | Streaming |
|---|---|---|
block | từ chối phản hồi | cắt stream |
mask | redact phản hồi | chưa — block thay vào đó (lộ trình) |
flag | ghi lại một match | cho đi qua (chỉ quan sát) |
3. Một ví dụ cụ thể — một bộ lọc secret an toàn-stream
Giả sử mô hình của bạn có thể hiện một thông tin xác thực từ context RAG, và app của bạn stream. Bạn muốn gateway giết stream ngay khi một match kiểu-secret xuất hiện, thay vì che nó — một secret bị rò nên kết thúc phản hồi, không phải bị redact một phần. Soạn nó trong console — chỉnh sửa chính sách là một hành động quản lý trên phiên của bạn, gate cho Developer+; relay key chỉ gửi traffic/v1/*:
- Mở
/console/guardrails, New guardrail, đặt tên nóstream-safe-out. - Thêm một quy tắc:
- Type:
regex(hoặc một quy tắcpiivới các entity secret nhưaws_access_key/api_key_openai/jwt) - Stage:
output - Action:
block← kết thúc phản hồi khi hit secret;masksẽ redact nó thay vào đó và cho phần còn lại của phản hồi tiếp tục
- Type:
- Lưu, rồi gắn nó trên
/console/tokenqua dropdown Guardrail của key.
stream: true, y như trước:
4. PII Shield trên một stream
Preset PII Shield là một quy tắcpii duy nhất, hành động mask,
giai đoạn both. Ở giai đoạn input, nó hoàn toàn trực tiếp — nó viết
lại request trước khi mô hình thấy nó, dù streaming hay không. Ở giai đoạn
output, masking redact trên phản hồi non-streaming, nơi gateway
giữ toàn bộ completion trước khi nó trả về.
Trên một output streaming, mask không redact nữa — scanner tính
toán mask nhưng chỉ hành động trên quyết định block, nên một phản hồi
streamed được cho qua, không viết lại. Viết lại output streaming trong
luồng nằm trong lộ trình. Nên nếu mục tiêu của bạn là PII không bao giờ
quan sát được trong một phản hồi streamed, hoặc:
- soạn quy tắc output thành block, chấp nhận rằng một hit kết thúc phản hồi thay vì redact nó, hoặc
- gửi request non-streaming để mask viết lại toàn bộ phản hồi với toàn bộ completion trong tay.
5. Chứng minh nó trước khi bạn phát hành
Đừng đoán tổ hợp giai đoạn/hành động nào giữ vững — xác minh nó.Tab Test
Mỗi editor guardrail có một tab Test: dán một mẫu, chọn giai đoạn
output, và chạy chính sách hiện tại không có cuộc gọi thượng nguồn và
không quota. Xem verdict và, với quy tắc mask, văn bản đã render. Chạy
sandbox là một hành động Developer+ (nó có thể kích hoạt các quy
tắc judge / external trả phí).Tab Eval
Tab Eval chấm một guardrail đối với các corpus JSONL đi kèm hoặc
tùy chỉnh — hữu ích để xác nhận một quy tắc block bắt một rò rỉ đã biết
trên một corpus trước khi bạn gắn một key.
6. Một block streaming tốn gì
Một block streaming mang cùng kế toán như bất kỳ block output nào — mô hình thượng nguồn đã chạy, nên gateway xử lý hoàn lại cho bạn:- Stream được kết thúc với một delta cắt cụt duyên dáng (trạng thái đã là
200); block output non-streaming trả về body HTTP 400
guardrail_blockednêu tên guardrail và quy tắc đã kích hoạt. - Không tính quota. Khi block output từ chối phản hồi, gateway hoàn lại quota đã tiêu trước, nên một cuộc gọi bị block miễn phí với bạn ngay cả khi mô hình đã tạo token.
- Request được đánh dấu skip-retry — chạy lại cùng prompt sẽ chỉ block lại, nên gateway sẽ không đốt một retry trên một channel khác.
GET /api/guardrail/match, mở cho bất kỳ Member nào); chuỗi con đã match
chỉ được bắt khi công tắc Log raw content của guardrail được bật (mặc
định tắt). Chi tiết đầy đủ nằm trong
lỗi guardrail_blocked và
matches feed.
7. Đi đâu tiếp theo
Giai đoạn output
Giai đoạn output đầy đủ — sàng lọc phản hồi của mô hình, block so với
mask, và grounding.
Phạm vi streaming
Ma trận hoàn chỉnh về cái gì được thực thi trên streaming so với
non-streaming trên mọi giai đoạn và hành động.
Hành động
block, mask, và flag chuyên sâu — khi nào mỗi cái là lựa chọn đúng.
Giai đoạn input
Hình ảnh phản chiếu — masking hoàn toàn trực tiếp ở đây, bao gồm trên
streaming.
Khái niệm liên quan
Khái niệm liên quan
Mối đe dọa cái này giải quyết
Mối đe dọa cái này giải quyết
Tài liệu tham khảo engine đầy đủ
Tài liệu tham khảo engine đầy đủ
Guardrails — mọi loại quy tắc, trường, và
route, bao gồm grounding và LLM judge.
