Chamada de função em Databricks
Visualização
Esse recurso está em Public Preview e é compatível apenas com o Foundation Model APIs pay-per-tokens ou provisionamento Taxa de transferência endpoint.
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 o 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:
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 strings que adere ao seu esquema personalizado.
Analise o strings em JSON em seu código e chame sua função com os argumentos fornecidos, se existirem.
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)
oucurrent_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
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 .
O Meta Llama 3.1 está licenciado sob a Licença da comunidade LLAMA 3.1, 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.
A chamada de função em Databricks oferece suporte aos seguintes modelos da Foundation Model APIs em cargas de trabalho pay-per-tokens e provisionamento Taxa de transferência:
Consulte os limites das APIs do modelo básico para ver a disponibilidade da região.
A chamada de função em Databricks suporta apenas as seguintes cargas de trabalho de Taxa de transferência de provisionamento:
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-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 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
emaxLength
.
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:
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.
Os modelos DBRX Instruct e Meta Llama 3.1 8B Instruct não suportam chamadas de função multivoltas.
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.Para o suporte ao provisionamento da Taxa de transferência, a chamada de função só é suportada no novo endpoint. O senhor não pode adicionar chamadas de função a um endpoint criado anteriormente.