Modelos generativos de consulta AI

Neste artigo, o senhor aprenderá a formatar solicitações de consulta para modelos de fundação e modelos externos e a enviá-las para o seu modelo de serviço endpoint.

Para solicitações de consulta de modelos tradicionais de ML ou Python, consulte Ponto de extremidade de serviço de consulta para modelos personalizados.

O Mosaic AI Model Serving é compatível com APIs do Foundation Models e modelos externos para acesso a modelos de IA generativos. A servindo modelo usa um site unificado compatível com OpenAI API e SDK para consultá-los. Isso possibilita experimentar e personalizar modelos generativos de AI para produção em clouds e provedores compatíveis.

Mosaic AI Model Serving fornece as seguintes opções para o envio de solicitações de pontuação ao endpoint que atende a modelos da fundação ou modelos externos:

Método

Detalhes

Cliente OpenAI

Consultar um modelo hospedado por um Mosaic AI Model Serving endpoint usando o cliente OpenAI. Especifique o nome do modelo de serviço endpoint como a entrada model. Suportado para modelos de bate-papo, incorporações e conclusões disponibilizados pelas APIs do Foundation Model ou por modelos externos.

Servindo a UI

Selecione Query endpoint (Ponto de extremidade de consulta) na página Serving endpoint (Ponto de extremidade de atendimento ). Insira os dados de entrada do modelo no formato JSON e clique em Send Request (Enviar solicitação). Se o modelo tiver um registro de exemplo de entrada, use Show Example para carregá-lo.

API REST

Chame e consulte o modelo usando a API REST. Consulte POST /serving-endpoint/{name}/invocations para obter detalhes. Para solicitações de pontuação para pontos de extremidade que atendem a vários modelos, consulte Consultar modelos individuais em endpoint.

SDK de implantações do MLflow

Use a função predict() do MLflow Deployments SDK para consultar o modelo.

Databricks Python SDK

O Databricks Python SDK é uma camada sobre a API REST. Ele lida com detalhes de baixo nível, como autenticação, facilitando a interação com os modelos.

Função SQL

Invoque a inferência do modelo diretamente do SQL usando a função ai_query SQL. Consulte Consultar um modelo servido com ai_query.

Requisitos

Importante

Como prática recomendada de segurança para cenários de produção, a Databricks recomenda que o senhor use tokens OAuth máquina a máquina para autenticação durante a produção.

Para testes e desenvolvimento, o Databricks recomenda o uso de um access token pessoal pertencente à entidade de serviço em vez de usuários do workspace. Para criar o site tokens para uma entidade de serviço, consulte gerenciar tokens para uma entidade de serviço.

Instalar o pacote

Depois de selecionar um método de consulta, o senhor deve primeiro instalar o pacote apropriado em seus clusters.

Para usar o cliente OpenAI, o pacote databricks-sdk[openai] precisa ser instalado em seu cluster. Databricks SDK fornece um wrapper para a construção do cliente OpenAI com autorização configurada automaticamente para consultar modelos AI generativos. Execute o seguinte em seu notebook ou em seu terminal local:

!pip install databricks-sdk[openai]>=0.35.0

O seguinte é necessário apenas ao instalar o pacote em um Databricks Notebook

dbutils.library.restartPython()

O acesso à API REST do Serving está disponível no Databricks Runtime for Machine Learning.

!pip install mlflow

O seguinte é necessário apenas ao instalar o pacote em um Databricks Notebook

dbutils.library.restartPython()

O Databricks SDK para Python já está instalado em todos os Databricks clusters que usam Databricks Runtime 13.3 LTS ou acima. Para Databricks clusters que usam Databricks Runtime 12.2 LTS e abaixo, o senhor deve instalar primeiro o Databricks SDK para Python. Consulte Databricks SDK para Python.

Consultar um modelo de conclusão de bate-papo

A seguir, exemplos de consulta a um modelo de chat. O exemplo se aplica à consulta de um modelo de bate-papo disponibilizado usando qualquer um dos recursos de modelo de serviço: Foundation Model APIs ou modelos externos.

Para ver um exemplo de inferência de lotes, consulte Realizar inferência de lotes LLM usando ai_query.

A seguir, uma solicitação de chat para o modelo DBRX Instruct disponibilizado pela Foundation Model APIs pay-per-tokens endpoint, databricks-dbrx-instruct em seu workspace.

Para usar o cliente OpenAI, especifique o nome do modelo de serviço endpoint como a entrada model.


