Guardrails
Các quy tắc tổ chức của bạn đặt ra cho nội dung đi vào mô hình và nội dung mô hình trả về, chúng được kiểm tra ở đâu và mỗi quy tắc làm gì.
Mỗi tổ chức có đúng một chính sách guardrailGuardrailGuardrailLớp kiểm tra an toàn cho dữ liệu vào và ra khỏi mô hình — ví dụ chặn nội dung có hại hoặc dữ liệu nhạy cảm. Quản trị viên thiết lập cho tổ chức.Mở trong Thuật ngữ; phòng ban và agent không có chính sách riêng. Chính sách này tắt cho tới khi quản trị viên bật nó trong Guardrails của Admin console (bảng điều khiển quản trị), việc này cần quyền hạn org.settings.manage.
Quy tắc chính
- Mỗi tổ chức một chính sách. Phòng ban và agent không có guardrail riêng.
- Văn bản chỉ được kiểm tra một lần, tại nơi nó đi vào cuộc trò chuyện. Nội dung được lưu chính là nội dung mô hình đã thấy.
- Giá trị bị che không được giữ ở đâu cả. Nó được thay bằng tên loại đặt trong ngoặc vuông, ví dụ
[EMAIL]. - Hành động mạnh nhất thắng. Chặn thắng che, che thắng đánh dấu — trên mọi quy tắc và cả hai engine.
- Kết quả phát hiện không bao giờ chứa đoạn văn bản bị khớp. Nó chỉ ghi điểm kiểm tra, loại, đối tượng và hành động.
Quy tắc
Một quy tắc nêu cần bắt cái gì, tìm ở đâu và làm gì khi tìm thấy.
| Thành phần | Giá trị |
|---|---|
| Loại | Dữ liệu cá nhân, chủ đề, nội dung độc hại, tấn công prompt |
| Đối tượng | Một loại định danh, một chủ đề có tên, một nhóm nội dung, hoặc đối tượng duy nhất là tấn công prompt |
| Hành động | Chặn, che hoặc đánh dấu. Chỉ dữ liệu cá nhân mới che được |
| Điểm kiểm tra | Bất kỳ tổ hợp nào của tin nhắn, kết quả tool, tài liệu và câu trả lời |
- Quy tắc mới được kiểm tra ở cả bốn điểm — trừ tấn công prompt, chỉ được kiểm tra trong kết quả tool và tài liệu, vì cùng một chỉ dẫn đó là vô hại khi nằm trong chính tin nhắn của người dùng.
- Một chủ đề gồm một định nghĩa và tối đa năm câu ví dụ.
Điểm kiểm tra
Mỗi điểm kiểm tra nhìn thấy văn bản đúng lúc nó đi vào cuộc trò chuyện.
| Điểm kiểm tra | Kiểm tra khi | Chặn | Che | Đánh dấu |
|---|---|---|---|---|
| Tin nhắn | Trước khi một lượt bắt đầu, và khi một tin nhắn được gửi chen vào lượt đang chạy | Lượt thất bại và không có lần gọi mô hình nào. Tin nhắn được lưu với mọi giá trị khớp quy tắc chặn hoặc che đã bị thay bằng tên loại; các lượt sau không bao giờ phát lại nó. Tin nhắn bị chặn khi gửi giữa lượt sẽ bị từ chối và không được lưu | Tin nhắn đã che được lưu và gửi đi | Được ghi lại |
| Kết quả tool | Sau khi một tool có dữ liệu từ bên ngoài portal trả về: tìm kiếm và đọc web, ứng dụng MCP, hàm tuỳ chỉnh, sandbox chạy code | Lần gọi thất bại kèm lý do, mô hình tiếp tục làm việc | Mô hình và bản ghi hội thoại nhận kết quả đã che | Tấn công prompt được chuyển tiếp kèm ghi chú yêu cầu mô hình đọc nó như dữ liệu |
| Tài liệu | Trong lúc nạp, trên từng phần trước khi cắt thành đoạn | Phần đó bị loại khỏi chỉ mục và được đếm trên tài liệu | Phần đó được lưu và nhúng ở dạng đã che; hàng tiêu đề của bảng được kiểm tra lại riêng, vì mọi đoạn của bảng đều lặp lại nó | Tấn công prompt được lưu với cùng ghi chú đặt ở đầu |
| Câu trả lời | Trong lúc câu trả lời đang hiển thị | Phần đã hiển thị được giữ nguyên; lượt dừng lại. Các lượt sau vẫn phát lại câu hỏi của lượt đó | Câu trả lời đã che được hiển thị, lưu lại và được lần gọi mô hình kế tiếp đọc | Được ghi lại |
Những gì không bị kiểm tra lại như kết quả tool:
- Tìm kiếm tri thức, đọc tài liệu và tìm trong tệp đính kèm — chúng trả về các phần đã được kiểm tra lúc nạp.
- Workspace — nơi chứa các tệp do chính agent viết ra.
Tài liệu giữ nguyên kết quả kiểm tra lúc được lập chỉ mục. Sửa quy tắc không kiểm tra lại các tài liệu đã lập chỉ mục; xử lý lại một tài liệu sẽ áp dụng các quy tắc đang có hiệu lực.
Người dùng thấy gì
Chip che. Giá trị bị che hiện trong khung chat dưới dạng một chip ghi tên loại của nó, ví dụ Bank account number, kèm chú thích rằng guardrail của tổ chức đã thay nó trước khi nó tới AI.
- Với tin nhắn người dùng gửi từ cùng thẻ trình duyệt, chip có thể hiện và ẩn giá trị họ đã gõ: thẻ đó giữ trong bộ nhớ những gì nó đã gửi và khớp với văn bản đã che.
- Sau khi tải lại trang, ở thẻ khác, hoặc trong câu trả lời do mô hình viết, chip không có gì để hiện — không còn bản sao nào của giá trị ở bất kỳ đâu.
Dòng kết quả phát hiện. Mỗi kết quả được liệt kê dưới tin nhắn nơi nó được tìm thấy: kết quả trong tin nhắn của người dùng nằm dưới câu hỏi mở đầu lượt; kết quả trong kết quả tool hoặc câu trả lời nằm dưới câu trả lời cuối của lượt. Mỗi tổ hợp hành động và điểm kiểm tra có một dòng, nêu tên các đối tượng:
- Flagged (đã đánh dấu) — đánh dấu không thay đổi gì; chú thích của nó cho biết kết quả đã được ghi lại để xem xét.
- Masked before the AI read it (đã che trước khi AI đọc)
- Masked in the answer (đã che trong câu trả lời)
- Masked in a tool result (đã che trong kết quả tool)
- Tool result withheld (kết quả tool bị giữ lại)
Ngoài ra:
- Kết quả trong tin nhắn gửi chen vào lượt đang chạy được xếp dưới câu hỏi của lượt.
- Tải lại trang vẫn thấy đúng các dòng đó, vì bản ghi hội thoại đọc lại chúng từ các kết quả đã lưu.
- Engine bị lỗi không được tính là một kết quả phát hiện.
- Tin nhắn hoặc câu trả lời bị chặn không có dòng nào. Thay vào đó lượt kết thúc bằng một thẻ, trình bày khác với lỗi thông thường, nêu quy tắc đã chặn gì và nên làm gì tiếp.
Cách kiểm tra câu trả lời
Khi mọi quy tắc ở điểm kiểm tra câu trả lời chỉ đánh dấu, câu trả lời hiển thị như bình thường và từng khối hoàn chỉnh được kiểm tra sau đó.
Khi có quy tắc ở đó có thể chặn hoặc che, câu trả lời được giữ lại và nhả ra theo từng lần kiểm tra:
- Mỗi lần kiểm tra lấy mọi câu đã viết xong tới thời điểm đó, trong một cửa sổ ký tự nhất định — nên chữ hiện lên màn hình chậm hơn mô hình một câu.
- Các câu viết xong trong lúc một lần kiểm tra đang chạy sẽ vào lần kế tiếp, nên engine chậm hơn chỉ đơn giản là kiểm tra thưa hơn.
- Đoạn văn không có dấu kết câu — ví dụ một dòng kết thúc bằng dấu hai chấm trước lần gọi tool — được kiểm tra và nhả ra ngay khi có bất cứ thứ gì khác văn bản xuất hiện, nên nó luôn hiện trước dòng tool theo sau.
- Dấu kết câu là dấu chấm, chấm hỏi, chấm than hoặc dấu ba chấm theo sau là khoảng trắng, hoặc một dòng trống. Một lần xuống dòng đơn lẻ thì không, vì nó có thể ngăn cách một nhãn như
Số tài khoản:với con số đi kèm. - Không định danh nào mà quy tắc che chứa dấu kết câu, nên một giá trị không bao giờ bị tách giữa hai lần kiểm tra.
Các engine
Mỗi engine báo cáo những gì nó tìm thấy; quy tắc của tổ chức bạn quyết định hành động. Hành động mạnh nhất trong các kết quả sẽ thắng: chặn hơn che, che hơn đánh dấu.
| Engine mẫu (pattern) | Engine Bedrock | |
|---|---|---|
| Chạy | Bên trong backend, ở mọi lần kiểm tra | Chỉ khi được bật trong chính sách (tắt với tổ chức mới) |
| Chi phí | Không mất phí | AWS tính phí theo mỗi 1.000 ký tự cho từng chính sách nó chạy |
| Tốc độ | Chạy ngay trong tiến trình | Khoảng 0,7 giây mỗi lần gọi |
| Phát hiện | Định danh Việt Nam và dữ liệu cá nhân khác (bên dưới) | Chủ đề, nội dung độc hại, tấn công prompt và các loại dữ liệu cá nhân Bedrock nhận diện được |
Engine mẫu
Phát hiện, không mất phí:
- địa chỉ email
- số di động Việt Nam
- số căn cước công dân (CCCD)
- mã số thuế — chỉ khi có từ khoá hoặc hậu tố chi nhánh, vì một dãy mười chữ số đứng riêng được hiểu là số điện thoại
- số thẻ thanh toán vượt qua kiểm tra Luhn
- số tài khoản ngân hàng đứng sau một từ khoá như
STKhoặcsố tài khoản
Engine Bedrock
Bao quát chủ đề, nội dung độc hại, tấn công prompt và các loại dữ liệu cá nhân BedrockAmazon BedrockAmazon BedrockDịch vụ mô hình của AWS, chạy trong region của tài khoản bạn. Mô hình và embedding của portal đến từ đây, luôn qua LiteLLM.Mở trong Thuật ngữ nhận diện được: tên người, địa chỉ, tuổi, mật khẩu, tên đăng nhập, địa chỉ IP, địa chỉ web, số thẻ, IBAN và mã SWIFT. Nó chạy trong vùng AWS của tổ chức bạn. Bedrock báo cáo giá trị dữ liệu cá nhân theo chính đoạn văn bản đó, nên mọi lần xuất hiện của đoạn văn bản ấy trong phần được kiểm tra đều bị che.
Mọi bộ lọc Bedrock chạy ở chế độ phát hiện: Bedrock báo cáo những gì tìm thấy, còn quy tắc của portal quyết định điều gì xảy ra.
Chạy cả hai engine
- Mọi lần kiểm tra đều chạy engine mẫu.
- Khi Bedrock tắt, không lần kiểm tra nào gọi Bedrock và không phát sinh phí. Các quy tắc chỉ Bedrock kiểm tra được vẫn được giữ nhưng bị bỏ qua, và không thể thêm quy tắc cho đối tượng thuộc Bedrock.
- Khi bật Bedrock, guardrail Bedrock của tổ chức được xuất bản trước lần kiểm tra kế tiếp. Cho tới khi phiên bản đầu tiên được xuất bản, engine Bedrock không kiểm tra gì và chỉ engine mẫu chạy.
- Khi cả hai cùng chạy, hành động mạnh nhất trong kết quả của bất kỳ engine nào sẽ thắng.
- Nếu đồng bộ với Bedrock thất bại, lý do được lưu trên chính sách; trang Guardrails hiển thị lý do kèm nút thử lại.
Tầng Standard và Classic
Ở các vùng bắt đầu bằng us-, eu- và ap-, guardrail dùng tầng Standard của Bedrock thông qua hồ sơ liên vùng tương ứng, ví dụ apac.guardrail.v1:0. Các vùng khác dùng tầng Classic, vốn chỉ đọc được tiếng Anh, tiếng Pháp và tiếng Tây Ban Nha.
Khi thử nghiệm, tầng Standard đã phát hiện một chủ đề về lương, nội dung thù ghét, bạo lực, một tấn công prompt và tên người trong các câu tiếng Việt, đồng thời không đánh dấu câu nào trong hai câu hỏi thông thường.
Quyền AWS
Role gắn với backend cần các quyền sau, với <account-id> thay bằng tài khoản của bản triển khai:
{
"Sid": "BedrockGuardrails",
"Effect": "Allow",
"Action": [
"bedrock:CreateGuardrail",
"bedrock:UpdateGuardrail",
"bedrock:GetGuardrail",
"bedrock:CreateGuardrailVersion",
"bedrock:DeleteGuardrail",
"bedrock:ApplyGuardrail"
],
"Resource": [
"arn:aws:bedrock:*:<account-id>:guardrail/*",
"arn:aws:bedrock:*:<account-id>:guardrail-profile/*"
]
}Chi phí
Mỗi lần kiểm tra bằng Bedrock được tính giá theo số đơn vị văn bản nó báo cáo, theo giá niêm yết của AWS:
| Chính sách | Giá |
|---|---|
| Chủ đề và bộ lọc nội dung, gồm cả tấn công prompt | 0,15 USD mỗi 1.000 đơn vị |
| Dữ liệu cá nhân | 0,10 USD mỗi 1.000 đơn vị |
Mỗi lần kiểm tra có phát sinh phí được cộng vào khoản phí theo ngày của người dùng và phòng ban mà lần kiểm tra đó chạy cho — dù có tìm thấy gì hay không.
Khi lần kiểm tra thất bại
Lần kiểm tra không chạy được sẽ được thử lại một lần. Điều xảy ra tiếp theo do chính sách của bạn quyết định:
- Chặn (mặc định) từ chối văn bản. Tin nhắn hoặc câu trả lời bị từ chối làm lượt thất bại, còn phần tài liệu bị từ chối làm lần nạp thất bại — lần nạp sẽ chạy lại thay vì để lại một tài liệu không có gì trong chỉ mục.
- Cho phép để văn bản đi qua và ghi lại lỗi.
Bản ghi kết quả phát hiện
Mỗi kết quả khớp quy tắc tạo một bản ghi, và mỗi lần kiểm tra thất bại tạo thêm một bản ghi. Bản ghi nêu:
- tổ chức, phòng ban và người dùng
- điểm kiểm tra, loại, đối tượng, hành động và engine
- thứ được kiểm tra: lượt, lần gọi tool hoặc tài liệu
Bản ghi không bao giờ chứa đoạn văn bản bị khớp và chỉ được ghi thêm, không sửa. Thẻ Guardrails của nhật ký kiểm tra liệt kê các bản ghi này. Tin nhắn bị từ chối trước khi lượt bắt đầu còn để lại một bản ghi lần gọi mô hình với trạng thái tiếp nhận BLOCKED_GUARDRAIL — xem Kiểm tra và theo dõi chi phí.
Vì sao hoạt động như vậy
Vì sao chỉ kiểm tra văn bản một lần, tại nơi nó đi vào?
Nội dung được lưu chính là nội dung mô hình đã thấy. Tìm kiếm tri thức, đọc tài liệu và tìm trong tệp đính kèm trả về các phần đã được kiểm tra lúc nạp, còn workspace chỉ chứa tệp do agent viết ra, nên không cái nào bị kiểm tra lại như kết quả tool.
Vì sao không kiểm tra tấn công prompt trong tin nhắn của chính người dùng?
Một chỉ dẫn như “bỏ qua các chỉ dẫn trước đó” là vô hại khi chính người dùng gõ ra. Cùng đoạn văn bản đó nằm trong trang web, kết quả tool hay tài liệu lại là một cuộc tấn công nhắm vào agent, nên quy tắc tìm ở những nơi đó.
Vì sao câu trả lời được nhả ra từng câu một?
Quy tắc che hoặc chặn phải thấy trọn vẹn một giá trị trước khi người dùng thấy. Cắt tại dấu kết câu giữ mọi định danh trong cùng một lần kiểm tra, và các câu viết xong trong lúc đang kiểm tra chỉ đơn giản dồn vào lần kế tiếp, nên engine chậm hơn sẽ kiểm tra thưa hơn.
Bên trong hệ thống
Mã lỗi khi lượt thất bại
| Mã | Khi nào |
|---|---|
guardrail_blocked | Tin nhắn bị chặn trước khi lượt bắt đầu |
guardrail_blocked_output | Câu trả lời bị chặn khi đang hiển thị |
guardrail_unavailable | Không kiểm tra được tin nhắn và chính sách từ chối khi lỗi |
guardrail_unavailable_output | Không kiểm tra được câu trả lời và chính sách từ chối khi lỗi |
Cấu hình và lưu trữ
| Tên | Ý nghĩa |
|---|---|
GUARDRAIL_OUTPUT_WINDOW | Cửa sổ, tính bằng ký tự, trong đó một lần kiểm tra câu trả lời cắt tại dấu kết câu cuối cùng |
usage.guardrail_events | Một dòng chỉ-ghi-thêm cho mỗi kết quả phát hiện và mỗi lần kiểm tra thất bại |
usage.guardrail_charges | Phí Bedrock theo ngày cho từng người dùng và phòng ban |
Kết quả phát hiện trực tiếp trong luồng
Trong lúc lượt chạy, luồng mang một frame guardrail cho mỗi lần kiểm tra tìm thấy gì đó. Backend ghi một frame cho tin nhắn của người dùng trước khi agent bắt đầu; môi trường chạy agent ghi một frame sau mỗi lần kiểm tra kết quả tool hoặc câu trả lời. Không frame nào được lưu: bản ghi hội thoại đọc kết quả của mọi lượt từ usage.guardrail_events, theo lượt. Lần kiểm tra ghi lại lượt chứ không ghi lại tin nhắn, vì thế kết quả trong tin nhắn gửi chen giữa lượt được xếp dưới câu hỏi của lượt.
Cách guardrail Bedrock được giữ đồng bộ
- Backend gọi trực tiếp
ApplyGuardrailbằng AWS SDK, với nguồnOUTPUTcho câu trả lời vàINPUTcho mọi chỗ khác. - Mỗi tổ chức có một guardrail Bedrock tên
portal-<organisation id>, do backend tạo và giữ khớp với các quy tắc Bedrock xử lý. - Thêm hoặc xoá một quy tắc như vậy sẽ cập nhật guardrail và xuất bản phiên bản mới; chính sách trỏ sang phiên bản đó khi nó sẵn sàng, và phiên bản trước bị xoá. Đổi hành động hoặc điểm kiểm tra của quy tắc không thay đổi gì trong Bedrock và không xuất bản gì.
- Chủ đề được gửi tới Bedrock dưới một tên suy ra từ mã băm của tên chủ đề trong portal, vì Bedrock chỉ chấp nhận chữ cái ASCII, chữ số và vài ký hiệu trong tên chủ đề. Định nghĩa và câu ví dụ được gửi nguyên văn.
- Backend cũng đồng bộ mọi tổ chức có quy tắc mỗi khi khởi động.