Partager via


Réglage précis et appel de fonction

Les modèles qui utilisent l’API de saisie semi-automatique de conversation prennent en charge l’appel de fonction. Malheureusement, les fonctions définies dans vos appels de saisie semi-automatique de conversation ne s’exécutent pas toujours comme prévu. L’optimisation de votre modèle avec des exemples d’appels de fonction peut améliorer la sortie du modèle en vous permettant ce qui suit :

  • Obtenez des réponses formatées de la même façon même lorsque la définition complète de la fonction n’est pas présente. (Ce qui vous permet potentiellement d’économiser de l’argent sur les jetons d’invite.)
  • Obtenez des sorties plus précises et cohérentes.

Important

Les paramètres functions et function_call ont été déconseillés avec la publication de la version 2023-12-01-preview de l’API. Toutefois, l’API de réglage précis nécessite actuellement l’utilisation des paramètres hérités.

Construction d’un fichier d’apprentissage

Lors de la construction d’un fichier d’apprentissage d’exemples d’appels de fonction, vous devez prendre une définition de fonction comme suit :

{
    "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"]
        }
    }]
}

Et exprimez les informations sous la forme d’une seule ligne dans votre fichier d’apprentissage .jsonl comme indiqué ci-dessous :

{"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"]}}]}

Comme pour tout apprentissage d’optimisation, votre fichier d’exemples nécessite au moins 10 exemples.

Optimiser le coût

OpenAI recommande que si vous essayez d’optimiser en utilisant moins de jetons d’invite après l’optimisation de votre modèle sur les définitions de fonction complètes, vous pouvez faire l’expérience avec ce qui suit :

  • Omettre les descriptions des fonctions et des paramètres : supprimez le champ de description de la fonction et des paramètres.
  • Omettre les paramètres : supprimez l’intégralité du champ des propriétés de l’objet paramètres.
  • Omettre entièrement la fonction : supprimez l’intégralité de l’objet de fonction du tableau de fonctions.

Optimiser pour la qualité

Sinon, si vous essayez d’améliorer la qualité de la sortie de l’appel de fonction, il est recommandé que les définitions de fonction présentes dans le jeu de données d’apprentissage du réglage précis et les appels de saisie semi-automatique de conversation suivants restent identiques.

Personnaliser les réponses de modèle aux sorties de fonction

Le réglage précis basé sur des exemples d’appels de fonction peut également être utilisé pour améliorer la réponse du modèle aux sorties de fonction. Pour ce faire, vous incluez des exemples composés de messages de réponse de fonction et de messages de réponse d’Assistant où la réponse de fonction est interprétée et placée dans le contexte par l’assistant.

{
    "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
}

Comme avec l’exemple précédent, cet exemple est artificiellement développé à des fins de lisibilité. L’entrée réelle dans le fichier d’entraînement .jsonl serait une seule ligne :

{"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": []}

Étapes suivantes