Compartilhar via


Chamada de função no Azure Databricks

Importante

Esse recurso está em Visualização Pública e tem suporte em pontos de extremidade de taxa de transferência provisionados ou de pagamento por token das APIs do Foundation Model.

Este artigo descreve a chamada de função e como usá-la como parte de fluxos de trabalho de aplicativos de IA generativa. A chamada de função do Databricks é compatível com OpenAI e só está disponível durante o serviço de modelo como parte das APIs do modelo de base.

O que é a chamada de função

A chamada de função consiste em uma forma de controlar a saída dos LLMs, para que eles gerem respostas estruturadas de modo mais confiável. Ao usar uma chamada de função, você descreve funções na chamada de API descrevendo os argumentos da função com um esquema JSON. O LLM em si não chama essas funções, mas cria um objeto JSON que os usuários podem usar para chamá-las.

Para chamadas de função no Databricks, a sequência básica de etapas é a seguinte:

  1. Chame o modelo usando a consulta enviada e um conjunto de funções definidas no parâmetro tools.
  2. O modelo decide se deve ou não chamar as funções definidas. Quando a função é chamada, o conteúdo é um objeto JSON de cadeias de caracteres que adere ao esquema personalizado.
  3. Analise as cadeias de caracteres em JSON no código e chame a função com os argumentos fornecidos, se houver.
  4. Chame o modelo novamente anexando a resposta estruturada como uma nova mensagem. A estrutura da resposta é definida pelas funções que você forneceu anteriormente em tools. Aqui, o modelo resume os resultados e envia esse resumo ao usuário.

Quando usar a chamada de função

Confira alguns exemplos de casos de uso para a chamada de função:

  • Crie assistentes que respondam perguntas chamando outras APIs. Por exemplo, é possível definir funções como send_email(to: string, body: string) ou current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • Defina e use chamadas de API baseadas em linguagem natural. Como realizar a pergunta “Quem são meus principais clientes?” e transformá-la em uma chamada de API chamada get_customers(min_revenue: int, created_before: string, limit: int) para chamar essa API posteriormente.

Para inferência em lote ou tarefas de processamento de dados, como converter dados não estruturados em dados estruturados. O Databricks recomenda o uso de saídas estruturadas.

Modelos com suporte

A tabela a seguir lista os modelos suportados e qual recurso de serviço de modelo disponibiliza cada modelo.

  • Para modelos disponibilizados por APIs do Modelo Básico, consulte Limites das APIs do Modelo Básico para disponibilidade da região.
  • Para modelos disponibilizados por modelos externos, consulte Disponibilidade de região para disponibilidade de região.

Importante

O Meta Llama 3.1 está licenciado sob a LLAMA 3.1 Community License, Copyright © Meta Platforms, Inc. Todos os direitos reservados. Todos os direitos reservados. Os clientes são responsáveis por garantir a conformidade com as licenças de modelo aplicáveis.

Modelar Disponibilizado usando o recurso de serviço do modelo Observações
Meta-Llama-3.1-405B-Instruct APIs de Modelos Fundamentais Com suporte em cargas de trabalho de taxa de transferência provisionadas e de pagamento por token.
Meta-Llama-3.1-70B-Instruct APIs de Modelos Fundamentais Com suporte em cargas de trabalho de taxa de transferência provisionadas e de pagamento por token.
Meta-Llama-3.1-8B-Instruct APIs de Modelos Fundamentais Com suporte somente em cargas de trabalho de taxa de transferência provisionadas.
gpt-4o Modelos externos
GPT-4O-2024-08-06 Modelos externos
GPT-4O-2024-05-13 Modelos externos
gpt-4o-mini Modelos externos

Usar a chamada de função

Para usar a chamada de função com o aplicativo de IA generativa, forneça a função parameters e um description.

O comportamento padrão para tool_choice é "auto". Isso permite que o modelo decida quais funções chamar e se deve chamá-las.

É possível personalizar o comportamento padrão de acordo com o caso de uso. Estas são as opções:

  • Defina tool_choice: "required". Neste cenário, o modelo sempre chama uma ou mais funções. O modelo seleciona qual função ou funções chamar.
  • Defina tool_choice: {"type": "function", "function": {"name": "my_function"}}. Neste cenário, o modelo chama somente uma função específica.
  • Configure tool_choice: "none" para desabilitar a chamada de função e fazer com que o modelo gere somente uma mensagem voltada ao usuário.

Confira a seguir um exemplo de turno único usando o SDK do OpenAI e o parâmetro tools. Confira Tarefa de chat para saber mais sobre a sintaxe.

Importante

Durante a versão preliminar pública, a chamada de função no Databricks é otimizada para chamadas de função de turno único.

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": [
              "celsius",
              "fahrenheit"
            ]
          }
        }
      }
    }
  }
]

messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]

response = client.chat.completions.create(
    model="databricks-meta-llama-3-1-70b-instruct",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)

print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))

Esquema JSON

As APIs do modelo de base oferecem amplo suporte às definições de funções aceitas pelo OpenAI. No entanto, usar um esquema JSON mais simples para definições de chamadas de função resulta na geração de JSON de chamadas de função de maior qualidade. Para promover uma geração de maior qualidade, as APIs do modelo de base só dão suporte a um subconjunto de especificações de esquema JSON.

As seguintes chaves de definição de chamada de função não têm suporte:

  • Expressões regulares que usam pattern.
  • Composição e validação de esquemas ou aninhadas e complexas que usam anyOf, oneOf, allOf, prefixItems ou $ref.
  • Listas de tipos, exceto para o caso especial de [type, “null”], em que um tipo na lista é um tipo JSON válido e o outro é "null"

Além disso, aplicam-se as seguintes limitações:

  • O número máximo de chaves especificadas no esquema JSON é 16.
  • As APIs do modelo de base não impõem restrições de comprimento ou tamanho para objetos e matrizes.
    • Isso inclui palavras-chave como maxProperties, minProperties e maxLength.
  • Esquemas JSON muito aninhados resultarão em uma geração de qualidade inferior. Se possível, tente simplificar o esquema JSON para obter melhores resultados.

Uso de token

Injeção de prompt e outras técnicas são usadas para melhorar a qualidade das chamadas das ferramentas. Isso afeta o número de tokens de entrada e saída consumidos pelo modelo, o que resulta em implicações na cobrança. Quanto mais ferramentas você usar, mais os tokens de entrada aumentarão.

Limitações

Confira a seguir as limitações para chamadas de funções durante a versão preliminar pública:

  • A solução atual de chamada de função é otimizada para chamadas de função de turno único. A chamada de função com vários turnos tem suporte durante a versão preliminar, mas está em desenvolvimento.
  • A chamada de função paralela não tem suporte.
  • O número máximo de funções que podem ser definidas em tools é 32.
  • Para suporte à produtividade provisionada, a chamada de função só tem suporte em novos pontos de extremidade. Você não pode adicionar chamadas de função a pontos de extremidade criados anteriormente.

Exemplo de notebook

Confira o seguinte notebook para analisar exemplos detalhados de chamadas de função

Notebook de exemplo de chamada de função

Obter notebook