在模型服务终结点上配置 AI 网关

本文介绍如何在模型服务终结点上配置 Mosaic AI 网关

Requirements

使用 UI 配置 AI 网关

在终结点创建页的 AI 网关 部分中,可以单独配置 AI 网关功能。 请参阅 支持的功能,了解哪些功能可用于外部模型服务端点和预配吞吐量端点。

配置 AI 网关功能

下表总结了如何使用服务 UI 在终结点创建过程中配置 AI 网关。 如果首选以编程方式执行此操作,请参阅笔记本示例

Feature 如何启用 Details
Usage tracking 选择启用使用情况跟踪,以启用数据使用情况指标的跟踪和监视。
默认情况下,此功能为 按令牌付费 端点启用。
  • 必须启用 Unity Catalog。
  • 帐户管理员必须先启用服务系统表架构,然后才能使用以下系统表:system.serving.endpoint_usage,用于捕获对终结点的每个请求的令牌计数;system.serving.served_entities,用于存储每个基础模型的元数据。
  • 请参阅 使用情况跟踪表架构
  • 只有帐户管理员有权查看或查询 served_entities 表或 endpoint_usage 表,即使管理终结点的用户必须启用使用情况跟踪。 请参阅授予对系统表的访问权限
  • 如果模型未返回令牌计数,则输入和输出令牌计数估计为 (text_length+1)/4。
  • system.serving.served_entities 系统表目前不支持用于按令牌付费的终结点
Payload logging 选择启用推理表,以自动将来自终结点的请求和响应记录到 Unity Catalog 管理的 Delta 表中。
  • 您必须启用 Unity Catalog,并在指定的目录模式中拥有CREATE TABLE访问权限。
  • 由 AI 网关启用的推理表 的架构不同于 旧推理表 ,这些表仅在提供自定义模型的终结点上受支持。 请参阅已启用 AI 网关的推理表架构
  • 在查询端点后不到一小时,载荷日志数据即填充这些表。
  • 不会记录大于 1 MiB 的有效负载。
  • 响应有效负载会聚合所有返回区块的响应。
  • 支持在线观看。 在流式传输场景中,响应载荷聚合了返回区块的响应。
  • 用于路由优化模型服务终结点的推理表为公共预览版
AI Guardrails 请参阅在 UI 中配置 AI 护栏
  • 防护措施可防止模型与模型输入和输出中检测到的不安全有害内容进行交互。
  • 嵌入模型或流式处理不支持输出护栏。
Rate limits 选择 速率限制 以管理和指定终结点可以接收的每个分钟(QPM)的查询数,包括整体查询和每个用户。 速率限制仅适用于有权查询终结点的用户。
可以在不同级别定义速率限制。
  • 使用 “终结点” 字段指定整个终结点可以处理的最大 QPM。 此限制适用于所有流量,而不考虑用户。
  • 使用 “用户”(默认) 字段设置适用于终结点所有用户的默认每用户速率限制,除非定义了更具体的自定义速率限制。

可以指定以下自定义速率限制:
  • 单个用户或服务主体。 这些策略优先于用户组自定义速率限制。
  • User groups. 此限制是所有组成员共享的速率限制。
  • 默认情况下,没有为用户或终结点配置速率限制。
  • 在终结点上最多可以指定 20 个速率限制和最多 5 个组特定的速率限制。
  • 终结点速率限制是全局最大值。 如果超出此限制,则会阻止所有对端点的请求,而不考虑任何用户或组的特定速率限制。
  • 自定义速率限制将覆盖用户(默认)速率限制。
  • 如果用户同时属于用户特定的限制和特定于组的限制,则会强制实施特定于用户的限制。
  • 如果用户属于具有不同速率限制的多个用户组,则会应用限制最少(最高)组速率限制。
Traffic splitting “服务实体 ”部分中,指定要路由到特定模型的 流量百分比
若要以编程方式在终结点上配置流量拆分,请参阅 向终结点提供多个外部模型
  • 若要将所有流量路由到特定模型,请将其设置为 100%。
  • 如果要指定仅用于回退的模型,请将该模型添加到端点,并将其流量百分比设置为 0%。
  • 若要跨模型对流量进行负载均衡并设置回退,可以预期出现以下行为:
  • 请求根据分配的流量百分比随机拆分到实体之间。
  • 如果请求命中第一个实体但失败,它将按照在创建终结点期间列出的服务实体顺序或最近的终结点更新回退到下一个实体。
  • 流量拆分不会影响回退尝试的顺序。
