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