Dela via


Finjustering och verktygsanrop

Modeller som använder chattkompletterings-API:et stödjer verktygsanrop. Funktioner som definieras i dina samtal för chattens slutförande fungerar inte alltid som förväntat. Finjustering av din modell med verktygsanropsexempel kan förbättra modellutdata:

Förmån Description
Minska prompttokener Få liknande formaterade svar även när den fullständiga funktionsdefinitionen inte finns.
Förbättra noggrannheten Få mer exakta och konsekventa utdata.

Anmärkning

function_call och functions har blivit inaktuell till förmån för tools. Använd parametern tools i stället.

Skapa en träningsfil

När du skapar en träningsfil med verktygsanropsexempel ska du ta 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/region, 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/region, 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

Om du vill använda färre prompttoken efter finjustering av fullständiga funktionsdefinitioner experimenterar du med följande strategier:

Strategi Description
Utelämna beskrivningar Ta bort fältet description från funktionen och parametrarna.
Utelämna parametrar Ta bort hela properties fältet från objektet parameters .
Utelämna funktionen helt Ta bort hela funktionsobjektet från funktionsmatrisen.

Optimera för kvalitet

För att förbättra kvaliteten på verktygsanropsutdata behåller du funktionsdefinitionerna i din finjusterande träningsdatauppsättning och efterföljande samtal om chattens slutförande identiska.

Anpassa modellsvar till funktionsutdata

Du kan också finjustera verktygsanropsexempel för att förbättra modellens svar på funktionsutdata. Inkludera 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":[]}

Skapa en träningsfil

När du skapar en träningsfil med funktionsanropsexempel ska du ta 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/region, 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

Om du vill använda färre prompttoken efter finjustering av fullständiga funktionsdefinitioner experimenterar du med följande strategier:

Strategi Description
Utelämna beskrivningar Ta bort fältet description från funktionen och parametrarna.
Utelämna parametrar Ta bort hela properties fältet från objektet parameters .
Utelämna funktionen helt Ta bort hela funktionsobjektet från funktionsmatrisen.

Optimera för kvalitet

För att förbättra kvaliteten på utdata från funktionsanrop ska du hålla funktionsdefinitionerna i din finjusteringsdatamängd och efterföljande chattanrop identiska.

Anpassa modellsvar till funktionsutdata

Du kan också finjustera funktionsanropsexempel för att förbättra modellens svar på funktionsutdata. Inkludera 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\": \"celsius\"}"}}
        {"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\": \"celsius\"}"}}, {"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