Bagikan melalui


Penyempurnaan dan pemanggilan fungsi

Model yang menggunakan panggilan fungsi dukungan API penyelesaian obrolan. Sayangnya, fungsi yang ditentukan dalam panggilan penyelesaian obrolan Anda tidak selalu berfungsi seperti yang diharapkan. Menyempurnakan model Anda dengan contoh panggilan fungsi dapat meningkatkan output model dengan memungkinkan Anda untuk:

  • Dapatkan respons yang diformat serupa bahkan ketika definisi fungsi lengkap tidak ada. (Memungkinkan Anda untuk berpotensi menghemat uang pada token perintah.)
  • Dapatkan output yang lebih akurat dan konsisten.

Penting

Parameter functions dan function_call telah ditolak dengan rilis 2023-12-01-preview versi API. Namun, API penyempurnaan saat ini memerlukan penggunaan parameter warisan.

Membuat file pelatihan

Saat membuat file pelatihan contoh panggilan fungsi, Anda akan mengambil definisi fungsi seperti ini:

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

Dan ekspreskan informasi sebagai satu baris dalam file pelatihan Anda .jsonl seperti di bawah ini:

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

Seperti halnya semua pelatihan penyempurnaan file contoh Anda memerlukan setidaknya 10 contoh.

Pengoptimalan biaya

OpenAI merekomendasikan bahwa jika Anda mencoba mengoptimalkan untuk menggunakan lebih sedikit token prompt pasca menyempurnakan model Anda pada definisi fungsi penuh yang dapat Anda eksperimen dengan:

  • Hilangkan deskripsi fungsi dan parameter: hapus bidang deskripsi dari fungsi dan parameter.
  • Hilangkan parameter: hapus seluruh bidang properti dari objek parameter.
  • Hilangkan fungsi sepenuhnya: hapus seluruh objek fungsi dari array fungsi.

Optimalkan untuk kualitas

Atau, jika Anda mencoba meningkatkan kualitas output panggilan fungsi, disarankan agar definisi fungsi yang ada dalam himpunan data pelatihan yang menyempurnakan dan panggilan penyelesaian obrolan berikutnya tetap identik.

Menyesuaikan respons model ke output fungsi

Penyempurnaan berdasarkan contoh panggilan fungsi juga dapat digunakan untuk meningkatkan respons model terhadap output fungsi. Untuk mencapai hal ini, Anda menyertakan contoh yang terdiri dari pesan respons fungsi dan pesan respons asisten di mana respons fungsi ditafsirkan dan dimasukkan ke dalam konteks oleh asisten.

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

Seperti contoh sebelumnya, contoh ini diperluas secara buatan untuk keterbacaan. Entri aktual dalam .jsonl file pelatihan akan menjadi satu baris:

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

Langkah berikutnya