教學課程:建立外部模型端點以查詢 OpenAI 模型

本頁提供逐步說明如何配置與查詢外部模型端點,該端點可支援 OpenAI 模型的完成、聊天及嵌入。 你可以用 MLflow Deployments SDK 建立端點,並用 OpenAI 客戶端查詢。 欲了解更多資訊,請參閱 外部模型。

建立端點後,Databricks 建議在端點上設定 Unity Gateway,以加入治理功能,如使用追蹤、有效載荷記錄、護欄和速率限制。 所有透過 Model Serving 提供的外部模型都會使用 OpenAI 相容的 API 查詢,因此你可以在同一客戶端跨供應商使用。 請參考 Unity Gateway 的 AI 治理。

Tip

告訴 精靈代碼 (代理模式)幫你做這件事:

Create a new notebook that uses the MLflow Deployments SDK to create an external model endpoint named openai-completions-endpoint that serves OpenAI's gpt-3.5-turbo-instruct model for completions, reading my OpenAI API key from a Databricks secret scope. Then send a test completion request to the endpoint and display the response.

如果您想要使用服務 UI 來完成這項工作,請參閱 建立外部模型服務端點。

Requirements

  • Databricks Runtime 13.0 ML 或更新版本。
  • MLflow 2.9 或更新版本。
  • OpenAI API 金鑰。
  • 安裝 Databricks CLI 0.205 版或更新版本。

(選擇性)步驟 0:使用 Databricks Secrets CLI 儲存 OpenAI API 金鑰

您可以在步驟 3 中提供 API 金鑰作為純文字字串,或者使用 Azure Databricks 機密來提供。

若要將 OpenAI API 金鑰儲存為秘密,您可以使用 Databricks Secrets CLI(0.205 版和更新版本)。 您也可以使用 REST API 處理憑證。

下列會建立名為 的秘密範圍,然後在該範圍中建立秘密 。

databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key

步驟 1:使用外部模型支持安裝 MLflow

使用下列項目來安裝具有外部模型支援的 MLflow 版本:

%pip install mlflow[genai]>=2.9.0

步驟 2:建立和管理外部模型端點

Important

本節中的程式代碼範例示範如何使用公開預覽的MLflow 部署 CRUD SDK。

若要建立大型語言模型的外部模型端點 (LLM),請使用 create_endpoint() MLflow 部署 SDK 中的 方法。 您也可以 在服務 UI 中建立外部模型端點。

下列代碼段會為 OpenAI gpt-3.5-turbo-instruct 建立完成點,正如配置的 served_entities 區段中所指定。 針對您的端點,請務必為每個字段填入 name 和 openai_api_key 的唯一值。

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [{
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "openai_config": {
                    "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
                }
            }
        }]
    }
)

下列代碼段示範如何提供 OpenAI API 金鑰做為純文字字串,以替代方式建立與上述相同的完成端點。

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [{
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "openai_config": {
                    "openai_api_key_plaintext": "sk-yourApiKey"
                }
            }
        }]
    }
)

如果您使用 Azure OpenAI,您也可以在 openai_config 組態的 區段中指定 Azure OpenAI 部署名稱、端點 URL 和 API 版本。

client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [
          {
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "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"
                },
            },
          }
        ],
    },
)

若要設定速率限制、使用追蹤、有效載荷記錄或端點上的護欄,請使用 Unity Gateway。 透過 Unity Gateway 設定速率限制支援查詢(QPM)與憑證(TPM)限制,並可設定每位使用者、群組及端點範圍的限制。

請參閱「 在模型服務端點(舊版)配置治理 」一文,該程式範例更新端點以加入速率限制及其他 Unity Gateway 功能。

Note

先前記載的具有頂層 client.update_endpoint() 欄位的 rate_limits 模式已被棄用。 建議在端點上使用 Unity Gateway 設定。

步驟 3:將要求傳送至外部模型端點

Databricks 建議使用 OpenAI 用戶端查詢外部模型端點。 Model Serving 在不同供應商間公開統一且相容的 OpenAI API,因此無論底層模型來自 OpenAI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI 或自訂供應商,客戶端程式碼皆可正常運作。

在您的運算電腦上安裝 OpenAI 用戶端:

%pip install openai

以下是將聊天完成請求發送給服務 OpenAI 聊天模型的端點。 將 base_url 的值替換為你的 Azure Databricks 工作區 URL,並為 提供 api_key。 將 model 參數設為您模型服務端點的名稱。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

response = client.chat.completions.create(
    model="openai-chat-endpoint",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the capital of France?"}
    ],
    max_tokens=128,
    temperature=0.1,
)
print(response.choices[0].message.content)

若要向已設定該 llm/v1/completions 任務的端點發送完成請求,請使用 client.completions.create():

response = client.completions.create(
    model="openai-completions-endpoint",
    prompt="What is the capital of France?",
    max_tokens=10,
    temperature=0.1,
    n=2,
)
print(response)

若要向已設定該 llm/v1/embeddings 任務的端點發送嵌入請求,請使用 client.embeddings.create():

response = client.embeddings.create(
    model="openai-embeddings-endpoint",
    input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)

如果你在 Azure Databricks 筆記本裡執行 OpenAI 客戶端,可以使用 databricks-openai 助手,它會自動設定認證和工作區基礎網址。 詳情請參見 使用基礎模型 。

步驟 4:比較不同提供者的模型

模型服務支援許多外部模型提供者,包括 Open AI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI 等等。 您可以比較跨提供者的 LLM,協助您使用 AI 遊樂場將應用程式的正確性、速度和成本優化。

下列範例會建立 Anthropic claude-2 的端點,並將其回應與使用 OpenAI gpt-3.5-turbo-instruct的問題進行比較。 這兩個回應都有相同的標準格式,因此易於比較。

建立 Anthropic claude-2 的端點

import mlflow.deployments

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

client.create_endpoint(
    name="anthropic-completions-endpoint",
    config={
        "served_entities": [
            {
                "name": "claude-completions",
                "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 相容的 API,你可以將 model 參數切換為對應的端點名稱,使用同一個 OpenAI 用戶端查詢這兩個端點。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

prompt = "How is Pi calculated? Be very concise."

openai_response = client.completions.create(
    model="openai-completions-endpoint",
    prompt=prompt,
)
anthropic_response = client.completions.create(
    model="anthropic-completions-endpoint",
    prompt=prompt,
)

print("OpenAI:", openai_response.choices[0].text)
print("Anthropic:", anthropic_response.choices[0].text)

其他資源