分享方式:


Mosaic AI 模型服務中的外部模型

重要

本文中的程式碼範例示範公開預覽版 MLflow 部署 CRUD API 的使用方式。

本文說明 Mosaic AI 模型服務中的外部模型,包括其支援的模型提供者和限制。

什麼是外部模型?

重要

你現在可以在服務外部模型的模型服務端點上設定 Mosaic AI 閘道。 AI 閘道為這些模型服務端點實現了治理、監視和生產就緒。 請參閱 Mosaic AI 閘道

外部模型是指託管於 Databricks 外部的第三方模型。 外部模型受模型服務支援,可讓你簡化組織內各種大型語言模型 (LLM) 提供者的使用和管理,例如 OpenAI 和 Anthropic。 你也可以使用 Mosaic AI 模型作為提供者來提供自訂模型,為這些端點提供速率限制。 作為此支援的一部分,模型服務會提供高階介面,藉由提供統一端點來處理特定 LLM 相關要求,簡化與這些服務的互動。

此外,外部模型的 Azure Databricks 支援也提供了集中式認證管理。 藉由將 API 金鑰儲存在一個安全的位置,組織可以增強其安全性態勢,將整個系統內敏感性 API 金鑰的暴露風險降至最低。 它也有助於防止在程式碼中公開這些金鑰,或要求終端使用者安全地管理金鑰。

請參閱教學課程:建立外部模型端點來查詢 OpenAI 模型,以取得有關使用 MLflow 部署 SDK 建立外部模型端點以及查詢由這些端點服務的受支援模型的逐步指導。 如需如何使用服務 UI 和 REST API 的指示,請參閱下列指南:

需求

模型提供者

模型服務中的外部模型是為支援各種模型提供者而設計的。 提供者代表機器學習模型的來源,例如 OpenAI、Anthropic 等。 每個提供者都有其特定的特性和組態,這些特性和組態會封裝在外部模型端點組態external_model 欄位中。

支援下列提供者:

  • openai:適用於 OpenAI 所提供的模型,以及使用 AAD 且適用於 Azure OpenAI 和 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 模型服務端點。 請參閱端點組態

如果要要求此處未列出的提供者支援,請連絡你的 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 模型服務 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
* command-text-v14
* command-light-text-v14
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

** 模型提供者支援微調完成和聊天模型。 如果要查詢微調的模型,請使用微調模型的名稱填入 name 組態的 external model 欄位。

† 模型提供者支援自訂完成模型。

使用在 Mosaic AI 模型服務端點上提供的模型

針對 llm/v1/completionsllm/v1/chatllm/v1/embeddings 端點類型,支援 Mosaic AI 模型服務端點作為提供者。 這些端點必須接受標示為必要的標準查詢參數,而根據 Mosaic AI 模型服務端點是否支援,可能會忽略其他參數。

有關標準查詢參數,請參閱 API 參考中的 POST /serving-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

參數 Description
name 模型要使用的的名稱。 例如,gpt-3.5-turbo 對應 OpenAI 的 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 建立外部模型端點的範例。 在此範例中,傳送至完成端點的要求會轉寄至 claude-2 所提供的 anthropic 模型。

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}}"
                    }
                }
            }
        ]
    }
)

將多個外部模型服務至端點

你也可以在服務端點中設定多個外部模型,只要它們都有相同的工作類型,而且每個模型都有唯一的 name。 下列範例會建立一個服務端點,將 50% 的流量路由傳送至 OpenAI 所提供的 gpt-4,並將剩餘的 50% 流量路由傳送至 Anthropic 所提供的 claude-3-opus-20240229

import mlflow.deployments

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

client.create_endpoint(
    name="mix-chat-endpoint",
    config={
        "served_entities": [
            {
                "name": "served_model_name_1",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
                    }
                }
            },
            {
                "name": "served_model_name_2",
                "external_model": {
                    "name": "claude-3-opus-20240229",
                    "provider": "anthropic",
                    "task": "llm/v1/chat",
                    "anthropic_config": {
                        "anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
                    }
                }
            }
        ],
        "traffic_config": {
            "routes": [
                {"served_model_name": "served_model_name_1", "traffic_percentage": 50},
                {"served_model_name": "served_model_name_2", "traffic_percentage": 50}
            ]
        },
    }
)

