Ajuste fino e chamada de função

Os modelos que usam a API de conclusão de chat suportam a chamada de função. Infelizmente, as funções definidas em suas chamadas de conclusão de bate-papo nem sempre funcionam como esperado. O ajuste fino do seu modelo com exemplos de chamada de função pode melhorar a saída do modelo, permitindo-lhe:

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

Construindo um arquivo de treinamento

Ao construir um arquivo de treinamento de exemplos de chamada de função, você tomaria 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 dentro do seu .jsonl arquivo de treinamento, 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"]}}]}

Como em todo treinamento de ajuste fino, seu arquivo de exemplo requer pelo menos 10 exemplos.

Otimize para custos

A OpenAI recomenda que, se você estiver tentando otimizar para usar menos tokens de prompt, publique o ajuste fino do seu modelo nas definições de função completas, você pode experimentar:

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

Otimize para a 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 de treinamento de ajuste fino e nas chamadas de conclusão de bate-papo subsequentes permaneçam idênticas.

Personalizar respostas do 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, você inclui exemplos que consistem em mensagens de resposta de função e mensagens de resposta do assistente onde a resposta da função é interpretada e contextualizada 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
}

Tal como no exemplo anterior, este exemplo é artificialmente expandido para facilitar a leitura. A entrada real no .jsonl arquivo de treinamento 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óximos passos