本页提供了有关如何配置和查询提供 OpenAI 模型补全、聊天和嵌入功能的外部模型端点的分步说明。 使用 MLflow 部署 SDK 创建终结点,并使用 OpenAI 客户端对其进行查询。 有关详细信息,请参阅 外部模型。
创建终结点后,Databricks 建议在它上配置 Unity AI 网关,以添加治理功能,例如使用情况跟踪、有效负载日志记录、防护栏和速率限制。 通过模型服务提供的所有外部模型都使用与 OpenAI 兼容的 API 查询,因此可以在提供程序之间使用单个客户端。 请参阅 Unity AI 网关。
如果想要使用服务 UI 来完成此任务,请参阅创建外部模型服务终结点。
要求
- Databricks Runtime 13.0 ML 或更高版本。
- MLflow 2.9 或更高版本。
- OpenAI API 密钥。
- 安装 Databricks CLI 版本 0.205 或更高版本。
(可选)步骤 0:使用 Databricks 机密 CLI 存储 OpenAI API 密钥
可在步骤 3 中以纯文本字符串的形式提供 API 密钥,也可使用 Azure Databricks 机密提供该密钥。
若要将 OpenAI API 密钥存储为机密,可使用 Databricks 机密 CLI(版本 0.205 及更高版本)。 你还可以使用用于机密的 REST API。
以下操作创建名为 my_openai_secret_scope 的机密范围,然后在该范围中创建机密 openai_api_key。
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:创建和管理外部模型终结点
重要
本节中的代码示例演示如何使用公共预览版 MLflow 部署 CRUD SDK。
要为大型语言模型 (LLM) 创建外部模型终结点,请使用 MLflow 部署 SDK 中的 create_endpoint() 方法。 还可以在服务 UI 中创建外部模型终结点。
以下代码片段按照配置的 gpt-3.5-turbo-instruct 部分中指定的内容为 OpenAI 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 AI 网关。 通过 Unity AI 网关配置速率限制时,支持按请求次数计的(QPM)和按令牌数计的(TPM)限制,并且可以设置按用户、按组以及整个端点的限制。
有关通过更新端点来添加速率限制及其他 Unity AI Gateway 功能的编程示例,请参阅 在模型服务端点上配置 Unity AI Gateway。
注释
以前记录的具有顶级client.update_endpoint()字段的rate_limits模式已弃用。 请改用端点上的 Unity AI Gateway 配置。
步骤 3:将请求发送到外部模型终结点
Databricks 建议使用 OpenAI 客户端查询外部模型终结点。 模型服务跨提供程序公开与 OpenAI 兼容的统一 API,因此,相同的客户端代码适用于基础模型来自 OpenAI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI 或自定义提供程序。
在计算上安装 OpenAI 客户端:
%pip install openai
下面向提供 OpenAI 聊天模型的终结点发送聊天完成请求。 将 base_url 的值替换为 Azure Databricks 工作区 URL,并为 api_key 提供 Azure Databricks 个人访问令牌。 将 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 帮助程序,该帮助程序会自动配置身份验证和工作区基 URL。 有关详细信息,请参阅 “使用基础模型 ”。
步骤 4:比较来自不同提供程序的模型
模型服务支持众多外部模型提供商,包括 OpenAI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI 等。 可以跨提供商比较 LLM,帮助你使用 AI Playground 优化应用程序的准确性、速度和成本。
以下示例为 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)