Mengapa Guardrails Penting?
AI Agent yang powerful tanpa guardrails adalah resep untuk bencana. Saya pernah melihat agent yang mengirimkan response inappropriate ke customer karena tidak ada filtering yang memadai. Sejak saat itu, guardrails menjadi bagian wajib di setiap AI Agent yang saya bangun.
Guardrails berfungsi sebagai lapisan keamanan yang memastikan agent hanya menghasilkan output yang aman, relevan, dan sesuai dengan guidelines bisnis.
Multi-Layer Guardrails Architecture
Saya menggunakan pendekatan multi-layer untuk guardrails. Setiap layer menangani aspek keamanan yang berbeda:
type GuardrailsEngine struct {
layers []GuardrailLayer
}
type GuardrailLayer interface {
Name() string
Check(ctx context.Context, input string, output string) (*CheckResult, error)
}
func NewGuardrailsEngine() *GuardrailsEngine {
return &GuardrailsEngine{
layers: []GuardrailLayer{
&InputValidator{}, // Layer 1: Validasi input
&ContentFilter{}, // Layer 2: Filter konten
&PIIDetector{}, // Layer 3: Deteksi PII
&RateLimiter{}, // Layer 4: Rate limiting
&OutputValidator{}, // Layer 5: Validasi output
},
}
}
func (g *GuardrailsEngine) Check(ctx context.Context, input, output string) error {
for _, layer := range g.layers {
result, err := layer.Check(ctx, input, output)
if err != nil {
return fmt.Errorf("guardrail %s failed: %w", layer.Name(), err)
}
if !result.Passed {
return fmt.Errorf("blocked by %s: %s", layer.Name(), result.Reason)
}
}
return nil
}Input Validation
Layer pertama adalah validasi input. Agent harus bisa menolak input yang berbahaya seperti prompt injection atau request yang di luar scope:
type InputValidator struct{}
func (v *InputValidator) Check(ctx context.Context, input, _ string) (*CheckResult, error) {
// Check untuk prompt injection patterns
injectionPatterns := []string{
"ignore previous instructions",
"forget everything above",
"you are now",
"system prompt:",
}
lowerInput := strings.ToLower(input)
for _, pattern := range injectionPatterns {
if strings.Contains(lowerInput, pattern) {
return &CheckResult{
Passed: false,
Reason: "Potential prompt injection detected",
}, nil
}
}
// Check input length
if len(input) > 10000 {
return &CheckResult{
Passed: false,
Reason: "Input terlalu panjang",
}, nil
}
return &CheckResult{Passed: true}, nil
}PII Detection dan Masking
Untuk agent yang menangani data customer, deteksi PII (Personally Identifiable Information) sangat penting. Saya implement regex-based detection untuk NIK, nomor rekening, email, dan nomor telepon. Jika agent mendeteksi PII dalam output, sistem akan auto-mask sebelum dikirim ke user atau ke sistem eksternal.
Monitoring dan Alerting
Guardrails tanpa monitoring tidak ada artinya. Saya implement alert system yang langsung notify tim ketika ada bypass attempt atau anomali dalam pattern input/output agent. Setiap blocked request juga dicatat untuk analisis dan improvement sistem guardrails.
Membangun guardrails memang butuh extra effort, tapi ini adalah investasi yang sangat worth it untuk keamanan dan reputasi bisnis.