from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
openai_client = w.serving_endpoints.get_open_ai_client()

response = openai_client.chat.completions.create(
    model="databricks-dbrx-instruct",
    messages=[
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "What is a mixture of experts model?",
      }
    ],
    max_tokens=256
)

Para consultar os modelos da fundação fora do site workspace, o senhor deve usar o cliente OpenAI diretamente. O senhor também precisa de sua instância Databricks workspace para conectar o cliente OpenAI a Databricks. O exemplo a seguir pressupõe que o senhor tenha um Databricks API tokens e openai instalados no seu compute.


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"
)

response = client.chat.completions.create(
    model="databricks-dbrx-instruct",
    messages=[
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "What is a mixture of experts model?",
      }
    ],
    max_tokens=256
)

Importante

O exemplo a seguir usa os parâmetros da API REST para consultar o endpoint de serviço que atende aos modelos da fundação. Esses parâmetros são Public Preview e a definição pode mudar. Consulte POST /serving-endpoint/{name}/invocations.

A seguir, uma solicitação de chat para o modelo DBRX Instruct disponibilizado pela Foundation Model APIs pay-per-tokens endpoint, databricks-dbrx-instruct em seu workspace.

curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '{
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": " What is a mixture of experts model?"
    }
  ]
}' \
https://<workspace_host>.databricks.com/serving-endpoints/databricks-dbrx-instruct/invocations \

Importante

O exemplo a seguir usa a API predict() do SDK do MLflow Deployments.

A seguir, uma solicitação de chat para o modelo DBRX Instruct disponibilizado pela Foundation Model APIs pay-per-tokens endpoint, databricks-dbrx-instruct em seu workspace.


import mlflow.deployments

# Only required when running this example outside of a Databricks Notebook
export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"

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

chat_response = client.predict(
    endpoint="databricks-dbrx-instruct",
    inputs={
        "messages": [
            {
              "role": "user",
              "content": "Hello!"
            },
            {
              "role": "assistant",
              "content": "Hello! How can I assist you today?"
            },
            {
              "role": "user",
              "content": "What is a mixture of experts model??"
            }
        ],
        "temperature": 0.1,
        "max_tokens": 20
    }
)

A seguir, uma solicitação de chat para o modelo DBRX Instruct disponibilizado pela Foundation Model APIs pay-per-tokens endpoint, databricks-dbrx-instruct em seu workspace.

Esse código deve ser executado em um Notebook em seu workspace. Consulte Usar o Databricks SDK para Python de um Databricks Notebook .

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole

w = WorkspaceClient()
response = w.serving_endpoints.query(
    name="databricks-dbrx-instruct",
    messages=[
        ChatMessage(
            role=ChatMessageRole.SYSTEM, content="You are a helpful assistant."
        ),
        ChatMessage(
            role=ChatMessageRole.USER, content="What is a mixture of experts model?"
        ),
    ],
    max_tokens=128,
)
print(f"RESPONSE:\n{response.choices[0].message.content}")

Para consultar um endpoint de modelo de fundação usando LangChain, o senhor pode usar a classe ChatDatabricks ChatModel e especificar o endpoint.

O exemplo a seguir usa a classe ChatDatabricks ChatModel em LangChain para consultar o Foundation Model APIs pay-per-tokens endpoint, databricks-dbrx-instruct.

%pip install databricks-langchain
from langchain_core.messages import HumanMessage, SystemMessage
from databricks_langchain import ChatDatabricks

messages = [
    SystemMessage(content="You're a helpful assistant"),
    HumanMessage(content="What is a mixture of experts model?"),
]

llm = ChatDatabricks(endpoint_name="databricks-dbrx-instruct")
llm.invoke(messages)

Importante

O exemplo a seguir usa a função integrada SQL, ai_query. Essa função é Visualização pública e a definição pode mudar. Consulte Consultar um modelo atendido com ai_query.

A seguir, uma solicitação de chat para meta-llama-3-1-70b-instruct disponibilizada pela Foundation Model APIs pay-per-tokens endpoint, databricks-meta-llama-3-1-70b-instruct em seu workspace.

Observação

A função ai_query() não é compatível com o endpoint de consulta que atende ao DBRX ou ao modelo DBRX Instruct.

SELECT ai_query(
    "databricks-meta-llama-3-1-70b-instruct",
    "Can you explain AI in ten words?"
  )

