Mosaic AI Model Serving 中的外部模型

重要

本文中的代码示例演示如何使用公共预览版 MLflow 部署 CRUD API。

本文介绍 Mosaic AI Model Serving 中的外部模型,包括其支持的模型提供商和局限性。

什么是外部模型?

重要

现在可以在为外部模型提供服务的模型服务终结点上配置 Mosaic AI 网关。 AI 网关为这些模型服务终结点带来了治理、监视和生产就绪。 请参阅 Mosaic AI 网关

外部模型是在 Databricks 外部托管的第三方模型。 借助 Model Serving,外部模型可以简化组织内各种大型语言模型 (LLM) 提供商(如 OpenAI 和 Anthropic)的使用和管理。 还可以使用 Mosaic AI Model Serving 作为提供商来提供自定义模型,为这些终结点提供速率限制。 作为此支持的一部分,Model Serving 提供了一个高级接口,该接口通过提供统一的终结点来处理与特定 LLM 相关的请求来简化与这些服务的交互。

此外,Azure Databricks 对外部模型的支持还提供集中式凭据管理。 通过将 API 密钥存储在一个安全位置,组织可以通过最大程度地减少公开整个系统中的敏感 API 密钥来增强其安全态势。 它还有助于防止在代码中公开这些密钥或要求最终用户安全地管理密钥。

请参阅教程:创建外部模型终结点以查询 OpenAI 模型,以获取有关使用 MLflow 部署 SDK 创建外部模型终结点和查询这些终结点提供的受支持模型的分步指南。 有关如何使用服务 UI 和 REST API 的说明,请参阅以下指南:

要求

模型提供商

Model Serving 中的外部模型可支持各种模型提供商。 提供商表示机器学习模型的来源,例如 OpenAI、Anthropic 等。 每个提供商都有其特定的特征和配置,这些特征和配置封装在外部模型终结点配置external_model 字段中。

支持以下提供商:

  • openai:适用于 OpenAI 提供的模型,以及 Azure OpenAI 和带 AAD 的 Azure OpenAI 的 Azure 集成。
  • anthropic:适用于 Anthropic 提供的模型。
  • cohere:适用于 Cohere 提供的模型。
  • amazon-bedrock:适用于 Amazon Bedrock 提供的模型。
  • google-cloud-vertex-ai:适用于 Google Cloud Vertex AI 提供的模型。
  • databricks-model-service:适用于具有兼容架构的 Mosaic AI Model Serving 终结点。 请参阅终结点配置

若要请求支持此处未列出的提供商,请联系 Databricks 帐户团队。

支持的模型

选择的模型直接影响从 API 调用获取的响应结果。 因此,请选择符合用例要求的模型。 例如,对于生成聊天响应,可以选择聊天模型。 相反,对于生成文本嵌入,可以选择嵌入模型。

下表提供了支持的模型和相应终结点类型的非详尽列表。 给定提供商提供新发布的模型类型时,若要为这些类型配置终结点,下面列出的模型关联可用作有帮助的指南。 客户需负责确保遵守适用的模型许可条款。

注意

随着 LLM 的快速发展,不能保证此列表随时处于最新状态。

模型提供商 llm/v1/completions llm/v1/chat llm/v1/embeddings
OpenAI** - gpt-3.5-turbo-instruct
- babbage-002
- davinci-002
- gpt-3.5-turbo
- gpt-4
- gpt-4o
- gpt-4o-2024-05-13
- gpt-4o-mini
- gpt-3.5-turbo-0125
- gpt-3.5-turbo-1106
- gpt-4-0125-preview
- gpt-4-turbo-preview
- gpt-4-1106-preview
- gpt-4-vision-preview
- gpt-4-1106-vision-preview
- text-embedding-ada-002
- text-embedding-3-large
- text-embedding-3-small
Azure OpenAI** - text-davinci-003
- gpt-35-turbo-instruct
- gpt-35-turbo
- gpt-35-turbo-16k
- gpt-4
- gpt-4-32k
- gpt-4o
- gpt-4o-mini
- text-embedding-ada-002
- text-embedding-3-large
- text-embedding-3-small
Anthropic - claude-1
- claude-1.3-100k
- claude-2
- claude-2.1
- claude-2.0
- claude-instant-1.2
- claude-3-5-sonnet-20240620
- claude-3-haiku-20240307
- claude-3-opus-20240229
- claude-3-sonnet-20240229
- claude-2.1
- claude-2.0
- claude-instant-1.2
Cohere** - command
- command-light
- command-r-plus
- command-r
- command
- command-light-nightly
- command-light
- command-nightly
- embed-english-v2.0
- embed-multilingual-v2.0
- embed-english-light-v2.0
- embed-english-v3.0
- embed-english-light-v3.0
- embed-multilingual-v3.0
- embed-multilingual-light-v3.0
Mosaic AI Model Serving Databricks 服务终结点 Databricks 服务终结点 Databricks 服务终结点
Amazon Bedrock Anthropic:

