Guardrails AI: Validasi dan Filter Output LLM
Pendahuluan
Large Language Models (LLM) sangat powerful dalam menghasilkan teks, tetapi output-nya tidak selalu dapat diandalkan. LLM bisa menghasilkan informasi yang tidak akurat, mengandung data sensitif seperti PII (Personally Identifiable Information), atau tidak sesuai dengan format yang diharapkan. Dalam aplikasi produksi, terutama yang berhadapan langsung dengan pengguna, hal ini bisa menjadi masalah serius.
Guardrails AI hadir sebagai solusi untuk memvalidasi, memfilter, dan memstrukturkan output LLM. Framework ini menyediakan lapisan keamanan antara LLM dan pengguna akhir, memastikan bahwa setiap respons memenuhi kriteria kualitas dan keamanan yang telah ditentukan.
Dalam tutorial ini, kita akan mempelajari cara menggunakan Guardrails AI mulai dari instalasi, penggunaan Guard object, berbagai validator bawaan, integrasi dengan Pydantic, hingga membangun chatbot yang aman untuk pelanggan.
Instalasi
Instal Guardrails AI dan dependensi yang diperlukan:
pip install guardrails-ai
Setelah instalasi, konfigurasi Guardrails CLI dan instal validator dari Guardrails Hub:
guardrails configure
Instal validator dari Hub
guardrails hub install hub://guardrails/regexmatch
guardrails hub install hub://guardrails/detectpii
guardrails hub install hub://guardrails/toxicity
guardrails hub install hub://guardrails/provenancellm
Pastikan API key LLM Anda sudah dikonfigurasi:
export OPENAIAPIKEY="sk-your-api-key-here"
Guard Object
Guard adalah objek utama dalam Guardrails AI. Guard berfungsi sebagai wrapper di sekitar pemanggilan LLM, menambahkan validasi pada input dan/atau output.
from guardrails import Guard
from guardrails.hub import RegexMatch
import openai
Buat Guard sederhana
guard = Guard().use(
RegexMatch(regex=r"^\d{4}-\d{2}-\d{2}$",
onfail="exception")
)
Gunakan Guard untuk memanggil LLM
result = guard(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": "Berikan tanggal hari ini dalam format YYYY-MM-DD saja, tanpa teks lain."
}]
)
print(f"Output tervalidasi: {result.validatedoutput}")
print(f"Status validasi: {result.validationpassed}")
Guard mendukung beberapa aksi ketika validasi gagal:
# onfail options:
"exception" - Raise exception
"filter" - Hapus output yang gagal validasi
"fix" - Coba perbaiki output
"reask" - Minta LLM untuk menghasilkan ulang
"noop" - Lanjutkan tanpa aksi (hanya log)
guard
withreask = Guard().use(
RegexMatch(
regex=r"^[A-Z][a-z]+$",
on
fail="reask" # Minta LLM coba lagi jika gagal
)
)
Validators
Guardrails AI menyediakan berbagai validator bawaan melalui Guardrails Hub. Berikut adalah beberapa yang paling umum digunakan:
Regex Validation
from guardrails import Guard
from guardrails.hub import RegexMatch
Validasi format email
emailguard = Guard().use(
RegexMatch(
regex=r"^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",
onfail="reask"
)
)
result = emailguard(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": "Berikan contoh alamat email bisnis yang valid."
}]
)
print(f"Email: {result.validatedoutput}")
PII Detection (Deteksi Data Pribadi)
from guardrails import Guard
from guardrails.hub import DetectPII
Guard untuk mendeteksi dan menghapus PII
piiguard = Guard().use(
DetectPII(
piientities=[
"EMAILADDRESS",
"PHONENUMBER",
"PERSON",
"CREDITCARD",
"IPADDRESS",
"ID"
],
onfail="fix" # Otomatis mask PII yang terdeteksi
)
)
result = piiguard(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": "Ceritakan tentang pelanggan kami John Doe yang bisa dihubungi di john@email.com atau 081234567890."
}]
)
print(f"Output aman: {result.validatedoutput}")