Como exemplo, o formato de solicitação esperado para um modelo de chat ao usar a API REST é o seguinte. Para modelos externos, o senhor pode incluir parâmetros adicionais que são válidos para um determinado provedor e configuração de endpoint. Consulte Parâmetros de consulta adicionais.

{
  "messages": [
    {
      "role": "user",
      "content": "What is a mixture of experts model?"
    }
  ],
  "max_tokens": 100,
  "temperature": 0.1
}

O formato de resposta esperado para uma solicitação feita usando a API REST é o seguinte:

{
  "model": "databricks-dbrx-instruct",
  "choices": [
    {
      "message": {},
      "index": 0,
      "finish_reason": null
    }
  ],
  "usage": {
    "prompt_tokens": 7,
    "completion_tokens": 74,
    "total_tokens": 81
  },
  "object": "chat.completion",
  "id": null,
  "created": 1698824353
}

Consultar um modelo de incorporação

A seguir, uma solicitação de incorporação para o modelo gte-large-en disponibilizado pelas APIs do Foundation Model. O exemplo se aplica à consulta de um modelo de incorporação disponibilizado usando um dos recursos de modelo de serviço: Foundation Model APIs ou modelos externos.

Para usar o cliente OpenAI, especifique o nome do modelo de serviço endpoint como a entrada model.


from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
openai_client = w.serving_endpoints.get_open_ai_client()

response = openai_client.embeddings.create(
  model="databricks-gte-large-en",
  input="what is databricks"
)

Para consultar os modelos da fundação fora do seu site workspace, o senhor deve usar o cliente OpenAI diretamente, conforme demonstrado abaixo. O exemplo a seguir pressupõe que o senhor tenha um Databricks API tokens e openai instalados no seu compute. O senhor também precisa de sua instância Databricks workspace para conectar o cliente OpenAI a Databricks.


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"
)

response = client.embeddings.create(
  model="databricks-gte-large-en",
  input="what is databricks"
)

Importante

O exemplo a seguir usa os parâmetros REST API para consultar o ponto de extremidade de serviço que atende a modelos de fundação ou modelos externos. Esses parâmetros são Public Preview e a definição pode mudar. Consulte POST /serving-endpoint/{name}/invocations.

curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d  '{ "input": "Embed this sentence!"}' \
https://<workspace_host>.databricks.com/serving-endpoints/databricks-gte-large-en/invocations

Importante

O exemplo a seguir usa a API predict() do SDK do MLflow Deployments.


import mlflow.deployments

export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"

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

embeddings_response = client.predict(
    endpoint="databricks-gte-large-en",
    inputs={
        "input": "Here is some text to embed"
    }
)

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole

w = WorkspaceClient()
response = w.serving_endpoints.query(
    name="databricks-gte-large-en",
    input="Embed this sentence!"
)
print(response.data[0].embedding)

Para usar um modelo Databricks Foundation Model APIs no LangChain como um modelo de incorporação, importe a classe DatabricksEmbeddings e especifique o parâmetro endpoint da seguinte forma:

%pip install databricks-langchain
from databricks_langchain import DatabricksEmbeddings

embeddings = DatabricksEmbeddings(endpoint="databricks-gte-large-en")
embeddings.embed_query("Can you explain AI in ten words?")

Importante

O exemplo a seguir usa a função integrada SQL, ai_query. Essa função é Visualização pública e a definição pode mudar. Consulte Consultar um modelo atendido com ai_query.

SELECT ai_query(
    "databricks-gte-large-en",
    "Can you explain AI in ten words?"
  )

A seguir, o formato de solicitação esperado para um modelo de embeddings. Para modelos externos, o senhor pode incluir parâmetros adicionais que são válidos para um determinado provedor e configuração de endpoint. Consulte Parâmetros de consulta adicionais.

{
  "input": [
    "embedding text"
  ]
}

O formato de resposta esperado é o seguinte:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": []
    }
  ],
  "model": "text-embedding-ada-002-v2",
  "usage": {
    "prompt_tokens": 2,
    "total_tokens": 2
  }
}

Verifique se as incorporações estão normalizadas

Use o seguinte para verificar se as incorporações geradas pelo seu modelo estão normalizadas.


  import numpy as np

  def is_normalized(vector: list[float], tol=1e-3) -> bool:
      magnitude = np.linalg.norm(vector)
      return abs(magnitude - 1) < tol

Consultar um modelo de preenchimento de texto

Importante

Não há suporte para a consulta de modelos de preenchimento de texto disponibilizados usando o Foundation Model APIs pay-per-tokens usando o cliente OpenAI. Somente a consulta de modelos externos usando o cliente OpenAI é suportada, conforme demonstrado nesta seção.

