name: guardrails-ai-setup description: Guardrails AI验证框架设置,用于LLM应用。实现输入/输出验证、安全检查以及结构化输出强制执行。 allowed-tools: Read, Grep, Write, Edit, Bash, Glob, WebFetch
guardrails-ai-setup
配置Guardrails AI验证框架,以确保LLM输出满足质量、安全性和结构性要求。实现用于输入净化、输出格式强制执行和安全约束的验证器。
概述
Guardrails AI提供:
- LLM调用前的输入验证
- LLM响应后的输出验证
- 结构化输出强制执行(JSON、XML等)
- 来自Guardrails Hub的预构建验证器
- 自定义验证器创建
- 自动重试和纠正机制
功能
输入验证
- 净化用户输入
- 检测提示注入尝试
- 验证输入格式和长度
- 处理前检查PII(个人身份信息)
输出验证
- 强制执行结构化输出模式
- 验证内容准确性
- 检查有害内容
- 验证事实一致性
安全约束
- 内容审核
- 毒性检测
- 偏见检查
- 幻觉检测
集成特性
- LangChain集成
- 流式支持
- 自动重试
- 纠正策略
使用方法
基本设置
from guardrails import Guard
from guardrails.hub import ValidJson, ToxicLanguage, DetectPII
# 使用验证器创建guard
guard = Guard().use_many(
ValidJson(),
ToxicLanguage(on_fail="fix"),
DetectPII(on_fail="fix")
)
# 与LLM一起使用
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4")
result = guard(
llm,
prompt="为笔记本电脑生成产品描述",
max_tokens=500
)
print(result.validated_output)
基于模式的验证
from guardrails import Guard
from pydantic import BaseModel, Field
from typing import List
class ProductReview(BaseModel):
"""产品评论输出的模式。"""
rating: int = Field(ge=1, le=5, description="1-5的评分")
summary: str = Field(max_length=200, description="简要总结")
pros: List[str] = Field(min_items=1, max_items=5)
cons: List[str] = Field(min_items=1, max_items=5)
recommendation: bool
# 从模式创建guard
guard = Guard.from_pydantic(ProductReview)
result = guard(
llm,
prompt="""分析此产品并提供结构化评论:
产品:无线降噪耳机
价格:299美元
功能:30小时电池续航,主动降噪,蓝牙5.3
""",
)
# 结果是一个经过验证的ProductReview实例
review = result.validated_output
print(f"评分:{review.rating}")
print(f"总结:{review.summary}")
使用Guardrails Hub验证器
from guardrails import Guard
from guardrails.hub import (
CompetitorCheck,
ProfanityFree,
ReadingTime,
RestrictToTopic,
SensitiveTopic,
ToxicLanguage,
ValidJson,
ValidLength
)
# 从hub安装验证器
# guardrails hub install hub://guardrails/toxic_language
# 组合多个验证器
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=["技术", "软件"],
on_fail="reask"
)
)
自定义验证器
from guardrails import Validator, register_validator
from guardrails.validators import ValidationResult
@register_validator(name="custom/no-urls", data_type="string")
class NoURLs(Validator):
"""检查文本中URL的验证器。"""
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="文本包含不允许的URL",
fix_value=re.sub(url_pattern, "[URL已移除]", value)
)
return ValidationResult(outcome="pass")
# 使用自定义验证器
guard = Guard().use(NoURLs(on_fail="fix"))
提示注入防御
from guardrails import Guard
from guardrails.hub import DetectPromptInjection
# 为提示注入创建输入guard
input_guard = Guard().use(
DetectPromptInjection(
on_fail="exception",
threshold=0.9
)
)
def safe_chat(user_input: str) -> str:
# 首先验证输入
try:
input_guard.validate(user_input)
except Exception as e:
return "我无法处理该请求。"
# 处理安全输入
return llm.invoke(user_input)
与NeMo Guardrails集成
from guardrails import Guard
from nemoguardrails import LLMRails, RailsConfig
# 将Guardrails AI与NeMo Guardrails结合
config = RailsConfig.from_path("./config")
rails = LLMRails(config)
# 使用Guardrails AI进行结构化输出
output_guard = Guard.from_pydantic(OutputSchema)
async def guarded_chat(user_input: str) -> dict:
# NeMo处理对话安全
response = await rails.generate_async(
messages=[{"role": "user", "content": user_input}]
)
# Guardrails AI验证结构
validated = output_guard.validate(response["content"])
return validated.validated_output
任务定义
const guardrailsAISetupTask = defineTask({
name: 'guardrails-ai-setup',
description: '为LLM应用配置Guardrails AI验证',
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: '配置Guardrails AI验证',
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: [
'安装Guardrails AI包和hub验证器',
'如果需要结构化输出,定义输出模式',
'配置具有失败策略的选定验证器',
'设置输入验证以防御提示注入',
'配置输出验证以保障内容安全',
'实现带有纠正策略的重试逻辑',
'使用示例输入/输出测试验证管道',
'记录验证规则和预期行为'
]
}
},
io: {
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
outputJsonPath: `tasks/${taskCtx.effectId}/result.json`
}
};
}
});
适用流程
- 系统提示护栏
- 提示注入防御
- 内容审核安全
- 聊天机器人设计与实现
外部依赖
- guardrails-ai Python包
- Guardrails Hub账户(用于hub验证器)
- LLM提供商(OpenAI、Anthropic等)
- 可选:NeMo Guardrails用于对话安全
参考资料
相关技能
- SK-SAF-001 内容审核API
- SK-SAF-003 nemo-guardrails
- SK-SAF-004 提示注入检测器
- SK-SAF-005 PII脱敏
相关代理
- AG-SAF-001 安全审计员
- AG-SAF-002 提示注入防御者
- AG-PE-001 系统提示工程师