Chamada de função em Databricks

Visualização

Esse recurso está em Public Preview e é compatível apenas com o endpoint de pagamento por token do Foundation Model APIs.

Este artigo descreve a chamada de função e como usá-la como parte do fluxo de trabalho de seu aplicativo de IA generativa. Databricks O Function Calling é compatível com OpenAI e só está disponível durante o servindo modelo como parte do Foundation Model APIs.

O que é chamada de função

A chamada de função oferece uma maneira de controlar a saída dos LLMs, para que eles gerem respostas estruturadas de forma mais confiável. Ao usar uma chamada de função, o senhor descreve as funções na chamada de API descrevendo os argumentos da 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 em Databricks, a sequência básica dos passos é 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 strings que adere ao seu esquema personalizado.

  3. Analise o strings em JSON em seu código e chame sua função com os argumentos fornecidos, se existirem.

  4. Chame o modelo novamente, anexando a resposta estruturada como uma nova mensagem. A estrutura da resposta é definida pelas funções que o senhor forneceu anteriormente em tools. A partir daí, o modelo resume os resultados e envia esse resumo ao usuário.

Quando usar a chamada de função

A seguir, exemplos de casos de uso para chamadas de função:

  • Crie assistentes que possam responder a perguntas chamando outras APIs. Por exemplo, o senhor pode definir funções como send_email(to: string, body: string) ou current_weather(location: string, unit: 'celsius' | 'fahrenheit').

  • Definir e usar chamadas de API com base em linguagem natural. Por exemplo, o senhor pode fazer a seguinte pergunta: "Quem são meus principais clientes?" e transformá-lo em uma chamada de API denominada get_customers(min_revenue: int, created_before: string, limit: int) e chamar essa API.

  • Converta dados não estruturados em dados estruturados. Como identificar e classificar o feedback da avaliação do produto como negativo, positivo ou neutro.

Modelos suportados

A chamada de função em Databricks é compatível com os seguintes modelos de pagamento por tokens do Foundation Model APIs:

Importante

O DBRX é fornecido sob e sujeito à Licença de Modelo Aberto da Databricks, Copyright © Databricks, Inc. Todos os direitos reservados. Os clientes são responsáveis por garantir que o compliance esteja em conformidade com as licenças de modelo aplicáveis, incluindo a política de uso aceitável doDatabricks .

Llama 3 está licenciado sob a Licença da comunidade LLAMA 3, Copyright © Meta Platforms, Inc. Todos os direitos reservados. Os clientes são responsáveis por garantir o compliance com as licenças de modelo aplicáveis.

Usar chamadas de função

Para usar a chamada de função com seu aplicativo de IA generativa, o senhor deve fornecer a função parameters e uma description.

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

O senhor pode personalizar o comportamento do default dependendo do seu caso de uso. As opções a seguir são as seguintes:

  • Definir tool_choice: "required". Nesse cenário, o modelo sempre chama uma ou mais funções. O modelo seleciona a função ou funções a serem chamadas.

  • 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, um exemplo de turno único usando o OpenAI SDK e seu parâmetro tools. Consulte a tarefa Chat para obter mais detalhes sobre a sintaxe.

Importante

Durante o Public Preview, 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-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 Foundation Model 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 chamadas de função resulta em uma geração de JSON de chamada de função de maior qualidade. Para promover uma geração de maior qualidade, as APIs do Foundation Model suportam apenas um subconjunto de especificações de esquema JSON.

A seguinte chave de definição de chamada de função não é suportada:

  • Expressões regulares usando pattern.

  • Composição e validação de esquema ou aninhado complexo usando: anyOf, oneOf, allOf, prefixItems ou $ref.

  • Listas de tipos, exceto no 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 especificado no esquema JSON é 16.

  • As APIs do Foundation Model não impõem restrições de comprimento ou tamanho para objetos e matrizes.

    • Isso inclui palavras-chave como maxProperties, minProperties e maxLength.

  • Os esquemas JSON muito aninhados resultarão em uma geração de qualidade inferior. Se possível, tente achatar o esquema JSON para obter melhores resultados.

uso de tokens

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 o senhor usar, maior será o número de tokens de entrada.

Limitações

A seguir, as limitações para chamadas de função durante a visualização pública:

  • A chamada de função não é compatível com o endpoint Foundation Model APIs provisionamento Taxa de transferência.

  • As soluções atuais de chamada de função são otimizadas para chamadas de função de turno único. A chamada de função multi-turnos é suportada durante a visualização, mas está em desenvolvimento.

  • Não há suporte para chamadas de funções paralelas.

  • O número máximo de funções que podem ser definidas em tools é 32 funções.

Notebook exemplo

Consulte o seguinte site Notebook para obter exemplos detalhados de chamadas de funções

Exemplo de chamada de função Notebook

Abra o bloco de anotações em outra guia