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

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

要求

使用 UI 配置 AI 网关

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

配置 AI 网关功能

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

功能 如何启用 详细信息
使用情况跟踪 选择“启用使用情况跟踪”,以启用对数据使用情况指标的跟踪和监视。
默认情况下,此功能为 按令牌付费 端点启用。
  • 必须启用 Unity Catalog。
  • 帐户管理员在使用系统表之前,必须启用交付系统表架构,系统表system.serving.endpoint_usage捕获到达终结点的每个请求的令牌计数,系统表system.serving.served_entities存储每个基础模型的元数据。
  • 请参阅 使用情况跟踪表架构
  • 只有帐户管理员有权查看或查询 served_entities 表或 endpoint_usage 表,即使管理终结点的用户必须启用使用情况跟踪。 请参阅授予对系统表的访问权限
  • 如果模型未返回令牌计数,则输入和输出令牌计数估计为 (text_length+1)/4。
  • system.serving.served_entities 系统表目前不支持用于按令牌付费的终结点
有效负载日志记录 选择“启用推理表”,将端点的请求和响应自动记录到 Unity Catalog 管理的 Delta 表中。
  • 您必须启用 Unity Catalog,并在指定的目录模式中拥有CREATE_TABLE访问权限。
  • 由 AI 网关启用的推理表 的架构不同于 旧推理表 ,这些表仅在提供自定义模型的终结点上受支持。 请参阅已启用 AI 网关的推理表架构
  • 在查询端点后不到一小时,载荷日志数据即填充这些表。
  • 不会记录大于 1 MB 的有效负载。
  • 响应有效负载会聚合所有返回区块的响应。
  • 支持在线观看。 在流式传输场景中,响应载荷聚合了返回区块的响应。
  • 路由优化模型服务终结点的推理表为公共预览版
AI 护栏 请参阅在 UI 中配置 AI 护栏
  • 防护措施可防止模型与模型输入和输出中检测到的不安全有害内容进行交互。
  • 嵌入模型或流式处理不支持输出护栏。
速率限制 选择 “速率限制 ”以强制实施请求 速率限制 ,以管理每个用户和每个终结点的流量。
  • 速率限制在每分钟查询(QPM)中定义。
  • 对于每个用户和每个终结点,默认值 为“无限制 ”。
流量分配 “服务实体 ”部分中,指定要路由到特定模型的 流量百分比
若要以编程方式在终结点上配置流量拆分,请参阅 向终结点提供多个外部模型
  • 若要将所有流量路由到特定模型,请将其设置为 100%。
  • 如果要指定仅用于回退的模型,请将该模型添加到端点,并将其流量百分比设置为 0%。
  • 若要跨模型对流量进行负载均衡并设置回退,可以预期出现以下行为:
  • 请求根据分配的流量百分比随机拆分到实体之间。
  • 如果请求命中第一个实体但失败,它将按照在创建终结点期间列出的服务实体顺序或最近的终结点更新回退到下一个实体。
  • 流量拆分不会影响回退尝试的顺序。
回退 选择“AI 网关”部分中的 “启用回退 ”,将请求作为回退发送到终结点上的其他服务模型。
  • 如果路由到特定实体的初始请求返回 4295XX 错误,则请求会回退到终结点上列出的下一个实体。
  • 将请求重定向到回退服务实体的顺序基于模型在创建终结点或最新终结点更新期间列出的顺序。 流量百分比不会影响发送到服务实体的回退尝试的顺序。
  • 只有外部模型支持回退。
  • 必须先将流量百分比分配给端点上提供的其他模型,然后才能启用外部模型的回退机制。
  • 任何分配有 0% 流量的外部模型都将专门用作回退模型。
  • 最多可以回退两次。
  • 每个实体按顺序尝试一次,直到请求成功。 如果已尝试所有列出的实体,但未能成功,则请求会失败。
  • 第一次成功或最后一次失败的请求尝试和响应将记录在使用情况跟踪和有效负载日志记录表中。

下图显示了一个示例,其中,

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

回退图示例

在 UI 中配置 AI 护栏

重要

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

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

注释

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

护栏 如何启用 详细信息
安全 选择“安全”以启用安全措施,防止模型与不安全且有害的内容进行交互。
个人身份信息 (PII) 检测 如果终结点请求和响应中检测到此类信息,请选择 “阻止 ”或 “屏蔽 PII 数据”(例如姓名、地址、信用卡号)。 否则,请选择 “无” ,不进行 PII 检测。
有效主题(已弃用) 可以直接在此字段键入主题。 如果有多个项目,请确保在每个主题后按 Enter 键。 或者,可以上传文件 .csv.txt 文件。 最多可以指定 50 个有效主题。 每个主题不能超过 100 个字符
无效关键字(已弃用) 可以直接在此字段键入主题。 如果有多个项目,请确保在每个主题后按 Enter 键。 或者,可以上传文件 .csv.txt 文件。 最多可以指定 50 个无效关键字。 每个关键字不能超过 100 个字符。

配置 AI 护栏功能

使用情况跟踪表架构

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

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

注释

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

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

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

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

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

列名 说明 类型
account_id 客户帐户 ID。 字符串
workspace_id 服务端点的客户工作区 ID。 字符串
client_request_id 用户提供的请求标识符,可在模型服务请求正文中指定。 字符串
databricks_request_id 附加到所有模型服务请求的 Azure Databricks 生成的请求标识符。 字符串
requester 用户或服务主体的 ID,其权限用于服务端点的调用请求。 字符串
status_code 从模型返回的 HTTP 状态代码。 整数
request_time 接收请求的时间戳。 时间戳
input_token_count 输入的令牌计数。
output_token_count 输出的令牌计数。
input_character_count 输入字符串或提示符的字符计数。
output_character_count 响应的输出字符串的字符计数。
usage_context 用户提供的映射,包含对端点进行调用的最终用户或客户应用程序的标识符。 请参阅使用 usage_context 进一步定义用法 地图
request_streaming 请求是否处于流模式。 布尔
served_entity_id 用于与 system.serving.served_entities 维度表联接的唯一 ID,可查找有关端点和服务实体的信息。 字符串

使用 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 网关功能笔记本

获取笔记本

其他资源