Delen via


Afstemmen en functie-aanroepen

Modellen die gebruikmaken van de API voor chat-voltooiingen, bieden ondersteuning voor functie-aanroepen. Helaas worden functies die zijn gedefinieerd in uw chatopvullingsgesprekken niet altijd zoals verwacht uitgevoerd. Door uw model af te stemmen met voorbeelden van functiegesprekken, kunt u modeluitvoer verbeteren door het volgende mogelijk te maken:

  • Haal vergelijkbare opgemaakte antwoorden op, zelfs wanneer de volledige functiedefinitie niet aanwezig is. (Hiermee kunt u mogelijk geld besparen op prompttokens.)
  • Krijg nauwkeurigere en consistente uitvoer.

Een trainingsbestand samenstellen

Wanneer u een trainingsbestand maakt van voorbeelden van functie-aanroepen, moet u een functiedefinitie als volgt gebruiken:

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

En geef de informatie weer als één regel in uw .jsonl trainingsbestand, zoals hieronder:

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

Net als bij alle afstemmingstrainingen vereist uw voorbeeldbestand ten minste 10 voorbeelden.

Optimaliseren voor kosten

OpenAI raadt aan dat als u probeert te optimaliseren om minder prompttokens te gebruiken na het afstemmen van uw model op de volledige functiedefinities waarmee u kunt experimenteren:

  • Laat functie- en parameterbeschrijvingen weg: verwijder het beschrijvingsveld uit de functie en parameters.
  • Laat parameters weg: verwijder het hele eigenschappenveld uit het parameterobject.
  • Laat de functie volledig weg: verwijder het hele functieobject uit de functiematrix.

Optimaliseren voor kwaliteit

Als u de kwaliteit van de uitvoer van het aanroepen van functies probeert te verbeteren, wordt u aangeraden dat de functiedefinities die aanwezig zijn in de trainingsgegevensset voor het verfijnen van de training en daaropvolgende chatopvullingsgesprekken identiek blijven.

Modelantwoorden aanpassen aan functie-uitvoer

Afstemming op basis van voorbeelden van functiegesprekken kan ook worden gebruikt om het antwoord van het model op functie-uitvoer te verbeteren. Hiervoor voegt u voorbeelden toe die bestaan uit functieantwoordberichten en antwoordberichten van assistenten, waarbij het antwoord van de functie wordt geïnterpreteerd en in context wordt geplaatst door de assistent.

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

Net als bij het voorbeeld wordt dit voorbeeld kunstmatig uitgebreid voor leesbaarheid. De werkelijke vermelding in het .jsonl trainingsbestand zou één regel zijn:

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

Volgende stappen