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:
- Chame o modelo usando a consulta enviada e um conjunto de funções definidas no parâmetro
tools
. - 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.
- Analise as cadeias de caracteres em JSON no código e chame a função com os argumentos fornecidos, se houver.
- 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)
oucurrent_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
emaxLength
.
- Isso inclui palavras-chave como
- 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