Partilhar via


Chamada de função no Azure Databricks

Importante

Esse recurso está na visualização pública e é suportado em APIs do Foundation Model, pagamento por token ou pontos de extremidade de taxa de transferência provisionada.

Este artigo descreve a chamada de função e como usá-la como parte de seus fluxos de trabalho de aplicativos de IA generativos. O Databricks Function Calling é compatível com OpenAI e só está disponível durante o modelo que serve como parte das APIs do Foundation Model.

O que é chamada de função

A chamada de função fornece uma maneira de controlar a saída de LLMs, para que eles gerem respostas estruturadas de forma mais confiável. Ao usar uma chamada de função, você descreve funções na chamada de API descrevendo os argumentos de função usando 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 chamar as funções em seu código.

Para a chamada 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 tools parâmetro.
  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 seu esquema personalizado.
  3. Analise as cadeias de caracteres em JSON em seu código e chame sua função com os argumentos fornecidos, se eles existirem.
  4. Chame o modelo novamente anexando a resposta estruturada como uma nova mensagem. A estrutura da resposta é definida pelas funções fornecidas anteriormente em tools. A partir daqui, o modelo resume os resultados e envia esse resumo para o usuário.

Quando usar a chamada de função

A seguir estão exemplos de casos de uso para chamada de função:

  • Crie assistentes que possam responder a perguntas chamando outras APIs. Por exemplo, você pode definir funções como send_email(to: string, body: string) ou current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • Defina e use chamadas de API com base em linguagem natural. Como pegar a declaração: "Quem são meus principais clientes?" e transformar isso em uma chamada de API com o nome get_customers(min_revenue: int, created_before: string, limit: int) e chamar essa API.

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 suportados

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

  • Para modelos disponibilizados por APIs de Modelo de Fundação, consulte Limites de APIs de Modelo de Base para disponibilidade de região.
  • Para modelos disponibilizados por modelos externos, consulte Disponibilidade de região para disponibilidade de região.

Importante

A partir de 11 de dezembro de 2024, o Meta-Llama-3.3-70B-Instruct substitui o suporte para Meta-Llama-3.1-70B-Instruct nos endpoints de pagamento por token das APIs do Foundation Model.

Importante

Meta Llama 3.3 está licenciado sob a LLAMA 3.3 Community License, Copyright © Meta Platforms, Inc. Todos os direitos reservados. Os clientes são responsáveis por garantir a sua conformidade com os termos desta licença e com a Política de Utilização Aceitável Llama 3.3.

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

Modelo Disponibilizado usando o recurso de serviço de modelo Notas
Meta-Llama-3.3-70B-Instruct APIs do modelo de base Suportado em cargas de trabalho de pagamento por token e taxa de transferência provisionada.
Meta-Llama-3.1-405B-Instruir APIs do modelo de base Suportado em cargas de trabalho de pagamento por token e taxa de transferência provisionada.
Meta-Llama-3.1-8B-Instruir APIs do modelo de base Suportado apenas 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 chamada de função

Para usar a chamada de função com seu aplicativo de IA generativa, você deve fornecer função parameters e um descriptionarquivo .

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

Você pode personalizar o comportamento padrão dependendo do seu caso de uso. As suas opções são as seguintes:

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

A seguir está um exemplo de turno único usando o OpenAI SDK e seu tools parâmetro. Consulte Tarefa de bate-papo para obter detalhes adicionais sobre a sintaxe.

Importante

Durante a Visualização 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-3-70b-instruct",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)

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

Esquema do JSON

As APIs do Modelo de Base suportam amplamente as definições de função aceitas pela OpenAI. No entanto, o uso de um esquema JSON mais simples para definições de chamada de função resulta na geração JSON de chamada de função de maior qualidade. Para promover a geração de maior qualidade, as APIs do Modelo de Base suportam apenas um subconjunto de especificações de esquema JSON.

As seguintes teclas de definição de chamada de função não são suportadas:

  • Expressões regulares usando pattern.
  • Composição e validação complexas aninhadas ou de esquema usando: anyOf, oneOf, allOf, prefixItems, ou $ref.
  • Listas de tipos, exceto no caso especial em [type, “null”] 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 especificado 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, minPropertiese maxLength.
  • Esquemas JSON fortemente aninhados resultarão em geração de qualidade inferior. Se possível, tente nivelar o esquema JSON para obter melhores resultados.

Uso de token

A injeção imediata e outras técnicas são usadas para melhorar a qualidade das chamadas de ferramentas. Isso afeta o número de tokens de entrada e saída consumidos pelo modelo, o que, por sua vez, resulta em implicações de faturamento. Quanto mais ferramentas você usar, mais seus tokens de entrada aumentarão.

Limitações

A seguir estão as limitações para chamadas de função durante a Visualização 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 multiturno é suportada durante a visualização, mas está em desenvolvimento.
  • Não há suporte para chamadas de função paralela.
  • O número máximo de funções que podem ser definidas é tools de 32 funções.
  • Para suporte de taxa de transferência provisionada, a chamada de função só é suportada em novos pontos de extremidade. Não é possível adicionar chamada de função a pontos de extremidade criados anteriormente.

Exemplo de bloco de notas

Consulte o bloco de anotações a seguir para obter exemplos detalhados de chamada de função

Exemplo de bloco de anotações de chamada de função

Obter o bloco de notas