Condividi tramite


Ottimizzazione e chiamata di funzioni

I modelli che usano l'API di completamento della chat supportano la chiamata a funzioni. Sfortunatamente, le funzioni definite nelle chiamate di completamento della chat non sempre vengono eseguite come previsto. L'ottimizzazione del modello con esempi di chiamata di funzioni può migliorare l'output del modello consentendo di:

  • Ottenere risposte formattate in modo analogo anche quando la definizione completa della funzione non è presente. (Consentendo di risparmiare denaro sui token di richiesta).
  • Ottenere output più accurati e coerenti.

Importante

I functions parametri e function_call sono stati deprecati con il rilascio della 2023-12-01-preview versione dell'API. Tuttavia, l'API di ottimizzazione richiede attualmente l'uso dei parametri legacy.

Creazione di un file di training

Quando si crea un file di training di esempi di chiamata di funzione, si accetta una definizione di funzione simile alla seguente:

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

E esprimere le informazioni come una singola riga all'interno del .jsonl file di training come indicato di seguito:

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

Come per tutti i training di ottimizzazione, il file di esempio richiede almeno 10 esempi.

Ottimizzare in base ai costi

OpenAI consiglia di usare un minor numero di token di richiesta dopo l'ottimizzazione del modello nelle definizioni di funzione complete con cui è possibile sperimentare:

  • Omettere le descrizioni di funzioni e parametri: rimuovere il campo di descrizione dalla funzione e dai parametri.
  • Omettere i parametri: rimuovere l'intero campo delle proprietà dall'oggetto parametri.
  • Omettere completamente la funzione: rimuovere l'intero oggetto funzione dalla matrice di funzioni.

Ottimizzare la qualità

In alternativa, se si sta tentando di migliorare la qualità dell'output delle chiamate di funzione, è consigliabile che le definizioni di funzione presenti nel set di dati di training di ottimizzazione e le chiamate di completamento della chat successive rimangano identiche.

Personalizzare le risposte del modello agli output delle funzioni

L'ottimizzazione basata sugli esempi di chiamata di funzioni può essere usata anche per migliorare la risposta del modello agli output delle funzioni. A tale scopo, si includono esempi costituiti da messaggi di risposta della funzione e messaggi di risposta dell'assistente in cui la risposta della funzione viene interpretata e inserita nel contesto dall'assistente.

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

Come nell'esempio precedente, questo esempio viene espanso artificialmente per la leggibilità. La voce effettiva nel file di .jsonl training sarà una singola riga:

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

Passaggi successivi

  • Esplorare le funzionalità di ottimizzazione nell'esercitazione sull'ottimizzazione di Azure OpenAI.
  • Esaminare la disponibilità a livello di area del modello di ottimizzazione