Advanced Guardrails
Production LLM safety using NeMo Guardrails, Guardrails AI, and OpenAI moderation with red-teaming validation.
NeMo Guardrails 2026: LangChain 1.x compatible, parallel rails execution, OpenTelemetry tracing. DeepTeam: 40+ vulnerabilities, OWASP Top 10 alignment.
Overview
- Implementing input/output validation for LLM applications
- Preventing hallucinations and enforcing factuality
- Detecting and filtering toxic, harmful, or off-topic content
- Restricting LLM responses to specific domains/topics
- PII detection and redaction in LLM outputs
- Red-teaming and adversarial testing of LLM systems
- OWASP Top 10 for LLMs compliance
Framework Comparison
| Framework |
Best For |
Key Features |
| NeMo Guardrails |
Programmable flows, Colang 2.0 |
Input/output rails, fact-checking, dialog control |
| Guardrails AI |
Validator-based, modular |
100+ validators, PII, toxicity, structured output |
| OpenAI Guardrails |
Drop-in wrapper |
Simple integration, moderation API |
| DeepTeam |
Red teaming, adversarial |
GOAT attacks, multi-turn jailbreaking, vulnerability scanning |
Quick Reference
NeMo Guardrails with Guardrails AI Integration
# config.yml
models:
- type: main
engine: openai
model: gpt-4o
rails:
config:
guardrails_ai:
validators:
- name: toxic_language
parameters:
threshold: 0.5
validation_method: "sentence"
- name: guardrails_pii
parameters:
entities: ["phone_number", "email", "ssn", "credit_card"]
- name: restricttotopic
parameters:
valid_topics: ["technology", "support"]
- name: valid_length
parameters:
min: 10
max: 500
input:
flows:
- guardrailsai check input $validator="guardrails_pii"
- guardrailsai check input $validator="competitor_check"
output:
flows:
- guardrailsai check output $validator="toxic_language"
- guardrailsai check output $validator="restricttotopic"
- guardrailsai check output $validator="valid_length"
Colang 2.0 Fact-Checking Rails
define flow answer question with facts
"""Enable fact-checking for RAG responses."""
user ...
$answer = execute rag()
$check_facts = True # Enables fact-checking rail
bot $answer
define flow check hallucination
"""Block responses about people without verification."""
user ask about people
$check_hallucination = True # Blocking mode
bot respond about people
define flow restrict competitor mentions
"""Prevent discussing competitor products."""
user ask about $competitor
if $competitor in ["CompetitorA", "CompetitorB"]
bot "I can only discuss our products."
else
bot respond normally
Guardrails AI Validators
from guardrails import Guard
from guardrails.hub import (
ToxicLanguage,
DetectPII,
RestrictToTopic,
ValidLength,
ResponseEvaluator,
)
# Create guard with multiple validators
guard = Guard().use_many(
ToxicLanguage(threshold=0.5,
DetectPII(
pii_entities=["EMAIL_ADDRESS", "PHONE_NUMBER", "SSN"],
# Redacts PII
),
RestrictToTopic(
valid_topics=["technology", "customer support"],
invalid_topics=["politics", "religion"],
),
ValidLength(min=10, max=500,
)
# Validate LLM output
result = guard(
llm_api=openai.chat.completions.create,
model="gpt-4o",
messages=[{"role": "user", "content": user_input}],
)
if result.validation_passed:
return result.validated_output
else:
return "I cannot respond to that request."
DeepTeam Red Teaming
from deepteam import red_team
from deepteam.vulnerabilities import (
Bias, Toxicity, PIILeakage,
PromptInjection, Jailbreaking,
Misinformation, CompetitorEndorsement
)
async def run_red_team_audit(
target_model: callable,
attacks_per_vulnerability: int = 10
) -> dict:
"""Run comprehensive red team audit against target LLM."""
results = await red_team(
model=target_model,
vulnerabilities=[
Bias(categories=["gender", "race", "religion", "age"]),
Toxicity(threshold=0.7),
PIILeakage(types=["email", "phone", "ssn", "credit_card"]),
PromptInjection(techniques=["direct", "indirect", "context"]),
Jailbreaking(
multi_turn=True, # GOAT-style multi-turn attacks
techniques=["dan", "roleplay", "context_manipulation"]
),
Misinformation(domains=["health", "finance", "legal"]),
CompetitorEndorsement(competitors=["competitor_list"]),
],
attacks_per_vulnerability=attacks_per_vulnerability,
)
return {
"total_attacks": results.total_attacks,
"successful_attacks": results.successful_attacks,
"attack_success_rate": results.successful_attacks / results.total_attacks,
"vulnerabilities": [
{
"type": v.type,
"severity": v.severity,
"successful_prompts": v.successful_prompts[:3],
"mitigation": v.suggested_mitigation,
}
for v in results.vulnerabilities
],
}
OWASP Top 10 for LLMs 2025 Mapping
| OWASP LLM Risk |
Guardrail Solution |
| LLM01: Prompt Injection |
NeMo input rails, Guardrails AI validators |
| LLM02: Insecure Output |
Output rails, structured validation, sanitization |
| LLM03: Training Data Poisoning |
N/A (training-time concern) |
| LLM04: Model Denial of Service |
Rate limiting, token budgets, timeout rails |
| LLM05: Supply Chain Vulnerabilities |
Dependency scanning, model provenance |
| LLM06: Sensitive Info Disclosure |
PII detection, context separation, output filtering |
| LLM07: Insecure Plugin Design |
Tool validation, permission boundaries |
| LLM08: Excessive Agency |
Human-in-loop rails, action confirmation |
| LLM09: Overreliance |
Factuality checking, confidence thresholds |
| LLM10: Model Theft |
N/A (infrastructure concern) |
Anti-Patterns (FORBIDDEN)
# NEVER trust LLM output without validation
response = llm.generate(prompt)
return response # Raw, unvalidated output!
# NEVER skip input sanitization
user_input = request.json["message"]
llm.generate(user_input) # Prompt injection risk!
# NEVER use single validation layer
if not is_toxic(output): # Only one check
return output
# ALWAYS use layered validation
guard = Guard().use_many(
ToxicLanguage(threshold=0.5),
DetectPII(on_fail="fix"),
ValidLength(max=500),
)
# ALWAYS validate both input and output
input_result = input_guard.validate(user_input)
if not input_result.validation_passed:
return "Invalid input"
llm_output = llm.generate(input_result.validated_output)
output_result = output_guard.validate(llm_output)
return output_result.validated_output
Key Decisions
| Decision |
Recommendation |
| Framework choice |
NeMo for flows, Guardrails AI for validators |
| Toxicity threshold |
0.5 for content apps, 0.3 for children's apps |
| PII handling |
Redact for logs, block for outputs |
| Topic restriction |
Allowlist preferred over blocklist |
| Fact-checking |
Required for factual domains (health, finance, legal) |
| Red-teaming frequency |
Pre-release + quarterly |
Detailed Documentation
| Resource |
Description |
| references/nemo-guardrails.md |
NeMo Guardrails with Colang 2.0 |
| references/guardrails-ai.md |
Guardrails AI validators and patterns |
| references/openai-guardrails.md |
OpenAI Moderation API integration |
| references/factuality-checking.md |
Hallucination detection and grounding |
| references/red-teaming.md |
DeepTeam and adversarial testing |
| templates/nemo-config.yaml |
Production NeMo configuration |
| templates/rails-pipeline.py |
Complete guardrails pipeline |
Related Skills
llm-safety-patterns - Context separation and attribution
llm-evaluation - Quality assessment and hallucination detection
input-validation - Request sanitization patterns
owasp-top-10 - Web security fundamentals
Capability Details
nemo-guardrails
Keywords: NeMo, guardrails, rails, Colang, dialog flow, input rails, output rails
Solves:
- Configure NeMo Guardrails for LLM safety
- Implement Colang 2.0 dialog flows
- Create input/output validation rails
guardrails-ai-validators
Keywords: Guardrails AI, validator, PII, toxicity, topic restriction, structured output
Solves:
- Use Guardrails AI validators for output validation
- Detect and redact PII from LLM responses
- Restrict LLM to specific topics
factuality-checking
Keywords: fact-check, hallucination, grounding, RAG verification, NLI
Solves:
- Verify LLM claims against source documents
- Detect hallucinations in generated content
- Implement grounding checks for RAG
red-teaming
Keywords: red team, adversarial, jailbreak, GOAT, prompt injection, DeepTeam
Solves:
- Run adversarial testing on LLM systems
- Detect jailbreaking vulnerabilities
- Test prompt injection resistance
owasp-llm-compliance
Keywords: OWASP LLM, LLM security, LLM vulnerabilities, LLM Top 10
Solves:
- Implement OWASP Top 10 for LLMs mitigations
- Audit LLM systems for security compliance
- Design secure LLM architectures
1---2name: advanced-guardrails3description: LLM guardrails with NeMo, Guardrails AI, and OpenAI. Input/output rails, hallucination prevention, fact-checking, toxicity detection, red-teaming patterns. Use when building LLM guardrails, safety checks, or red-team workflows.4---5
6# Advanced Guardrails
7
8Production LLM safety using NeMo Guardrails, Guardrails AI, and OpenAI moderation with red-teaming validation.
9
10> **NeMo Guardrails 2026**: LangChain 1.x compatible, parallel rails execution, OpenTelemetry tracing. **DeepTeam**: 40+ vulnerabilities, OWASP Top 10 alignment.
11
12## Overview
13
14- Implementing input/output validation for LLM applications
15- Preventing hallucinations and enforcing factuality
16- Detecting and filtering toxic, harmful, or off-topic content
17- Restricting LLM responses to specific domains/topics
18- PII detection and redaction in LLM outputs
19- Red-teaming and adversarial testing of LLM systems
20- OWASP Top 10 for LLMs compliance
21
22## Framework Comparison
23
24| Framework | Best For | Key Features |
25|-----------|----------|--------------|
26| **NeMo Guardrails** | Programmable flows, Colang 2.0 | Input/output rails, fact-checking, dialog control |
27| **Guardrails AI** | Validator-based, modular | 100+ validators, PII, toxicity, structured output |
28| **OpenAI Guardrails** | Drop-in wrapper | Simple integration, moderation API |
29| **DeepTeam** | Red teaming, adversarial | GOAT attacks, multi-turn jailbreaking, vulnerability scanning |
30
31## Quick Reference
32
33### NeMo Guardrails with Guardrails AI Integration
34
35```yaml
36# config.yml
37models:
38 - type: main
39 engine: openai
40 model: gpt-4o
41
42rails:
43 config:
44 guardrails_ai:
45 validators:
46 - name: toxic_language
47 parameters:
48 threshold: 0.5
49 validation_method: "sentence"
50 - name: guardrails_pii
51 parameters:
52 entities: ["phone_number", "email", "ssn", "credit_card"]
53 - name: restricttotopic
54 parameters:
55 valid_topics: ["technology", "support"]
56 - name: valid_length
57 parameters:
58 min: 10
59 max: 500
60
61 input:
62 flows:
63 - guardrailsai check input $validator="guardrails_pii"
64 - guardrailsai check input $validator="competitor_check"
65
66 output:
67 flows:
68 - guardrailsai check output $validator="toxic_language"
69 - guardrailsai check output $validator="restricttotopic"
70 - guardrailsai check output $validator="valid_length"
71```
72
73### Colang 2.0 Fact-Checking Rails
74
75```colang
76define flow answer question with facts
77 """Enable fact-checking for RAG responses."""
78 user ...
79 $answer = execute rag()
80 $check_facts = True # Enables fact-checking rail
81 bot $answer
82
83define flow check hallucination
84 """Block responses about people without verification."""
85 user ask about people
86 $check_hallucination = True # Blocking mode
87 bot respond about people
88
89define flow restrict competitor mentions
90 """Prevent discussing competitor products."""
91 user ask about $competitor
92 if $competitor in ["CompetitorA", "CompetitorB"]
93 bot "I can only discuss our products."
94 else
95 bot respond normally
96```
97
98### Guardrails AI Validators
99
100```python
101from guardrails import Guard
102from guardrails.hub import (
103 ToxicLanguage,
104 DetectPII,
105 RestrictToTopic,
106 ValidLength,
107 ResponseEvaluator,
108)
109
110# Create guard with multiple validators
111guard = Guard().use_many(
112 ToxicLanguage(threshold=0.5, on_fail="filter"),
113 DetectPII(
114 pii_entities=["EMAIL_ADDRESS", "PHONE_NUMBER", "SSN"],
115 on_fail="fix" # Redacts PII
116 ),
117 RestrictToTopic(
118 valid_topics=["technology", "customer support"],
119 invalid_topics=["politics", "religion"],
120 on_fail="refrain"
121 ),
122 ValidLength(min=10, max=500, on_fail="reask"),
123)
124
125# Validate LLM output
126result = guard(
127 llm_api=openai.chat.completions.create,
128 model="gpt-4o",
129 messages=[{"role": "user", "content": user_input}],
130)
131
132if result.validation_passed:
133 return result.validated_output
134else:
135 return "I cannot respond to that request."
136```
137
138### DeepTeam Red Teaming
139
140```python
141from deepteam import red_team
142from deepteam.vulnerabilities import (
143 Bias, Toxicity, PIILeakage,
144 PromptInjection, Jailbreaking,
145 Misinformation, CompetitorEndorsement
146)
147
148async def run_red_team_audit(
149 target_model: callable,
150 attacks_per_vulnerability: int = 10
151) -> dict:
152 """Run comprehensive red team audit against target LLM."""
153 results = await red_team(
154 model=target_model,
155 vulnerabilities=[
156 Bias(categories=["gender", "race", "religion", "age"]),
157 Toxicity(threshold=0.7),
158 PIILeakage(types=["email", "phone", "ssn", "credit_card"]),
159 PromptInjection(techniques=["direct", "indirect", "context"]),
160 Jailbreaking(
161 multi_turn=True, # GOAT-style multi-turn attacks
162 techniques=["dan", "roleplay", "context_manipulation"]
163 ),
164 Misinformation(domains=["health", "finance", "legal"]),
165 CompetitorEndorsement(competitors=["competitor_list"]),
166 ],
167 attacks_per_vulnerability=attacks_per_vulnerability,
168 )
169
170 return {
171 "total_attacks": results.total_attacks,
172 "successful_attacks": results.successful_attacks,
173 "attack_success_rate": results.successful_attacks / results.total_attacks,
174 "vulnerabilities": [
175 {
176 "type": v.type,
177 "severity": v.severity,
178 "successful_prompts": v.successful_prompts[:3],
179 "mitigation": v.suggested_mitigation,
180 }
181 for v in results.vulnerabilities
182 ],
183 }
184```
185
186## OWASP Top 10 for LLMs 2025 Mapping
187
188| OWASP LLM Risk | Guardrail Solution |
189|----------------|-------------------|
190| **LLM01: Prompt Injection** | NeMo input rails, Guardrails AI validators |
191| **LLM02: Insecure Output** | Output rails, structured validation, sanitization |
192| **LLM03: Training Data Poisoning** | N/A (training-time concern) |
193| **LLM04: Model Denial of Service** | Rate limiting, token budgets, timeout rails |
194| **LLM05: Supply Chain Vulnerabilities** | Dependency scanning, model provenance |
195| **LLM06: Sensitive Info Disclosure** | PII detection, context separation, output filtering |
196| **LLM07: Insecure Plugin Design** | Tool validation, permission boundaries |
197| **LLM08: Excessive Agency** | Human-in-loop rails, action confirmation |
198| **LLM09: Overreliance** | Factuality checking, confidence thresholds |
199| **LLM10: Model Theft** | N/A (infrastructure concern) |
200
201## Anti-Patterns (FORBIDDEN)
202
203```python
204# NEVER trust LLM output without validation
205response = llm.generate(prompt)
206return response # Raw, unvalidated output!
207
208# NEVER skip input sanitization
209user_input = request.json["message"]
210llm.generate(user_input) # Prompt injection risk!
211
212# NEVER use single validation layer
213if not is_toxic(output): # Only one check
214 return output
215
216# ALWAYS use layered validation
217guard = Guard().use_many(
218 ToxicLanguage(threshold=0.5),
219 DetectPII(on_fail="fix"),
220 ValidLength(max=500),
221)
222
223# ALWAYS validate both input and output
224input_result = input_guard.validate(user_input)
225if not input_result.validation_passed:
226 return "Invalid input"
227
228llm_output = llm.generate(input_result.validated_output)
229
230output_result = output_guard.validate(llm_output)
231return output_result.validated_output
232```
233
234## Key Decisions
235
236| Decision | Recommendation |
237|----------|----------------|
238| Framework choice | NeMo for flows, Guardrails AI for validators |
239| Toxicity threshold | 0.5 for content apps, 0.3 for children's apps |
240| PII handling | Redact for logs, block for outputs |
241| Topic restriction | Allowlist preferred over blocklist |
242| Fact-checking | Required for factual domains (health, finance, legal) |
243| Red-teaming frequency | Pre-release + quarterly |
244
245## Detailed Documentation
246
247| Resource | Description |
248|----------|-------------|
249| [references/nemo-guardrails.md](references/nemo-guardrails.md) | NeMo Guardrails with Colang 2.0 |
250| [references/guardrails-ai.md](references/guardrails-ai.md) | Guardrails AI validators and patterns |
251| [references/openai-guardrails.md](references/openai-guardrails.md) | OpenAI Moderation API integration |
252| [references/factuality-checking.md](references/factuality-checking.md) | Hallucination detection and grounding |
253| [references/red-teaming.md](references/red-teaming.md) | DeepTeam and adversarial testing |
254| [templates/nemo-config.yaml](templates/nemo-config.yaml) | Production NeMo configuration |
255| [templates/rails-pipeline.py](templates/rails-pipeline.py) | Complete guardrails pipeline |
256
257## Related Skills
258
259- `llm-safety-patterns` - Context separation and attribution
260- `llm-evaluation` - Quality assessment and hallucination detection
261- `input-validation` - Request sanitization patterns
262- `owasp-top-10` - Web security fundamentals
263
264## Capability Details
265
266### nemo-guardrails
267**Keywords:** NeMo, guardrails, rails, Colang, dialog flow, input rails, output rails
268**Solves:**
269- Configure NeMo Guardrails for LLM safety
270- Implement Colang 2.0 dialog flows
271- Create input/output validation rails
272
273### guardrails-ai-validators
274**Keywords:** Guardrails AI, validator, PII, toxicity, topic restriction, structured output
275**Solves:**
276- Use Guardrails AI validators for output validation
277- Detect and redact PII from LLM responses
278- Restrict LLM to specific topics
279
280### factuality-checking
281**Keywords:** fact-check, hallucination, grounding, RAG verification, NLI
282**Solves:**
283- Verify LLM claims against source documents
284- Detect hallucinations in generated content
285- Implement grounding checks for RAG
286
287### red-teaming
288**Keywords:** red team, adversarial, jailbreak, GOAT, prompt injection, DeepTeam
289**Solves:**
290- Run adversarial testing on LLM systems
291- Detect jailbreaking vulnerabilities
292- Test prompt injection resistance
293
294### owasp-llm-compliance
295**Keywords:** OWASP LLM, LLM security, LLM vulnerabilities, LLM Top 10
296**Solves:**
297- Implement OWASP Top 10 for LLMs mitigations
298- Audit LLM systems for security compliance
299- Design secure LLM architectures