- claude-instant-v1
- claude-v2

Cohere:

- command-text-v14
- command-light-text-v14

AI21 Labs:

- j2-grande-instruct
- j2-jumbo-instruct
- j2-mid
- j2-mid-v1
- j2-ultra
- j2-ultra-v1
Anthropic:

- claude-v2
- claude-v2:1
- claude-3-sonnet-20240229-v1:0
- claude-3-5-sonnet-20240620-v1:0

Cohere:

- command-r-plus-v1:0
- command-r-v1:0
Amazon:

- titan-embed-text-v1
- titan-embed-g1-text-02

Cohere:

- embed-english-v3
- embed-multilingual-v3
AI21 Labs† - j2-mid
- j2-light
- j2-ultra
Google Cloud Vertex AI text-bison - chat-bison
- gemini-pro
- gemini-1.0-pro
- gemini-1.5-pro
- gemini-1.5-flash
textembedding-gecko

** 模型提供商支持微调的补全和聊天模型。 若要查询微调的模型,请使用你的微调模型的名称填充 external model 配置的 name 字段。

† 模型提供商支持自定义补全模型。

使用 Mosaic AI Model Serving 终结点上提供的模型

Mosaic AI Model Serving 终结点作为提供商,支持用于 llm/v1/completionsllm/v1/chatllm/v1/embeddings 终结点类型。 这些终结点必须接受根据需要标记的标准查询参数,而其他参数可能会被忽略,这取决于 Mosaic AI Model Serving 终结点是否支持这些参数。

有关标准查询参数,请参阅 API 参考中的 POST /service-endpoints/{name}/invocations

这些终结点必须以以下 OpenAI 格式生成响应。

用于完成任务:

{
"id": "123", # Not Required
"model": "test_databricks_model",
"choices": [
  {
    "text": "Hello World!",
    "index": 0,
    "logprobs": null, # Not Required
    "finish_reason": "length" # Not Required
  }
],
"usage": {
  "prompt_tokens": 8,
  "total_tokens": 8
  }
}

用于聊天任务:

