Tutorial: Criar endpoint de modelo externo para consultar modelos OpenAI
Este artigo fornece instruções passo a passo para configurar e consultar um endpoint de modelo externo que serve modelos OpenAI para conclusões, chat e incorporações usando o SDK de implantações do MLflow. Saiba mais sobre modelos externos.
Requisitos
Databricks Runtime 13.0 ML ou acima.
MLflow 2.9 ou acima.
key de API OpenAI.
Databricks CLI versão 0.205 ou acima.
o passo 1: Armazene a chave da API OpenAI usando a CLI do Databricks Secrets
Você pode armazenar a key da API OpenAI usando a CLI do Databricks Secrets (versão 0.205 e acima). Você também pode usar a API REST para segredos.
A seguir, cria-se o Secret Scope denominado my_openai_secret_scope
e, em seguida, cria-se 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
o passo 2: Instale 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
o passo 3: Criar e gerenciar um endpoint de modelo externo
Importante
Os exemplos de código nesta seção demonstram o uso do SDK CRUD de implantações do MLflow de visualização pública .
Você pode criar um endpoint de modelo externo para cada modelo de linguagem grande (LLM) que deseja usar com o método create_endpoint()
do SDK de implantações do MLflow. O snippet de código a seguir cria um endpoint de conclusão para OpenAI gpt-3.5-turbo-instruct
, conforme especificado na seção served_entities
da configuração.
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}}"
}
}
}]
}
)
Se estiver usando o Azure OpenAI, você também poderá especificar o nome da implantação do Azure OpenAI, a URL do endpoint e a versão da 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 atualizar um endpoint, use update_endpoint()
. O trecho de código a seguir demonstra como atualizar os limites de taxa de um endpoint para 20 chamadas por minuto por usuário.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
o passo 4: Enviar solicitações para um endpoint de modelo externo
Importante
Os exemplos de código nesta seção demonstram o uso do método predict()
do MLflow Deployments SDK.
Você pode enviar solicitações de bate-papo, conclusões e incorporações para um endpoint de modelo externo usando o método predict()
do SDK de implantações do MLflow.
O seguinte envia uma solicitação para gpt-3.5-turbo-instruct
hospedado pela OpenAI.
completions_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "What is the capital of France?",
"temperature": 0.1,
"max_tokens": 10,
"n": 2
}
)
completions_response == {
"id": "cmpl-8QW0hdtUesKmhB3a1Vel6X25j2MDJ",
"object": "text_completion",
"created": 1701330267,
"model": "gpt-3.5-turbo-instruct",
"choices": [
{
"text": "The capital of France is Paris.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
},
{
"text": "Paris is the capital of France",
"index": 1,
"finish_reason": "stop",
"logprobs": None
},
],
"usage": {
"prompt_tokens": 7,
"completion_tokens": 16,
"total_tokens": 23
}
}
o passo 5: Compare modelos de um fornecedor diferente
A servindo modelo oferece suporte a muitos provedores de modelos externos, incluindo Open IA, Anthropic, Cohere, Amazon Bedrock, Google cloud Vertex IA, 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 Antrópico claude-2
e compara sua resposta a uma pergunta que usa OpenAI gpt-3.5-turbo-instruct
. Ambas as respostas têm o mesmo formato padrão, o que facilita a comparação.
Crie um endpoint para claude-2 antrópico
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}}"
},
},
}
],
},
)
Compare as respostas de cada endpoint
openai_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
anthropic_response = client.predict(
endpoint="anthropic-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
openai_response["choices"] == [
{
"text": "Pi is calculated by dividing the circumference of a circle by its diameter."
" This constant ratio of 3.14159... is then used to represent the relationship"
" between a circle's circumference and its diameter, regardless of the size of the"
" circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]
anthropic_response["choices"] == [
{
"text": "Pi is calculated by approximating the ratio of a circle's circumference to"
" its diameter. Common approximation methods include infinite series, infinite"
" products, and computing the perimeters of polygons with more and more sides"
" inscribed in or around a circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]