Para usar o cliente OpenAI, especifique o nome do modelo de serviço endpoint como a entrada model. O exemplo a seguir consulta o modelo de conclusões claude-2 hospedado pela Anthropic usando o cliente OpenAI. Para usar o cliente OpenAI, preencha o campo model com o nome do modelo de serviço endpoint que hospeda o modelo que o senhor deseja consultar.

Este exemplo usa um endpoint, anthropic-completions-endpoint, criado anteriormente, configurado para acessar modelos externos do provedor de modelos Anthropic. Veja como criar endpoints de modelos externos.

Consulte Modelos compatíveis para ver modelos adicionais que você pode consultar e seus fornecedores.


from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
openai_client = w.serving_endpoints.get_open_ai_client()

completion = openai_client.completions.create(
model="anthropic-completions-endpoint",
prompt="what is databricks",
temperature=1.0
)
print(completion)

A seguir está uma solicitação de conclusões para consultar um modelo de conclusões disponibilizado usando modelos externos.

Importante

O exemplo a seguir usa os parâmetros REST API para consultar o ponto de extremidade de serviço que atende a modelos externos. Esses parâmetros são Visualização pública e a definição pode mudar. Consulte POST /serving-endpoint/{name}/invocations.

curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '{"prompt": "What is a quoll?", "max_tokens": 64}' \
https://<workspace_host>.databricks.com/serving-endpoints/<completions-model-endpoint>/invocations

A seguir está uma solicitação de conclusões para consultar um modelo de conclusões disponibilizado usando modelos externos.

Importante

O exemplo a seguir usa a API predict() do SDK do MLflow Deployments.


import os
import mlflow.deployments

# Only required when running this example outside of a Databricks Notebook

os.environ['DATABRICKS_HOST'] = "https://<workspace_host>.databricks.com"
os.environ['DATABRICKS_TOKEN'] = "dapi-your-databricks-token"

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

completions_response = client.predict(
    endpoint="<completions-model-endpoint>",
    inputs={
        "prompt": "What is the capital of France?",
        "temperature": 0.1,
        "max_tokens": 10,
        "n": 2
    }
)

# Print the response
print(completions_response)

A seguir está uma solicitação de conclusões para consultar um modelo de conclusões disponibilizado usando modelos externos.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole

w = WorkspaceClient()
response = w.serving_endpoints.query(
    name="<completions-model-endpoint>",
    prompt="Write 3 reasons why you should train an AI model on domain specific data sets."
)
print(response.choices[0].text)

Importante

O exemplo a seguir usa a função integrada SQL, ai_query. Essa função é Visualização pública e a definição pode mudar. Consulte Consultar um modelo atendido com ai_query.

SELECT ai_query(
    "<completions-model-endpoint>",
    "Can you explain AI in ten words?"
  )

O formato de solicitação esperado para um modelo de conclusões é o seguinte. Para modelos externos, o senhor pode incluir parâmetros adicionais que são válidos para um determinado provedor e configuração de endpoint. Consulte Parâmetros de consulta adicionais.

{
  "prompt": "What is mlflow?",
  "max_tokens": 100,
  "temperature": 0.1,
  "stop": [
    "Human:"
  ],
  "n": 1,
  "stream": false,
  "extra_params":
  {
    "top_p": 0.9
  }
}

O formato de resposta esperado é o seguinte:

{
  "id": "cmpl-8FwDGc22M13XMnRuessZ15dG622BH",
  "object": "text_completion",
  "created": 1698809382,
  "model": "gpt-3.5-turbo-instruct",
  "choices": [
    {
    "text": "MLflow is an open-source platform for managing the end-to-end machine learning lifecycle. It provides tools for tracking experiments, managing and deploying models, and collaborating on projects. MLflow also supports various machine learning frameworks and languages, making it easier to work with different tools and environments. It is designed to help data scientists and machine learning engineers streamline their workflows and improve the reproducibility and scalability of their models.",
    "index": 0,
    "logprobs": null,
    "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 5,
    "completion_tokens": 83,
    "total_tokens": 88
  }
}

Converse com LLMs apoiados usando o AI Playground

O senhor pode interagir com grandes modelos de linguagem suportados usando o AI Playground. O AI Playground é um ambiente semelhante a um bate-papo no qual o senhor pode testar, solicitar e comparar LLMs do seu Databricks workspace.

Playground de IA