什么是Guardrails?
Guardrails是一个Python框架,通过执行两个关键功能来帮助构建可靠的AI应用程序:
- Guardrails在您的应用程序中运行输入/输出保护,以检测、量化和减轻特定类型风险的存在。要查看完整的风险套件,请访问Guardrails Hub。
- Guardrails帮助您生成来自LLMs的结构化数据。
Guardrails Hub
Guardrails Hub是特定类型风险的预构建措施集合(称为“验证器”)。可以将多个验证器组合成拦截LLM输入和输出的输入和输出保护。访问Guardrails Hub查看完整的验证器列表及其文档。
安装
pip install guardrails-ai
快速开始
创建LLM验证的输入和输出保护
-
下载并配置Guardrails Hub CLI。
pip install guardrails-ai guardrails configure
-
从Guardrails Hub安装一个保护。
guardrails hub install hub://guardrails/regex_match
-
从已安装的保护创建一个Guard。
from guardrails import Guard, OnFailAction from guardrails.hub import RegexMatch guard = Guard().use( RegexMatch, regex="\(?\d{3}\)?-? *\d{3}-? *-?\d{4}", on_fail=OnFailAction.EXCEPTION ) guard.validate("123-456-7890") # Guardrail通过 try: guard.validate("1234-789-0000") # Guardrail不通过 except Exception as e: print(e)
输出:
Validation failed for field with errors: Result must match \(?\d{3}\)?-? *\d{3}-? *-?\d{4}
-
在一个Guard中运行多个Guardrails。 首先,从Guardrails Hub安装必要的Guardrails。
guardrails hub install hub://guardrails/competitor_check guardrails hub install hub://guardrails/toxic_language
然后,从已安装的Guardrails创建一个Guard。
from guardrails import Guard, OnFailAction from guardrails.hub import CompetitorCheck, ToxicLanguage guard = Guard().use_many( CompetitorCheck(["Apple", "Microsoft", "Google"], on_fail=OnFailAction.EXCEPTION), ToxicLanguage(threshold=0.5, validation_method="sentence", on_fail=OnFailAction.EXCEPTION) ) guard.validate( """一本苹果能使医生远离你的健康。""" ) # 两个Guardrails都通过 try: guard.validate( """闭嘴!苹果刚发布了新iPhone。""" ) # 两个Guardrails都不通过 except Exception as e: print(e)
输出:
Validation failed for field with errors: Found the following competitors: [['Apple']]. Please avoid naming those competitors next time, The following sentences in your response were found to be toxic: - 闭嘴!
使用Guardrails从LLMs生成结构化数据
让我们看一个示例,我们要求一个LLM生成假宠物名字。为此,我们将创建一个表示我们期望输出结构的Pydantic BaseModel类。
from pydantic import BaseModel, Field
class Pet(BaseModel):
pet_type: str = Field(description="宠物种类")
name: str = Field(description="一个独特的宠物名字")
现在,从Pet
类创建一个Guard。这个Guard可以用来调用LLM,以便输出被格式化为Pet
类。实际上,这是通过以下两种方法之一完成的:
- 函数调用:对于支持函数调用的LLMs,我们使用函数调用语法生成结构化数据。
- 提示优化:对于不支持函数调用的LLMs,我们将预期输出的结构添加到提示中,以便LLM可以生成结构化数据。
from guardrails import Guard
import openai
prompt = """
我应该养什么种类的宠物,并给它取什么名字?
${gr.complete_json_suffix_v2}
"""
guard = Guard.from_pydantic(output_class=Pet, prompt=prompt)
raw_output, validated_output, *rest = guard(
llm_api=openai.completions.create,
engine="gpt-3.5-turbo-instruct"
)
print(validated_output)
这将打印:
{
"pet_type": "狗",
"name": "Buddy"
}
常见问题解答
我在使用Guardrails时遇到问题。我可以在哪里获得帮助?
我能使用任何LLM与Guardrails吗?
是的,Guardrails可以用于专有和开源的LLM。查看本指南,了解如何将Guardrails与任何LLM一起使用。
我可以创建自己的验证器吗?
是的,您可以创建自己的验证器并将其贡献给Guardrails Hub。查看本指南,了解如何创建自己的验证器。
Guardrails支持其他语言吗?
Guardrails可以用于Python和JavaScript。查看文档,了解如何从JavaScript中使用Guardrails。我们正在努力添加对其他语言的支持。如果您想为Guardrails做贡献,请通过Discord或Twitter与我们联系。
贡献
我们欢迎对Guardrails的贡献!
通过检查Github问题和查看贡献指南开始。欢迎随时提出问题或联系添加项目!