Share via


Ajuste fino e chamada de função

Os modelos que usam a API de conclusões de chat dão suporte à chamada de função. Infelizmente, as funções definidas nas chamadas de conclusão de chat nem sempre são executadas conforme o esperado. O ajuste fino do modelo com exemplos de chamada de função pode melhorar a saída do modelo, permitindo que você:

  • Obtenha respostas formatadas da mesma forma, mesmo quando a definição de função completa não estiver presente. (Permitindo que você possivelmente economize dinheiro em tokens de prompt.)
  • Obtenha saídas mais precisas e consistentes.

Importante

Os parâmetros functions e function_call foram preteridos com a versão 2023-12-01-preview da API. No entanto, a API de ajuste fino atualmente requer o uso dos parâmetros herdados.

Construir um arquivo de treinamento

Ao construir um arquivo de treinamento de exemplos de chamada de função, você vai adotar uma definição de função como esta:

{
    "messages": [
        {"role": "user", "content": "What is the weather in San Francisco?"},
        {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}
    ],
    "functions": [{
        "name": "get_current_weather",
        "description": "Get the current weather",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "The city and country, eg. San Francisco, USA"},
                "format": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["location", "format"]
        }
    }]
}

E expresse as informações como uma única linha em seu arquivo de treinamento .jsonl conforme abaixo:

{"messages": [{"role": "user", "content": "What is the weather in San Francisco?"}, {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}], "functions": [{"name": "get_current_weather", "description": "Get the current weather", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "The city and country, eg. San Francisco, USA"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"]}}, "required": ["location", "format"]}}]}

Assim como acontece com todo o treinamento de ajuste fino, seu arquivo de exemplo requer pelo menos 10 exemplos.

Otimizar para custos

O OpenAI recomenda que, se você estiver tentando otimizar para usar menos tokens de prompt após ajustar seu modelo nas definições de função completas com as quais você pode experimentar, faça o seguinte:

  • Omita descrições de função e parâmetro: remova o campo de descrição da função e dos parâmetros.
  • Omita parâmetros: remova todo o campo de propriedades do objeto de parâmetros.
  • Omita a função inteiramente: remova todo o objeto de função da matriz de funções.

Otimizar para obter qualidade

Como alternativa, se você estiver tentando melhorar a qualidade da saída de chamada de função, é recomendável que as definições de função presentes no conjunto de dados do treinamento de ajuste fino e nas chamadas de conclusão de chat subsequentes permaneçam idênticas.

Personalizar respostas de modelo para saídas de função

O ajuste fino com base em exemplos de chamada de função também pode ser usado para melhorar a resposta do modelo às saídas de função. Para fazer isso, inclua exemplos que consistem em mensagens de resposta de função e mensagens de resposta do assistente onde a resposta da função é interpretada e colocada no contexto pelo assistente.

{
    "messages": [
        {"role": "user", "content": "What is the weather in San Francisco?"},
        {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celcius\"}"}}
        {"role": "function", "name": "get_current_weather", "content": "21.0"},
        {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}
    ],
    "functions": [...] // same as before
}

Assim como no exemplo anterior, este exemplo é expandido artificialmente para legibilidade. A entrada real no arquivo de treinamento .jsonl seria uma única linha:

{"messages": [{"role": "user", "content": "What is the weather in San Francisco?"}, {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celcius\"}"}}, {"role": "function", "name": "get_current_weather", "content": "21.0"}, {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}], "functions": []}

Próximas etapas