Fallbacks 选择“AI 网关”部分中的 “启用回退 ”,将请求作为回退发送到终结点上的其他服务模型。
  • 如果路由到特定实体的初始请求返回 4295XX 错误,则请求会回退到终结点上列出的下一个实体。
  • 将请求重定向到回退服务实体的顺序基于模型在创建终结点或最新终结点更新期间列出的顺序。 流量百分比不会影响发送到服务实体的回退尝试的顺序。
  • 只有外部模型支持回退。
  • 必须先将流量百分比分配给端点上提供的其他模型,然后才能启用外部模型的回退机制。
  • 任何分配有 0% 流量的外部模型都将专门用作回退模型。
  • 最多可以回退两次。
  • 每个实体按顺序尝试一次,直到请求成功。 如果所有列出的实体均未成功尝试,则请求会失败。
  • 第一次成功或最后一次失败的请求尝试和响应将记录在使用情况跟踪和有效负载日志记录表中。

下图显示了一个后备方案示例,其中,

  • 在模型服务终结点上提供三个服务实体。
  • 请求最初路由到 服务实体 3
  • 如果请求返回 200 响应,则请求在 服务实体 3 上成功,请求及其响应将记录到终结点的使用情况跟踪和有效负载日志记录表。
  • 如果请求在 服务实体 3 上返回 429 或 5xx 错误,则请求会回退到终结点上的下一个服务实体 ,即“已处理”实体 1
    • 如果请求在 服务实体 1 上返回 429 或 5xx 错误,则请求会回退到终结点上的下一个服务实体 ,即“已处理”实体 2
    • 如果请求在 服务实体 2 上返回 429 或 5xx 错误,则请求会失败,因为这是回退实体的最大数目。 失败的请求和响应错误将记录到使用情况跟踪和有效负载日志记录表。

回退图示例

在 UI 中配置 AI 护栏

Important

此功能目前以公共预览版提供。

下表显示了如何配置支持的护栏

Note

2025 年 5 月 30 日之后,不再支持主题审查和关键字筛选 AI 防护措施。 如果工作流需要这些功能,请联系 Databricks 帐户团队,参与自定义防护栏个人预览版。

Guardrail 如何启用
Safety 选择安全以启用安全措施,防止模型与不安全且有害的内容进行交互。
个人身份信息 (PII) 检测 如果终结点请求和响应中检测到此类信息,请选择 “阻止 ”或 “屏蔽 PII 数据”(例如姓名、地址、信用卡号)。 否则,请选择 “无” ,不进行 PII 检测。

配置 AI 护栏功能

使用情况跟踪表架构

以下部分概述了用于system.serving.served_entitiessystem.serving.endpoint_usage系统表的使用情况跟踪表的架构。

system.serving.served_entities 使用情况跟踪表架构

Note

system.serving.served_entities 使用情况跟踪系统表目前不支持用于按令牌付费的终结点。

system.serving.served_entities 使用情况跟踪系统表采用以下架构:

Column name Description 类型
served_entity_id 所服务实体的唯一 ID。 STRING
account_id Delta Sharing 的客户帐户 ID。 STRING
workspace_id 服务终结点的客户工作区 ID。 STRING
created_by 创建者的 ID。 STRING
endpoint_name 服务终结点的名称。 STRING
endpoint_id 服务终结点的唯一 ID。 STRING
served_entity_name 所服务实体的名称。 STRING
entity_type 所服务实体的类型。 可以是 FEATURE_SPECEXTERNAL_MODELFOUNDATION_MODELCUSTOM_MODEL STRING
entity_name 实体的基础名称。 与用户提供的名称 served_entity_name 不同。 例如,entity_name 是 Unity Catalog 模型的名称。 STRING
entity_version 服务实体的版本。 STRING
endpoint_config_version 终结点配置的版本。 INT
task 任务类型。 可以是 llm/v1/chatllm/v1/completionsllm/v1/embeddings STRING
external_model_config 外部模型的配置。 例如: {Provider: OpenAI} STRUCT
foundation_model_config 基础模型的配置。 例如 {min_provisioned_throughput: 2200, max_provisioned_throughput: 4400} STRUCT
custom_model_config 自定义模型的配置。 例如 { min_concurrency: 0, max_concurrency: 4, compute_type: CPU } STRUCT
feature_spec_config 功能规范的配置。 例如: { min_concurrency: 0, max_concurrency: 4, compute_type: CPU } STRUCT
change_time 服务实体的更改时间戳。 TIMESTAMP
endpoint_delete_time 实体删除操作的时间戳。 终结点是所服务实体的容器。 删除终结点后,还会删除所服务实体。 TIMESTAMP

system.serving.endpoint_usage 使用情况跟踪表架构

system.serving.endpoint_usage 使用情况跟踪系统表采用以下架构:

