Share via


Optimieren und Funktionsaufrufe

Modelle, die die Chatvervollständigungs-API verwenden, unterstützen Funktionsaufrufe. Leider werden Funktionen, die in Ihren Chatvervollständigungsaufrufen definiert sind, nicht immer wie erwartet ausgeführt. Durch die Optimierung Ihres Modells mit Beispielen für Funktionsaufrufe können Sie die Modellausgabe verbessern, indem Sie folgende Aktionen ausführen können:

  • Erhalten Sie entsprechend formatierte Antworten, auch wenn die vollständige Definition der Funktion nicht vorhanden ist. (Sie können potenziell Geld auf Eingabeaufforderungstoken sparen.)
  • Erhalten Sie präzise und konsistente Ausgaben.

Wichtig

Die Parameter functions und function_call wurden mit der Veröffentlichung der Version 2023-12-01-preview der API als veraltet markiert. Die Optimierungs-API erfordert derzeit jedoch die Verwendung der Legacyparameter.

Erstellen einer Trainingsdatei

Beim Erstellen einer Trainingsdatei mit Beispielen für Funktionsaufrufe würden Sie eine Funktionsdefinition wie folgt ausführen:

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

Geben Sie die Informationen als einzelne Zeile in Ihrer .jsonl-Trainingsdatei wie folgt aus:

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

Wie bei allen Optimierungstrainings muss Ihre Beispieldatei mindestens 10 Beispiele enthalten.

Optimieren für Kosten

OpenAI empfiehlt, dass Sie, wenn Sie versuchen, zu optimieren, weniger Eingabeaufforderungstoken nach der Optimierung Ihres Modells in den vollständigen Funktionsdefinitionen, mit denen Sie experimentieren können, verwenden:

  • Funktions- und Parameterbeschreibungen weglassen: Entfernen Sie das Beschreibungsfeld aus Funktion und Parametern.
  • Parameter weglassen: Entfernen Sie das gesamte Eigenschaftenfeld aus dem Parameterobjekt.
  • Funktion vollständig weglassen: Entfernen Sie das gesamte Funktionsobjekt aus dem Funktionsarray.

Optimieren der Qualität

Wenn Sie jedoch versuchen, die Qualität der Ausgabe des Funktionsaufrufs zu verbessern, empfiehlt es sich, dass die Funktionsdefinitionen im Optimierungstrainigsdatensatz und in nachfolgenden Chatvervollständigungsanrufen identisch bleiben.

Anpassen von Modellantworten an Funktionsausgaben

Eine Optimierung basierend auf Funktionsaufrufbeispielen kann auch verwendet werden, um die Reaktion des Modells auf Funktionsausgaben zu verbessern. Dazu fügen Sie Beispiele ein, die aus Funktionsantwortnachrichten und Assistentenantwortnachrichten bestehen, in denen die Funktionsantwort interpretiert und vom Assistenten in Kontext gesetzt wird.

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

Wie im Beispiel zuvor wird dieses Beispiel künstlich für eine bessere Lesbarkeit erweitert. Der tatsächliche Eintrag in der .jsonl-Trainingsdatei wäre eine einzige Zeile:

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

Nächste Schritte