> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prismgateway.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Guardrails

> กฎที่องค์กรของคุณตั้งไว้ซึ่งทำงานกับทุก prompt และ response ทำอะไรได้บ้าง และอ่านผลอย่างไร

# Guardrails

Guardrail คือกฎที่ผู้ดูแลองค์กรตั้งค่าในคอนโซล กฎจะทำงานภายใน Prism กับทุกคำขอ
chat, messages, embeddings และ image ไม่ว่าจะก่อนที่ prompt ไปถึง provider หรือหลังจาก
response กลับมา และสามารถบล็อกคำขอ เขียนข้อความใหม่ หรือบันทึกสิ่งที่พบ หน้านี้สำหรับ
นักพัฒนาที่เรียก API: กฎทำอะไรกับคำขอของคุณได้บ้าง และดูได้อย่างไร

## กฎทำอะไรได้บ้าง

| Action | ก่อนถึง provider                                                                                           | หลัง response                                                                           |
| ------ | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| `deny` | คำขอถูกปฏิเสธด้วย `400 guardrail_denied` ไม่มีการกันเครดิต                                                 | response ถูกแทนที่ด้วย `400 guardrail_denied` โทเค็นที่ provider สร้างแล้วยังถูกคิดเงิน |
| `mask` | ข้อความที่ตรงเงื่อนไขถูกเขียนใหม่ (เช่น อีเมลกลายเป็น `[EMAIL]`) และ provider เห็น prompt ที่เขียนใหม่แล้ว | ข้อความใน response ถูกเขียนใหม่ก่อนถึงคุณ                                               |
| `log`  | ไม่มีอะไรเปลี่ยน แต่บันทึกสิ่งที่พบใน log และ metrics ของ Prism                                            | เหมือนกัน                                                                               |

การตรวจที่มีในตัว: regular expression แบบ match และ replace, การปิดบังข้อมูลส่วนบุคคล
(อีเมล เบอร์โทรไทย เลขบัตร เลขบัตรประชาชนไทย IBAN), ตรวจ JSON schema ของ response,
นับคำและตัวอักษร, allowlist ของ model และ webhook ไปยังบริการของคุณเอง

## Response แบบ streaming

กฎที่ทำงานหลัง response จะทำงานกับ stream ในโหมด `log` เท่านั้น เพราะข้อมูลถูกส่งไป
แล้วก่อน stream จะจบ กฎ `deny` หรือ `mask` จึงใช้กับ stream ไม่ได้ เมื่อมีกฎ `deny`
ฝั่ง response ที่ใช้กับ route และ model ของคุณ คำขอที่ส่ง `stream: true` จะถูกปฏิเสธ
ตั้งแต่ต้นด้วย `400 guardrail_requires_non_streaming` ให้ส่ง `stream: false` แทน
กฎฝั่ง response เห็นเฉพาะข้อความ response ที่มีแต่ tool call จะไม่ถูกตรวจ

## การอ่านผล

| Header               | ความหมาย                                                                                                                                                                                                                              |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `x-prism-guardrails` | คู่ `check:outcome` คั่นด้วยจุลภาคตามลำดับที่กฎทำงาน เช่น `piiMask:masked,regexMatch:pass` ค่า outcome ได้แก่ `pass`, `denied`, `masked`, `logged`, `error` (การตรวจทำงานไม่สำเร็จและคำขอดำเนินต่อ) และ `skipped` (mask ที่ใช้ไม่ได้) |
| `x-prism-trace-id`   | มีเมื่อคำขอถูกปฏิเสธ เพื่อให้ support ค้นหาได้                                                                                                                                                                                        |

คำขอที่ถูกปฏิเสธจะได้:

```json theme={null}
{
  "error": {
    "message": "Request blocked by guardrail \"No secrets in prompts\".",
    "type": "invalid_request_error",
    "code": "guardrail_denied",
    "details": {
      "guardrail": { "id": "…", "name": "No secrets in prompts", "plugin": "regexMatch" },
      "checks": [{ "plugin": "regexMatch", "outcome": "denied", "data": { "matched": true, "index": 0 } }]
    }
  }
}
```

`details.checks` จากการตรวจในตัวไม่มี prompt หรือข้อความ response ของคุณ มีเพียงสิ่งที่
การตรวจรายงาน ส่วน `data` ของกฎ webhook คือสิ่งที่ endpoint ขององค์กรคุณเองตอบกลับมา

## ข้อจำกัด

กฎที่ทำงานไม่เสร็จในเวลา หรือ webhook ที่ไม่ตอบ จะนับเป็น `error` และคำขอดำเนินต่อ
ผู้ดูแลเลือกให้ปฏิเสธแทนได้ ซึ่งในกรณีนั้นกฎ `deny` หรือ `mask` ที่ทำงานไม่ได้จะปฏิเสธคำขอ
แต่ละคำขอมี budget ของปริมาณข้อความที่กฎตรวจได้ (ค่าเริ่มต้น 131,072 ตัวอักษรรวมทุกข้อความ)
เกินจากนั้นกฎจะถูก `skipped` หรือคำขอถูกปฏิเสธเมื่อ deployment ตั้งเป็น fail closed
การแก้กฎใช้เวลาไม่เกินหนึ่งนาทีจึงมีผลกับทุกคำขอ Guardrails ใช้ได้เมื่อ deployment เปิดใช้

[Read in English](/guardrails)