Column name Description 类型
account_id 客户帐户 ID。 STRING
workspace_id 服务终结点的客户工作区 ID。 STRING
client_request_id 可在模型服务请求正文中指定的用户提供的请求标识符。 对于自定义模型终结点,对于大于 4MiB 的请求,不支持这样做。 STRING
databricks_request_id 附加到所有模型服务请求的 Azure Databricks 生成的请求标识符。 STRING
requester 对服务终结点的调用请求使用其权限的用户或服务主体的 ID。 STRING
status_code 从模型返回的 HTTP 状态代码。 INTEGER
request_time 接收请求的时间戳。 TIMESTAMP
input_token_count 输入的标记计数。 对于自定义模型请求,这为 0。 LONG
output_token_count 输出的标记计数。 对于自定义模型请求,这为 0。 LONG
input_character_count 输入字符串或提示的字符计数。 对于自定义模型请求,这为 0。 LONG
output_character_count 响应输出字符串的字符计数。 对于自定义模型请求,这为 0。 LONG
usage_context 用户提供的映射,包含对终结点发出调用的最终用户或客户应用程序的标识符。 请参阅使用 usage_context 进一步定义用法。 对于自定义模型终结点,对于大于 4MiB 的请求,不支持这样做。 MAP
request_streaming 请求是否处于流模式。 BOOLEAN
served_entity_id 唯一 ID,用于与 system.serving.served_entities 维度表联接,以查找有关终结点和服务实体的信息。 STRING

使用 usage_context 进一步定义使用情况

在启用使用情况跟踪的情况下查询外部模型时,可以提供类型 usage_contextMap[String, String] 参数。 用法上下文映射显示在 usage_context 列的使用情况跟踪表中。 usage_context 映射大小不能超过 10 KiB。

{
  "messages": [
    {
      "role": "user",
      "content": "What is Databricks?"
    }
  ],
  "max_tokens": 128,
  "usage_context":
    {
      "use_case": "external",
      "project": "project1",
      "priority": "high",
      "end_user_to_charge": "abcde12345",
      "a_b_test_group": "group_a"
    }
}

如果您使用 OpenAI Python 客户端,可以通过在usage_context参数中包含extra_body来指定它。

from openai import OpenAI

client = OpenAI(
    api_key="dapi-your-databricks-token",
    base_url="https://example.staging.cloud.databricks.com/serving-endpoints"
)

response = client.chat.completions.create(
    model="databricks-claude-3-7-sonnet",
    messages=[{"role": "user", "content": "What is Databricks?"}],
    temperature=0,
    extra_body={"usage_context": {"project": "project1"}},
)
answer = response.choices[0].message.content
print("Answer:", answer)

帐户管理员可以根据用法上下文汇总不同的行,以获得见解,并且可以将此信息与有效负载日志记录表中的信息进行联接。 例如,可以将 end_user_to_charge 添加到 usage_context,以跟踪最终用户的成本归因。

监视终端使用情况

若要监视终结点使用情况,可以联接终结点的系统表和推理表。

联接系统表

此示例仅适用于外部模型和预配的吞吐量终结点。 served_entities 系统表对于按令牌付费的终结点不受支持,但你可以联接推理表和使用情况表来获取类似的详细信息。

若要联接 endpoint_usage 表和 served_entities 系统表,请使用以下 SQL:

SELECT * FROM system.serving.endpoint_usage as eu
JOIN system.serving.served_entities as se
ON eu.served_entity_id = se.served_entity_id
WHERE created_by = "\<user_email\>";

联接推理和使用情况表

下文将联接 endpoint_usage 系统表和推理表,用于按令牌付费的终端点。 必须在终结点上启用推理表和使用情况跟踪以联接这些表。

SELECT * FROM system.serving.endpoint_usage AS endpoint_usage
JOIN
  (SELECT DISTINCT(served_entity_id) AS fmapi_served_entity_id
  FROM <inference table name>) fmapi_id
ON fmapi_id.fmapi_served_entity_id = endpoint_usage.served_entity_id;

在终结点上更新 AI 网关功能

可以在以前启用 AI 网关功能和未启用该功能的模型服务终结点上更新 AI 网关功能。 应用 AI 网关配置更新大约需要 20-40 秒,但速率限制更新最长可能需要 60 秒。

下面演示了如何使用服务 UI 在模型服务终结点上更新 AI 网关功能。

在终结点页面的网关部分中,可以看到已启用的功能。 若要更新这些功能,请单击编辑 AI 网关

更新 AI 网关功能

笔记本示例

以下笔记本演示了如何以编程方式启用和使用 Databricks Mosaic AI 网关功能,以便管理和治理来自提供程序的模型。 有关 REST API 的详细信息,请参阅 PUT /api/2.0/service-endpoints/{name}/ai-gateway

启用 Databricks Mosaic AI 网关功能笔记本

Get notebook

Additional resources