Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Guardrails AI validation framework setup for LLM applications. Implement input/output validation, safety checks, and structured output enforcement.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 32% | 0% |
Configure Guardrails AI validation framework to ensure LLM outputs meet quality, safety, and structural requirements. Implement validators for input sanitization, output format enforcement, and safety constraints.
Guardrails AI provides:
pythonfrom guardrails import Guard from guardrails.hub import ValidJson, ToxicLanguage, DetectPII # Create guard with validators guard = Guard().use_many( ValidJson(), ToxicLanguage(on_fail="fix"), DetectPII(on_fail="fix") ) # Use with LLM from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4") result = guard( llm, prompt="Generate a product description for a laptop", max_tokens=500 ) print(result.validated_output)
pythonfrom guardrails import Guard from pydantic import BaseModel, Field from typing import List class ProductReview(BaseModel): """Schema for product review output.""" rating: int = Field(ge=1, le=5, description="Rating from 1-5") summary: str = Field(max_length=200, description="Brief summary") pros: List[str] = Field(min_items=1, max_items=5) cons: List[str] = Field(min_items=1, max_items=5) recommendation: bool # Create guard from schema guard = Guard.from_pydantic(ProductReview) result = guard( llm, prompt="""Analyze this product and provide a structured review: Product: Wireless Noise-Canceling Headphones Price: $299 Features: 30hr battery, ANC, Bluetooth 5.3 """, ) # Result is a validated ProductReview instance review = result.validated_output print(f"Rating: {review.rating}") print(f"Summary: {review.summary}")
pythonfrom guardrails import Guard from guardrails.hub import ( CompetitorCheck, ProfanityFree, ReadingTime, RestrictToTopic, SensitiveTopic, ToxicLanguage, ValidJson, ValidLength ) # Install validators from hub # guardrails hub install hub://guardrails/toxic_language # Compose multiple validators guard = Guard().use_many( ValidJson(on_fail="reask"), ToxicLanguage(threshold=0.8, on_fail="fix"), ProfanityFree(on_fail="fix"), ValidLength(min=100, max=1000, on_fail="reask"), RestrictToTopic( valid_topics=["technology", "software"], on_fail="reask" ) )
pythonfrom guardrails import Validator, register_validator from guardrails.validators import ValidationResult @register_validator(name="custom/no-urls", data_type="string") class NoURLs(Validator): """Validator that checks for URLs in text.""" def validate(self, value: str, metadata: dict) -> ValidationResult: import re url_pattern = r'https?://\S+' if re.search(url_pattern, value): return ValidationResult( outcome="fail", error_message="Text contains URLs which are not allowed", fix_value=re.sub(url_pattern, "[URL REMOVED]", value) ) return ValidationResult(outcome="pass") # Use custom validator guard = Guard().use(NoURLs(on_fail="fix"))
pythonfrom guardrails import Guard from guardrails.hub import DetectPromptInjection # Create input guard for prompt injection input_guard = Guard().use( DetectPromptInjection( on_fail="exception", threshold=0.9 ) ) def safe_chat(user_input: str) -> str: # Validate input first try: input_guard.validate(user_input) except Exception as e: return "I cannot process that request." # Process safe input return llm.invoke(user_input)
pythonfrom guardrails import Guard from nemoguardrails import LLMRails, RailsConfig # Combine Guardrails AI with NeMo Guardrails config = RailsConfig.from_path("./config") rails = LLMRails(config) # Use Guardrails AI for structured output output_guard = Guard.from_pydantic(OutputSchema) async def guarded_chat(user_input: str) -> dict: # NeMo handles dialogue safety response = await rails.generate_async( messages=[{"role": "user", "content": user_input}] ) # Guardrails AI validates structure validated = output_guard.validate(response["content"]) return validated.validated_output
javascriptconst guardrailsAISetupTask = defineTask({ name: 'guardrails-ai-setup', description: 'Configure Guardrails AI validation for LLM application', inputs: { outputSchema: { type: 'object', required: false }, validators: { type: 'array', required: true }, onFailStrategy: { type: 'string', default: 'reask' }, // 'reask', 'fix', 'exception', 'filter' maxRetries: { type: 'number', default: 3 }, enableInputValidation: { type: 'boolean', default: true }, enableOutputValidation: { type: 'boolean', default: true } }, outputs: { guardConfigured: { type: 'boolean' }, validatorsInstalled: { type: 'array' }, artifacts: { type: 'array' } }, async run(inputs, taskCtx) { return { kind: 'skill', title: 'Configure Guardrails AI validation', skill: { name: 'guardrails-ai-setup', context: { outputSchema: inputs.outputSchema, validators: inputs.validators, onFailStrategy: inputs.onFailStrategy, maxRetries: inputs.maxRetries, enableInputValidation: inputs.enableInputValidation, enableOutputValidation: inputs.enableOutputValidation, instructions: [ 'Install Guardrails AI package and hub validators', 'Define output schema if structured output needed', 'Configure selected validators with failure strategies', 'Set up input validation for prompt injection defense', 'Configure output validation for content safety', 'Implement retry logic with correction strategies', 'Test validation pipeline with sample inputs/outputs', 'Document validation rules and expected behaviors' ] } }, io: { inputJsonPath: `tasks/${taskCtx.effectId}/input.json`, outputJsonPath: `tasks/${taskCtx.effectId}/result.json` } }; } });
Other measured skills in the registry, with their headline benchmark lift.