設定端點的提供者

當你建立端點時,必須提供指定模型提供者的必要組態。 下列各節摘要說明每個模型提供者可用的端點組態參數。

注意

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 類型。 No openai
openai_api_base OpenAI API 的基底 URL。 No https://api.openai.com/v1
openai_api_version 選用欄位,指定 OpenAI API 版本。 No
openai_organization 選用欄位,指定 OpenAI 中的組織。 No

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。 No

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 進行存取權杖驗證。 Yes
openai_api_base Azure 提供的 Azure OpenAI API 服務的基底 URL。 Yes
openai_api_version 要利用的 Azure OpenAI 服務版本,按日期指定。 Yes
openai_deployment_name Azure OpenAI 服務的部署資源名稱。 Yes
openai_organization 選用欄位,指定 OpenAI 中的組織。 No

如果你搭配 Microsoft Entra ID 使用 Azure OpenAI,請在端點組態中使用下列參數。

組態參數 描述 是必要欄位 預設
microsoft_entra_tenant_id Microsoft Entra ID 驗證的租用戶 ID。 Yes
microsoft_entra_client_id Microsoft Entra ID 驗證的用戶端 ID。 Yes
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 使用 azuread,藉由 Microsoft Entra ID 進行驗證。 Yes
openai_api_base Azure 提供的 Azure OpenAI API 服務的基底 URL。 Yes
openai_api_version 要利用的 Azure OpenAI 服務版本,按日期指定。 Yes
openai_deployment_name Azure OpenAI 服務的部署資源名稱。 Yes
openai_organization 選用欄位,指定 OpenAI 中的組織。 No

下列範例示範如何使用 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 服務區域。 請參閱支援的區域以取得詳細資訊。 一些模型僅在特定區域可用。 Yes
project_id 這是服務帳戶所關聯的 Google Cloud 專案 ID。 Yes

Amazon Bedrock

如果要使用 Amazon Bedrock 作為外部模型提供者,客戶必須確定 Bedrock 已在指定的 AWS 區域中啟用,而且指定的 AWS 金鑰組具有適當的權限與 Bedrock 服務互動。 如需詳細資訊,請參閱 AWS 身分識別和存取權管理

組態參數 描述 是必要欄位 預設
aws_region 要使用的 AWS 區域。 Bedrock 必須在那裡啟用。 Yes
aws_access_key_id AWS 存取金鑰 ID (具有與 Bedrock 服務互動的權限) 的 Azure Databricks 祕密金鑰參考。 如果你偏好直接貼上 API 金鑰,請參閱 aws_access_key_id_plaintext 你必須使用下列其中一個欄位提供 API 金鑰:aws_access_key_idaws_access_key_id_plaintext
aws_access_key_id_plaintext AWS 存取金鑰 ID,其具有與以純文字字串形式提供的 Bedrock 服務互動的權限。 如果你偏好使用 Azure Databricks 祕密來參考金鑰,請參閱 aws_access_key_id 你必須使用下列其中一個欄位提供 API 金鑰:aws_access_key_idaws_access_key_id_plaintext
aws_secret_access_key 與存取金鑰 ID 配對之 AWS 祕密存取金鑰 (具有與 Bedrock 服務互動的權限) 的 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 Yes

下列範例示範如何使用存取金鑰在 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 模型提供者的外部模型而設定的端點 anthropic-completions-endpoint。 請參閱如何建立外部模型端點

如需你可以查詢的其他模型及其提供者,請參閱支援的模型

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 支援)。 這僅適用於聊天和完成要求。

限制

根據你選擇的外部模型,你的設定可能會導致資料在資料發源區域之外進行處理。 請參閱模型服務限制和區域

如果你選擇在服務端點中設定多個外部模型,則所有外部模型都必須具有相同的工作類型,而且每個模型都需要唯一的 name。 你不能在相同的服務端點中同時具有外部模型和非外部模型。

其他資源