Important
服务政策还处于 测试阶段。 Unity Gateway 通常可用,但其测试版功能需单独启用。 账户管理员必须在账户控制台的 Previews 页面启用 Unity Gateway Beta 功能。 请参阅 Manage Azure Databricks 预览版。
本教程将通过两种互补的方式,逐步介绍如何为 模型服务添加护栏。 在 Azure Databricks 中,护栏是服务策略。 模型服务既可以对接 Azure Databricks 托管的模型,也可以对接 OpenAI、Anthropic 或 Google 等 external 提供方,而你可以用相同的方式统一治理这两者:
- 内置服务策略(护栏):托管的、Azure Databricks 提供的针对常见风险的检查,例如 PII、不安全内容、越狱尝试和幻觉。 只需在 UI 中选中它即可附加,无需编写任何代码。
- 自定义服务策略:为特定于组织的规则编写的 SQL 函数,例如机密项目代码名或禁止的响应模式。
有关服务策略概念、内置护栏和完整的编写参考,请参阅 AI 安全对象的服务策略、创建并附加服务策略以及 服务策略函数参考。
你可以用相同的方式添加这两者:在 Unity Gateway 界面中,从某个模型服务的 Policies 选项卡下进行添加,并且也可以混合使用它们。 Azure Databricks 会从两个方面对每一项进行评估:
- 在调用模型之前的输入阶段 (ON CALL)。
- 模型响应后的输出阶段(ON RESULT)。
在用户界面中附加策略时,您可以选择阶段。 自定义策略也可以通过基于 event:type 进行分支,将其范围限定在单个阶段。
场景: 你的团队通过应用和代理调用的模型服务(main.default.team_chat)公开 LLM。 你需要用管理护栏屏蔽不安全或有害内容,屏蔽任何提及机密项目的提示,以及屏蔽包含不安全链接的回复,且无需更改应用代码。
在本教程结束时,你已具备:
- 服务中内置的不安全内容防护功能。
- 一个自定义请求策略,在输入阶段(ON CALL)阻止机密代号。
- 一个自定义响应策略,在输出阶段(ON RESULT)阻止不安全的链路。
- 所有三个策略都已附加,并从模型服务的操场中验证。
先决条件
- 已启用 Unity Catalog 的工作区 请参阅 Unity 目录入门。
- 为您的账户启用了 Unity Gateway 测试版功能,该功能会启用服务策略和其他 Unity Gateway Beta 功能。 请参阅 Manage Azure Databricks 预览版。
- 要管控的模型服务,以及
EXECUTE权限以便测试。 要创建一个,请参见 创建自定义模型服务 。 本教程使用main.default.team_chat。 - 在模型服务上拥有
MANAGE权限,以附加策略。 - 在创建自定义策略函数的架构上拥有
CREATE FUNCTION权限(本教程中为main.governance)。 - 对于内置护栏,用于执行护栏检查的评估模型(即 LLM 裁判)已预先选定,因此无需进行设置。 如果你在高级选项中选择了不同的评估器,你需要对其具有
EXECUTE,以及对其目录和架构具有USE CATALOG和USE SCHEMA。
步骤 1:应用内置护栏
内置护栏是托管的 LLM 评判检查。 你从“护栏类型”菜单中选择一项;运行检查的评估器模型服务(LLM 裁判)已为你预先选定。 可用的护栏包括:
-
不安全内容 (
system.ai.block_unsafe_content):拒绝不安全或有害内容。 -
越狱(
system.ai.block_jailbreak):拒绝提示注入和越狱尝试(仅限请求)。 -
幻觉 (
system.ai.block_hallucination):拒绝幻觉响应(仅响应)。
将不安全内容防护功能安装到模型服务中:
- 在工作区边栏中,单击 “AI 网关”。
- 在“ 模型 ”选项卡上,选择模型服务(
main.default.team_chat)。 - 打开“ 策略 ”选项卡,然后单击“ 新建策略”。
- 输入 名称,例如
block-unsafe-content。 - 在 “应用于”下,保留 “所有帐户用户”,或将策略范围限定为特定主体。
- 在 护栏类型中,选择 “不安全内容”。
- 将 排名 设置为
1. 级别决定评估顺序:级别最低的会先处理请求,最后处理响应。 - 在 “阶段”下,选择 “输入护栏”(模型之前) 和 输出护栏(模型后),以便护栏在请求和响应上运行。
- 单击“创建策略”。
护栏使用预选的评估器模型服务(运行检查的 LLM 评判器)。 如需使用不同模型,请在创建策略前展开 高级选项 。 你需要对所选模型服务具有EXECUTE,并对其目录和架构具有USE CATALOG和USE SCHEMA。
注释
在为模型服务附加或更改策略后,请先等待片刻,让更改生效后再进行测试。 在服务政策测试版期间,传播可能需要几分钟时间。
步骤 2:添加自定义请求策略
护栏涵盖常见风险。 对于针对你组织的特定规则,可以编写自定义策略,无论是 SQL 函数还是 LLM 作为评判器的策略。 这个教程用的是SQL。 自定义SQL策略是一种UDF,用于接收 (event VARIANT) 并返回决策。 读取来自 event:context.message的消息文本,这是对最后用户或助手消息的API无关投影。
此策略拒绝提及机密项目代码名的任何请求。
event:type::string = 'request' 检查将其限制在输入阶段 (ON CALL):
CREATE OR REPLACE FUNCTION main.governance.block_confidential_codename(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND contains(lower(event:context.message::string), 'project aurora')
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Requests about confidential projects are not permitted.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
contains 并且 lower 是策略正文中支持的 SQL 子集的一部分。 有关编写策略函数的完整列表和规则,请参阅 服务策略函数参考。
将函数附加为自定义策略,范围限定为请求阶段:
- 在模型服务的“ 策略 ”选项卡上,单击“ 新建策略 ”并输入 名称,例如
block-codename。 - 在 Guardrail 类型中,选择“ 自定义”。
- 单击“自定义函数”,然后选择“选择函数”。
main.governance.block_confidential_codename - 在“阶段”下,仅选择输入护栏(模型前),因为这是请求策略。
- 将 排名 设置为
10“,然后单击” 创建策略”。
步骤 3:添加自定义响应策略
模型还可以返回不想传递的内容。 此策略拒绝包含不安全链接( http:// URL 或 javascript: URI)的响应。
event:type::string = 'response' 检查将其限制在输出阶段 (ON RESULT),因此仅在提示中提及这些方案的用户不会在输入时触发它:
CREATE OR REPLACE FUNCTION main.governance.block_unsafe_links(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'response'
AND (contains(lower(event:context.message::string), 'http://')
OR contains(lower(event:context.message::string), 'javascript:'))
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Response contained an insecure link and was blocked by policy.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
将函数作为自定义策略附加,范围限定为响应阶段:
- 在“ 策略 ”选项卡上,单击“ 新建策略 ”并输入 名称,例如
block-unsafe-links。 - 在 Guardrail 类型中,选择“自定义”,然后在“
main.governance.block_unsafe_links下选择。 - 在“阶段”中,仅选择输出防护措施(模型之后),因为这是响应策略。
- 将 排名 设置为
20“,然后单击” 创建策略”。
步骤 4:验证
所有三个策略现在都出现在服务的“策略”选项卡上。使用操场确认每个策略都被触发:
- 在模型服务页上,单击 操场中的聊天。
- 发送一个提示,要求提供不安全或有害内容。 不安全内容保护栏阻挡了它,回复报告说该内容被政策屏蔽了。
- 发送
Tell me about Project Aurora.该请求会因请求策略而被阻止,原因是 不允许涉及机密项目的请求。 - 发送使模型返回
http://链接的提示。 响应策略在输出阶段(ON RESULT)阻挡该链接,原因为 响应包含不安全的链路,被策略阻挡。 - 发送常规提示词。 它返回正常完成状态。
如需通过您自己的应用或脚本测试服务,请参见 查询基础和嵌入模型。
清理
完成后,删除“ 策略 ”选项卡上的策略:打开创建的每个策略并将其删除。 然后(可选)删除自定义函数:
DROP FUNCTION IF EXISTS main.governance.block_confidential_codename;
DROP FUNCTION IF EXISTS main.governance.block_unsafe_links;