Share via


Databricks 模型服務中的外部模型

重要

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

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

什麼是外部模型?

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

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

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

需求

模型提供者

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

支援下列提供者:

若要要求此處未列出的提供者支援,請連絡您的 Databricks 帳戶小組。

支援的模型

您選擇的模型會直接影響您從 API 呼叫取得的回應結果。 因此,選擇符合使用案例需求的模型。 例如,若要產生交談式回應,您可以選擇聊天模型。 相反地,若要產生文字的內嵌,您可以選擇內嵌模型。

下表提供支援模型和對應 端點類型的非詳盡清單。 在為任何新發行的模型類型設定端點時,下列模型關聯可用來作為實用指南,因為它們可供指定提供者使用。 客戶須負責確保符合適用的模型授權。

注意

隨著 LLM 的快速發展,不保證這份列表隨時都是最新的。

模型提供者 llm/v1/completions llm/v1/chat llm/v1/embeddings
OpenAI** * gpt-3.5-turbo-指示
* babbage-002
* davinci-002
* gpt-3.5-turbo
* gpt-4
* 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-指示
* gpt-35-turbo
* gpt-35-turbo-16k
* gpt-4
* gpt-4-32k
* 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-opus-20240229
* claude-3-sonnet-20240229
* claude-2.1
* claude-2.0
* claude-instant-1.2
Cohere** *命令
* command-light-nightly
* command-light
* command-nightly
* embed-english-v2.0
* embed-多語系-v2.0
* embed-english-light-v2.0
* embed-english-v3.0
* embed-english-light-v3.0
* embed-多語系-v3.0
* embed-多語系-light-v3.0
Databricks 模型服務 提供端點的 Databricks 提供端點的 Databricks 提供端點的 Databricks
Amazon Bedrock 人類:

* claude-instant-v1
* claude-v1
* claude-v2

Cohere:

* command-text-v14
* command-text-v14:7:4k
* command-light-text-v14
* command-light-text-v14:7:4k

AI21 Labs:

* j2-grande-instruct
* j2-jumbo-instruct
* j2-mid
* j2-mid-v1
* j2-ultra j2-ultra-v1
人類:

* claude-instant-v1:2:100k
* claude-v2
* claude-v2:0:18k
* claude-v2:0:100k
* claude-v2:1
* claude-v2:1:18k
* claude-v2:1:200k
* claude-3-sonnet-20240229-v1:0
亞馬遜:

* titan-embed-text-v1
* titan-embed-g1-text-02
* titan-embed-text-v1:2:8k
AI21 Labs† * j2-mid
* j2-light
* j2-ultra
Google Cloud 頂點 AI text-bison * chat-bison
* 雙子座親
textembedding-gecko

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

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

使用 Databricks 模型服務端點上的模型

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

如需標準查詢參數,請參閱 API 參考中的 POST /service-endpoints/{name}/調用

這些端點必須以下列 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 字段及其參數。

欄位 external_model 會定義此端點轉送要求的模型。 指定模型時,提供者必須支援您所要求的模型。 例如,作為提供者支援之類的text-embedding-ada-002模型,openai但其他提供者可能不支援。 如果提供者不支援模型,Databricks 會在嘗試將要求路由傳送至該模型時傳回 HTTP 4xx 錯誤。

下表摘要說明 external_model 欄位參數。 如需端點組態參數,請參閱 POST /api/2.0/service-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 金鑰。 請參閱 設定端點的提供者。

以下是使用 API 建立外部模型端點的 create_endpoint() 範例。 在此範例中,傳送至完成端點的要求會轉送至 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}}"
                    }
                }
            }
        ]
    }
)

設定端點的提供者

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

OpenAI

組態參數 描述 是必要欄位 預設
openai_api_key OpenAI 服務的 API 金鑰。 Yes
openai_api_type 選擇性欄位,指定要使用的 OpenAI API 類型。 No
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 金鑰。 Yes

Anthropic

組態參數 描述 是必要欄位 預設
anthropic_api_key Anthropic 服務的 API 金鑰。 Yes

Azure OpenAI

相較於直接 OpenAI 服務,Azure OpenAI 具有不同的功能。 如需概觀,請參閱 比較檔

組態參數 描述 是必要欄位 預設
openai_api_key Azure OpenAI 服務的 API 金鑰。 Yes
openai_api_type 調整此參數以代表慣用的安全性存取驗證通訊協定。 針對存取權杖驗證,請使用 azure。 若要使用 Azure Active Directory 進行驗證(Azure AD), azuread請使用 。 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 頂點 AI

組態參數 描述 是必要欄位 預設
private_key 這是服務帳戶的私鑰,可存取 Google Cloud Vertex AI Service。 請參閱 管理服務帳戶密鑰的最佳做法。 Yes
region 這是Google Cloud頂點 AI 服務的區域。 如需詳細資訊,請參閱支援的區域。 某些模型僅適用於特定區域。 Yes
project_id 這是服務帳戶相關聯的Google Cloud項目標識碼。 Yes

Amazon Bedrock

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

組態參數 描述 是必要欄位 預設
aws_region 要使用的 AWS 區域。 貝德羅克必須在那裡啟用。 Yes
aws_access_key_id AWS 存取金鑰標識碼,具有與 Bedrock 服務互動的許可權。 Yes
aws_secret_access_key AWS 秘密存取密鑰與存取金鑰標識元配對,具有與 Bedrock 服務互動的許可權。 Yes
bedrock_provider 亞馬遜貝德羅克的基礎供應商。 支援的值(不區分大小寫)包括:人類、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 金鑰。 Yes

查詢外部模型端點

建立外部模型端點之後,即可接收來自使用者的流量。

您可以使用 OpenAI 用戶端、REST API 或 MLflow 部署 SDK,將評分要求傳送至端點。

  • 請參閱 POST /serving-endpoints/{name}/invocations評分要求的標準查詢參數。
  • 查詢基礎模型

下列範例會使用 OpenAI 用戶端查詢 claude-2 Anthropic 所裝載的完成模型。 若要使用 OpenAI 用戶端,請使用裝載您要查詢之模型的模型服務端點名稱填 model 入字段。

此範例會使用先前建立的端點 , 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 (由人類學,科赫支援)。
  • frequency_penalty (由 OpenAI、Cohere 支援)。
  • presence_penalty (由 OpenAI、Cohere 支援)。
  • stream (由 OpenAI、人類學、科赫、亞馬遜人類學支援)。 這僅適用於聊天和完成要求。

限制

根據您選擇的外部模型,您的設定可能會導致數據在數據產生所在的區域之外進行處理。

請參閱 模型服務限制和區域

其他資源