教程:为模型服务添加服务策略保护栏

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):拒绝幻觉响应(仅响应)。

将不安全内容防护功能安装到模型服务中:

  1. 在工作区边栏中,单击 “AI 网关”。
  2. 在“ 模型 ”选项卡上,选择模型服务(main.default.team_chat)。
  3. 打开“ 策略 ”选项卡,然后单击“ 新建策略”。
  4. 输入 名称,例如 block-unsafe-content。
  5. 在 “应用于”下,保留 “所有帐户用户”,或将策略范围限定为特定主体。
  6. 在 护栏类型中,选择 “不安全内容”。
  7. 将 排名 设置为 1. 级别决定评估顺序:级别最低的会先处理请求,最后处理响应。
  8. 在 “阶段”下,选择 “输入护栏”(模型之前) 和 输出护栏(模型后),以便护栏在请求和响应上运行。
  9. 单击“创建策略”。

护栏使用预选的评估器模型服务(运行检查的 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 子集的一部分。 有关编写策略函数的完整列表和规则,请参阅 服务策略函数参考。

将函数附加为自定义策略,范围限定为请求阶段:

  1. 在模型服务的“ 策略 ”选项卡上,单击“ 新建策略 ”并输入 名称,例如 block-codename。
  2. 在 Guardrail 类型中,选择“ 自定义”。
  3. 单击“自定义函数”,然后选择“选择函数”。main.governance.block_confidential_codename
  4. 在“阶段”下,仅选择输入护栏(模型前),因为这是请求策略。
  5. 将 排名 设置为 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;

将函数作为自定义策略附加,范围限定为响应阶段:

  1. 在“ 策略 ”选项卡上,单击“ 新建策略 ”并输入 名称,例如 block-unsafe-links。
  2. 在 Guardrail 类型中,选择“自定义”,然后在“main.governance.block_unsafe_links下选择。
  3. 在“阶段”中,仅选择输出防护措施(模型之后),因为这是响应策略。
  4. 将 排名 设置为 20“,然后单击” 创建策略”。

步骤 4:验证

所有三个策略现在都出现在服务的“策略”选项卡上。使用操场确认每个策略都被触发:

  1. 在模型服务页上,单击 操场中的聊天。
  2. 发送一个提示,要求提供不安全或有害内容。 不安全内容保护栏阻挡了它,回复报告说该内容被政策屏蔽了。
  3. 发送 Tell me about Project Aurora. 该请求会因请求策略而被阻止,原因是 不允许涉及机密项目的请求。
  4. 发送使模型返回 http:// 链接的提示。 响应策略在输出阶段(ON RESULT)阻挡该链接,原因为 响应包含不安全的链路,被策略阻挡。
  5. 发送常规提示词。 它返回正常完成状态。

如需通过您自己的应用或脚本测试服务,请参见 查询基础和嵌入模型。

清理

完成后,删除“ 策略 ”选项卡上的策略:打开创建的每个策略并将其删除。 然后(可选)删除自定义函数:

DROP FUNCTION IF EXISTS main.governance.block_confidential_codename;
DROP FUNCTION IF EXISTS main.governance.block_unsafe_links;

后续步骤