Dela via


Finjustering och verktygsanrop

Modeller som använder chattkompletterings-API:et stödjer verktygsanrop. Tyvärr fungerar inte funktioner som definierats i dina samtal för chattens slutförande som förväntat. Finjustering av din modell med verktygsanropsexempel 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. (Det gör att du potentiellt kan spara pengar på prompt-token.)
  • Få mer exakta och konsekventa utdata.

Anmärkning

function_call och functions har blivit inaktuell till förmån för tools. Vi rekommenderar att du använder parametern tools i stället.

Skapa en träningsfil

När du skapar en träningsfil med verktygsanropsexempel tar du en funktionsdefinition som den här:

{
    "messages": [
        { "role": "user", "content": "What is the weather in San Francisco?" },
        {
            "role": "assistant",
            "tool_calls": [
                {
                    "id": "call_id",
                    "type": "function",
                    "function": {
                        "name": "get_current_weather",
                        "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"
                    }
                }
            ]
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "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","tool_calls":[{"id":"call_id","type":"function","function":{"name":"get_current_weather","arguments":"{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]}],"tools":[{"type":"function","function":{"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 prompt-token efter finjustering av din modell på de fullständiga funktionsdefinitionerna kan du experimentera med följande:

  • 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å verktygets anropsutdata rekommenderar vi att funktionsdefinitionerna som finns i den finjusterade träningsdatauppsättningen och de efterföljande chatt-samtalen förblir identiska.

Anpassa modellsvar till funktionsutdata

Finjustering baserat på verktygsanropsexempel 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", "tool_calls": [{"id": "call_id", "type": "function", "function": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]}
        {"role": "tool", "tool_call_id": "call_id", "content": "21.0"},
        {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}
    ],
    "tools": [] // same as before
}

Precis som med exemplet tidigare utökas det här exemplet artificiellt för läsbarhet. Den egentliga inmatningen i .jsonl träningsfilen skulle bestå av en enda rad.

{"messages":[{"role":"user","content":"What is the weather in San Francisco?"},{"role":"assistant","tool_calls":[{"id":"call_id","type":"function","function":{"name":"get_current_weather","arguments":"{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]},{"role":"tool","tool_call_id":"call_id","content":"21.0"},{"role":"assistant","content":"It is 21 degrees celsius in San Francisco, CA"}],"tools":[]}

Funktionsanrop

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 prompt-token efter finjustering av din modell på de fullständiga funktionsdefinitionerna kan du experimentera med följande:

  • 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å utdata vid funktionsanrop rekommenderar vi att funktionsdefinitionerna som finns i den finjusterande träningsdatauppsättningen och efterföljande chattkompletteringsanrop 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 egentliga inmatningen i .jsonl träningsfilen skulle bestå av 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