{
  "id": "123", # Not Required
  "model": "test_chat_model",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  },
  {
    "index": 1,
    "message": {
      "role": "human",
      "content": "\n\nWhat is the weather in San Francisco?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}

用于嵌入任务:

{
  "data": [
    {
      "embedding": [
        0.0023064255,
        -0.009327292,
        .... # (1536 floats total for ada-002)
        -0.0028842222,
      ],
      "index": 0
    },
    {
      "embedding": [
        0.0023064255,
        -0.009327292,
        .... #(1536 floats total for ada-002)
        -0.0028842222,
      ],
      "index": 0
    }
  ],
  "model": "test_embedding_model",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}

终结点配置

若要提供和查询外部模型,需要配置服务终结点。 请参阅创建外部模型服务终结点

对于为终结点提供服务的外部模型,必须在终结点配置的 served_entities 部分中包括 external_model 字段及其参数。 如果在服务终结点中配置多个外部模型,则必须提供 traffic_config 来定义每个外部模型的流量路由百分比。

external_model 字段定义了此终结点将请求转发到的模型。 指定模型时,提供商支持所请求的模型至关重要。 例如,作为提供商的 openai 支持像 text-embedding-ada-002 这样的模型,但其他提供商则可能不支持。 如果提供商不支持模型,则 Databricks 在尝试将请求路由到该模型时返回 HTTP 4xx 错误。

下表总结了 external_model 字段参数。 有关终结点配置参数,请参阅 POST /api/2.0/serving-endpoints

参数 说明
name 要使用的模型的名称。 例如,对于 OpenAI 的 GPT-3.5-Turbo 模型,为 gpt-3.5-turbo
provider 指定此模型的提供商的名称。 此字符串值必须与支持的外部模型 提供商 相对应。 例如,openai 对应 OpenAI 的 GPT-3.5 模型。
task 任务对应于所需的语言模型交互类型。 支持的任务有“llm/v1/completions”、“llm/v1/chat”、“llm/v1/embeddings”。
<provider>_config 包含模型所需的任何其他配置详细信息。 这包括指定 API 基 URL 和 API 密钥。 请参阅配置终结点的提供商

下面是使用 create_endpoint() API 创建外部模型终结点的示例。 在此示例中,发送到完成终结点的请求将转发到 anthropic 提供的 claude-2 模型。

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

client.create_endpoint(
    name="anthropic-completions-endpoint",
    config={
        "served_entities": [
            {
                "name": "test",
                "external_model": {
                    "name": "claude-2",
                    "provider": "anthropic",
                    "task": "llm/v1/completions",
                    "anthropic_config": {
                        "anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
                    }
                }
            }
        ]
    }
)

为终结点配置提供商

创建终结点时,必须为指定的模型提供商提供所需的配置。 以下部分汇总了每个模型提供商适用的可用终结点配置参数。

注意

Databricks 会加密并安全地存储为每个模型提供程序提供的凭据。 删除关联的终结点时,会自动删除这些凭据。

OpenAI

配置参数 说明 需要 默认
openai_api_key 使用 OpenAI 服务的 OpenAI API 密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 openai_api_key_plaintext 必须使用以下字段之一来提供 API 密钥:openai_api_keyopenai_api_key_plaintext
openai_api_key_plaintext 使用 OpenAI 服务且以纯文本字符串形式提供的 OpenAI API 密钥。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 openai_api_key 必须使用以下字段之一来提供 API 密钥:必须提供 openai_api_keyopenai_api_key_plaintext
openai_api_type 用于指定要使用的 OpenAI API 类型的可选字段。 openai
openai_api_base OpenAI API 的基 URL。 https://api.openai.com/v1
openai_api_version 用于指定 OpenAI API 版本的可选字段。
openai_organization 用于指定 OpenAI 中的组织的可选字段。

Cohere

配置参数 说明 需要 默认
cohere_api_key Cohere API 密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 cohere_api_key_plaintext 必须使用以下字段之一来提供 API 密钥:cohere_api_keycohere_api_key_plaintext
cohere_api_key_plaintext 以纯文本字符串形式提供的 Cohere API 密钥。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 cohere_api_key 必须使用以下字段之一来提供 API 密钥:cohere_api_keycohere_api_key_plaintext
cohere_api_base Cohere 服务的基 URL。

Anthropic

配置参数 说明 需要 默认
anthropic_api_key Anthropic API 密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 anthropic_api_key_plaintext 必须使用以下字段之一来提供 API 密钥:anthropic_api_keyanthropic_api_key_plaintext
anthropic_api_key_plaintext 以纯文本字符串形式提供的 Anthropic API 密钥。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 anthropic_api_key 必须使用以下字段之一来提供 API 密钥:anthropic_api_keyanthropic_api_key_plaintext

Azure OpenAI

与直接 OpenAI 服务相比,Azure OpenAI 具有不同的功能。 有关概述,请参阅比较文档

配置参数 说明 需要 默认
openai_api_key 使用 Azure 服务的 OpenAI API 密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 openai_api_key_plaintext 必须使用以下字段之一来提供 API 密钥:openai_api_keyopenai_api_key_plaintext
openai_api_key_plaintext 使用 Azure 服务且以纯文本字符串形式提供的 OpenAI API 密钥。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 openai_api_key 必须使用以下字段之一来提供 API 密钥:openai_api_keyopenai_api_key_plaintext
openai_api_type 要验证访问令牌,请使用 azure
openai_api_base Azure 提供的 Azure OpenAI API 服务的基 URL。
openai_api_version 要利用的 Azure OpenAI 服务的版本(按日期指定)。
openai_deployment_name Azure OpenAI 服务的部署资源的名称。
openai_organization 用于指定 OpenAI 中的组织的可选字段。

如果要将 Azure OpenAI 与 Microsoft Entra ID 配合使用,请在终结点配置中使用以下参数。

配置参数 说明 需要 默认
microsoft_entra_tenant_id Microsoft Entra ID 身份验证的租户 ID。
microsoft_entra_client_id Microsoft Entra ID 身份验证的客户端 ID。
microsoft_entra_client_secret 用于 Microsoft Entra ID 身份验证的客户端密码的 Azure Databricks 密钥参考。 如果希望直接粘贴客户端密码,请参阅 microsoft_entra_client_secret_plaintext 必须使用以下字段之一来提供 API 密钥:microsoft_entra_client_secretmicrosoft_entra_client_secret_plaintext
microsoft_entra_client_secret_plaintext 用于 Microsoft Entra ID 身份验证且以纯文本字符串形式提供的客户端密码。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 microsoft_entra_client_secret 必须使用以下字段之一来提供 API 密钥:microsoft_entra_client_secretmicrosoft_entra_client_secret_plaintext
openai_api_type 要使用 Microsoft Entra ID 进行身份验证,请使用 azuread
openai_api_base Azure 提供的 Azure OpenAI API 服务的基 URL。
openai_api_version 要利用的 Azure OpenAI 服务的版本(按日期指定)。
openai_deployment_name Azure OpenAI 服务的部署资源的名称。
openai_organization 用于指定 OpenAI 中的组织的可选字段。

以下示例演示如何使用 Azure OpenAI 创建终结点:

client.create_endpoint(
    name="openai-chat-endpoint",
    config={
        "served_entities": [{
            "external_model": {
                "name": "gpt-3.5-turbo",
                "provider": "openai",
                "task": "llm/v1/chat",
                "openai_config": {
                    "openai_api_type": "azure",
                    "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
                    "openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
                    "openai_deployment_name": "my-gpt-35-turbo-deployment",
                    "openai_api_version": "2023-05-15"
                }
            }
        }]
    }
)

Google Cloud Vertex AI

配置参数 说明 需要 默认
private_key 有权访问 Google Cloud Vertex AI 服务的服务帐户私钥的 Azure Databricks 密钥参考。 请参阅管理服务帐户密钥的最佳做法。 如果希望直接粘贴 API 密钥,请参阅 private_key_plaintext 必须使用以下字段之一来提供 API 密钥:private_keyprivate_key_plaintext
private_key_plaintext 有权访问 Google Cloud Vertex AI 服务且以纯文本密钥形式提供的服务帐户私钥。 请参阅管理服务帐户密钥的最佳做法。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 private_key 必须使用以下字段之一来提供 API 密钥:private_keyprivate_key_plaintext
region 这是 Google Cloud Vertex AI 服务的区域。 有关更多详细信息,请参阅支持的区域。 某些模型仅在特定区域中可用。
project_id 这是与服务帐户关联的 Google Cloud 项目 ID。

Amazon Bedrock

若要将 Amazon Bedrock 用作外部模型提供商,客户需要确保在指定的 AWS 区域中启用 Bedrock,并且指定的 AWS 密钥对具有与 Bedrock 服务交互的适当权限。 有关详细信息,请参阅 AWS 标识和访问管理

配置参数 说明 需要 默认
aws_region 要使用的 AWS 区域。 其中必须启用 Bedrock。
aws_access_key_id 有权与 Bedrock 服务交互的 AWS 访问密钥 ID 的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 aws_access_key_id_plaintext 必须使用以下字段之一来提供 API 密钥:aws_access_key_idaws_access_key_id_plaintext
aws_access_key_id_plaintext 有权与 Bedrock 服务交互且以纯文本字符串形式提供的 AWS 访问密钥 ID。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 aws_access_key_id 必须使用以下字段之一来提供 API 密钥:aws_access_key_idaws_access_key_id_plaintext
aws_secret_access_key 有权与 Bedrock 服务交互且与访问密钥 ID 配对的 AWS 机密访问密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 aws_secret_access_key_plaintext 必须使用以下字段之一来提供 API 密钥:aws_secret_access_keyaws_secret_access_key_plaintext
aws_secret_access_key_plaintext 与访问密钥 ID 配对的 AWS 机密访问密钥,它有权与 Bedrock 服务交互且以纯文本字符串形式提供。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 aws_secret_access_key 必须使用以下字段之一来提供 API 密钥:aws_secret_access_keyaws_secret_access_key_plaintext
bedrock_provider Amazon Bedrock 中的基础提供商。 支持的值(不区分大小写)包括:Anthropic、Cohere、AI21Labs、Amazon

以下示例演示了如何使用 Amazon Bedrock 和访问密钥创建终结点。

client.create_endpoint(
    name="bedrock-anthropic-completions-endpoint",
    config={
        "served_entities": [
            {
                "external_model": {
                    "name": "claude-v2",
                    "provider": "amazon-bedrock",
                    "task": "llm/v1/completions",
                    "amazon_bedrock_config": {
                        "aws_region": "<YOUR_AWS_REGION>",
                        "aws_access_key_id": "{{secrets/my_amazon_bedrock_secret_scope/aws_access_key_id}}",
                        "aws_secret_access_key": "{{secrets/my_amazon_bedrock_secret_scope/aws_secret_access_key}}",
                        "bedrock_provider": "anthropic",
                    },
                }
            }
        ]
    },
)

如果存在 AWS 权限问题,Databricks 建议使用 Amazon Bedrock API 直接验证凭据。

AI21 Labs

配置参数 说明 需要 默认
ai21labs_api_key AI21 Labs API 密钥的 Azure Databricks 密钥参考。 如果希望直接粘贴 API 密钥,请参阅 ai21labs_api_key_plaintext 必须使用以下字段之一来提供 API 密钥:ai21labs_api_keyai21labs_api_key_plaintext
ai21labs_api_key_plaintext 以纯文本字符串形式提供的 AI21 Labs API 密钥。 如果希望使用 Azure Databricks 机密来引用密钥,请参阅 ai21labs_api_key 必须使用以下字段之一来提供 API 密钥:ai21labs_api_keyai21labs_api_key_plaintext

在终结点上配置 AI 网关

还可以配置终结点以启用 Mosaic AI 网关 功能,例如速率限制、使用情况跟踪和防护措施。

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

查询外部模型终结点

创建外部模型终结点后,即可接收来自用户的流量。

可以使用 OpenAI 客户端、REST API 或 MLflow 部署 SDK 向终结点发送评分请求。

以下示例使用 OpenAI 客户端查询由 Anthropic 托管的 claude-2 完成模型。 若要使用 OpenAI 客户端,请在 model 字段中填充托管着你要查询的模型的模型服务终结点的名称。

此示例使用以前创建的终结点 anthropic-completions-endpoint,该终结点是为访问 Anthropic 模型提供商提供的外部模型而配置的。 了解如何创建外部模型终结点

有关你可以查询的其他模型及其提供商,请参阅支持的模型

import os
import openai
from openai import OpenAI

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

completion = client.completions.create(
  model="anthropic-completions-endpoint",
  prompt="what is databricks",
  temperature=1.0
)
print(completion)

预期的输出响应格式:

{
"id": "123", # Not Required
"model": "anthropic-completions-endpoint",
"choices": [
  {
    "text": "Hello World!",
    "index": 0,
    "logprobs": null, # Not Required
    "finish_reason": "length" # Not Required
  }
],
"usage": {
  "prompt_tokens": 8,
  "total_tokens": 8
  }
}

其他查询参数

作为查询的一部分,可以传递终结点的提供商支持的任何其他参数。

例如:

  • logit_bias(受 OpenAI、Cohere 支持)。
  • top_k(受 Anthropic、Cohere 支持)。
  • frequency_penalty(受 OpenAI、Cohere 支持)。
  • presence_penalty(受 OpenAI、Cohere 支持)。
  • stream(受 OpenAI、Anthropic、Cohere、Amazon Bedrock for Anthropic 支持)。 这仅适用于聊天和补全请求。

限制

根据你选择的外部模型,配置可能会导致在数据来源区域外处理数据。 请参阅模型服务限制和区域

其他资源