tutorial: Criar endpoint de modelo externo para consultar modelos OpenAI
Esta página fornece instruções passo a passo para configurar e consultar um endpoint de modelo externo que disponibiliza modelos da OpenAI para complementos, bate-papo e incorporações. Você cria o endpoint com o SDK de Implantações do MLflow e o consulta com o cliente OpenAI. Para mais informações, consulte modelos externos.
Após criar um endpoint, Databricks recomenda configurar o Unity AI Gateway para adicionar recursos de governança, como acompanhamento de uso, registro de payloads, proteções e limites de taxa. Todos os modelos externos servidos através do Serving Modelo são consultados usando a API compatível com OpenAI , permitindo que você use um único cliente em todos os provedores. Consulte Unity AI Gateway.
Se o senhor preferir usar a UI de serviço para realizar essa tarefa, consulte Criar um modelo de serviço externo endpoint.
Requisitos
- Databricks Runtime 13,0 ML ou acima.
- MLflow 2,9 ou acima.
- OpenAI API key.
- Instale a versão Databricks CLI versão 0.205 ou acima.
(Opcional) Etapa 0: Armazene o OpenAI API key usando o Databricks Secrets CLI
O senhor pode fornecer sua chave API como texto simples strings na Etapa 3 ou usando Databricks Secrets.
Para armazenar o OpenAI API key como um segredo, o senhor pode usar o Databricks Secrets CLI (versão 0.205 e acima). O senhor também pode usar a API REST para segredos.
A seguir, o senhor cria um escopo secreto chamado my_openai_secret_scope e, em seguida, cria o segredo openai_api_key nesse escopo.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Etapa 1: Instalar o MLflow com suporte a modelos externos
Use o seguinte para instalar uma versão do MLflow com suporte a modelos externos:
%pip install mlflow[genai]>=2.9.0
Etapa 2: Criar e gerenciar um endpoint de modelo externo
Os exemplos de código nesta seção demonstram o uso do Public Preview MLflow Deployments CRUD SDK.
Para criar um endpoint de modelo externo para um modelo de linguagem grande (LLM), use o método create_endpoint() do SDK do MLflow Deployments. O senhor também pode criar um endpoint de modelo externo na UI de serviço.
O trecho de código a seguir cria um endpoint de conclusões para o OpenAI gpt-3.5-turbo-instruct, conforme especificado na seção served_entities da configuração. Para seu endpoint, certifique-se de preencher name e openai_api_key com seus valores exclusivos para cada campo.
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}}"
}
}
}]
}
)
O seguinte trecho de código mostra como o senhor pode fornecer seu OpenAI API key como uma cadeia de caracteres de texto simples para uma maneira alternativa de criar as mesmas conclusões endpoint que o acima.
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"
}
}
}]
}
)
Se estiver usando o Azure OpenAI, também é possível especificar o nome da implantação do Azure OpenAI, o URL do endpoint e a versão do API na seção
openai_config da configuração.
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"
},
},
}
],
},
)
Para configurar limites de taxa, acompanhamento de uso, registro de payloads ou proteções no endpoint, utilize o Unity AI Gateway. A configuração de limites de taxa por meio do Unity AI Gateway oferece suporte a limites baseados em consultas (QPM) e em tokens (TPM), permitindo definir limites por usuário, por grupo e para todo o endpoint.
Consulte Configurar o Unity AI Gateway no endpoint do modelo de serviço para obter um exemplo programático que atualiza um endpoint para adicionar limites de taxa e outros recursos do Unity AI Gateway.
O padrão client.update_endpoint() previamente documentado com um campo de nível superior rate_limits está obsoleto. Em vez disso, utilize a configuração do Unity AI Gateway no endpoint.
Etapa 3: Enviar solicitações para um endpoint de modelo externo
Databricks recomenda consultar o endpoint do modelo externo usando o cliente OpenAI . Servindo modelo expõe uma API unificada e compatível OpenAIem todos os provedores, de modo que o mesmo código do cliente funciona independentemente de o modelo subjacente ser da OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI ou de um provedor personalizado.
Instale o cliente OpenAI em seu compute:
%pip install openai
O código a seguir envia uma solicitação de conclusão de bate-papo para um endpoint que serve um modelo de bate-papo da OpenAI. Substitua o valor base_url pelo URL do seu workspace Databricks e forneça um access tokenpessoal Databricks para api_key. Defina o parâmetro model com o nome do endpoint do seu modelo de servir.
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)
Para enviar uma solicitação de conclusão para um endpoint configurado para a tarefa llm/v1/completions , use 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)
Para enviar uma solicitação de embeddings para um endpoint configurado para a tarefa llm/v1/embeddings , use client.embeddings.create():
response = client.embeddings.create(
model="openai-embeddings-endpoint",
input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)
Se você executar o cliente OpenAI de dentro de um Notebook Databricks , poderá usar o auxiliar databricks-openai , que configura automaticamente a autenticação e o URL base workspace . Consulte a seção Usar modelos de fundação para obter detalhes.
Etapa 4: comparar modelos de um fornecedor diferente
A servindo modelo oferece suporte a muitos provedores de modelos externos, incluindo Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI, entre outros. O senhor pode comparar LLMs entre provedores, ajudando-o a otimizar a precisão, a velocidade e o custo de seus aplicativos usando o AI Playground.
O exemplo a seguir cria um endpoint para o Anthropic claude-2 e compara sua resposta a uma pergunta que usa o OpenAI gpt-3.5-turbo-instruct. Ambas as respostas têm o mesmo formato padrão, o que facilita a comparação.
Criar um endpoint para 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}}"
},
},
}
],
},
)
Comparar as respostas de cada endpoint
Como todos os endpoints de modelos externos expõem uma API compatível com OpenAI , você pode consultar ambos os endpoints com o mesmo cliente OpenAI , alterando o parâmetro model para o nome endpoint correspondente.
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)