Dela via


Finjustering och funktionsanrop

Modeller som använder api-stöd för chattens slutförandefunktionsanrop. Tyvärr fungerar inte funktioner som definierats i dina samtal för chattens slutförande som förväntat. Finjustering av din modell med funktionsanropsexempel kan förbättra modellutdata genom att göra så att du kan:

  • Få liknande formaterade svar även när den fullständiga funktionsdefinitionen inte finns. (Gör att du kan spara pengar på prompttoken.)
  • Få mer exakta och konsekventa utdata.

Skapa en träningsfil

När du skapar en träningsfil med exempel på funktionsanrop använder du en funktionsdefinition som den här:

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

Och uttrycka informationen som en enda rad i träningsfilen .jsonl enligt nedan:

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

Som med all finjusteringsträning kräver exempelfilen minst 10 exempel.

Optimera för kostnad

OpenAI rekommenderar att om du försöker optimera för att använda färre prompttoken efter finjustering av modellen på de fullständiga funktionsdefinitioner som du kan experimentera med:

  • Utelämna funktions- och parameterbeskrivningar: ta bort beskrivningsfältet från funktionen och parametrarna.
  • Utelämna parametrar: ta bort hela egenskapsfältet från parameterobjektet.
  • Utelämna funktionen helt: ta bort hela funktionsobjektet från funktionsmatrisen.

Optimera för kvalitet

Om du försöker förbättra kvaliteten på funktionen som anropar utdata rekommenderar vi att funktionsdefinitionerna som finns i den finjusterande träningsdatauppsättningen och efterföljande samtal för chattavslut förblir identiska.

Anpassa modellsvar till funktionsutdata

Finjustering baserat på funktionsanropsexempel kan också användas för att förbättra modellens svar på funktionsutdata. För att åstadkomma detta inkluderar du exempel som består av funktionssvarsmeddelanden och assistentsvarsmeddelanden där funktionssvaret tolkas och sätts i kontext av assistenten.

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

Precis som med exemplet tidigare utökas det här exemplet artificiellt för läsbarhet. Den faktiska posten i .jsonl träningsfilen skulle vara en enda rad:

{"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ästa steg