Bagikan melalui


Bekerja dengan model GPT-3.5-Turbo, GPT-4, dan model GPT-4o

Model seri GPT-3.5-Turbo, GPT-4, dan GPT-4o adalah model bahasa yang dioptimalkan untuk antarmuka percakapan. Model bereaksi berbeda dari model GPT-3 yang lebih lama. Model sebelumnya adalah text-in dan text-out, yang berarti mereka menerima string prompt dan mengembalikan penyelesaian untuk ditambahkan ke prompt. Namun, model terbaru adalah percakapan dan pesan keluar. Model mengharapkan input diformat dalam format transkrip seperti obrolan tertentu. Mereka mengembalikan penyelesaian yang mewakili pesan tertulis model dalam obrolan. Format ini dirancang khusus untuk percakapan multi-giliran, tetapi juga dapat bekerja dengan baik untuk skenario nonchat.

Artikel ini memancang Anda memulai model penyelesaian obrolan. Untuk mendapatkan hasil terbaik, gunakan teknik yang dijelaskan di sini. Jangan mencoba berinteraksi dengan model dengan cara yang sama seperti yang Anda lakukan dengan seri model yang lebih lama karena model sering verbose dan memberikan respons yang kurang berguna.

Bekerja dengan model penyelesaian obrolan

Cuplikan kode berikut menunjukkan cara paling dasar untuk berinteraksi dengan model yang menggunakan API Penyelesaian Obrolan. Jika ini pertama kalinya Anda menggunakan model ini secara terprogram, kami sarankan Anda memulai dengan mulai cepat penyelesaian obrolan.

Catatan

Dalam dokumentasi Azure OpenAI, kami merujuk ke GPT-3.5-Turbo dan GPT-35-Turbo secara bergantian. Nama resmi model di OpenAI adalah gpt-3.5-turbo. Untuk Azure OpenAI, karena batasan karakter khusus Azure, nama model yang mendasarinya adalah gpt-35-turbo.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  api_key = os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version = "2024-02-01",
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)

response = client.chat.completions.create(
    model="gpt-35-turbo", # model = "deployment_name".
    messages=[
        {"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
        {"role": "user", "content": "Who were the founders of Microsoft?"}
    ]
)

#print(response)
print(response.model_dump_json(indent=2))
print(response.choices[0].message.content)
{
  "id": "chatcmpl-8GHoQAJ3zN2DJYqOFiVysrMQJfe1P",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Microsoft was founded by Bill Gates and Paul Allen. They established the company on April 4, 1975. Bill Gates served as the CEO of Microsoft until 2000 and later as Chairman and Chief Software Architect until his retirement in 2008, while Paul Allen left the company in 1983 but remained on the board of directors until 2000.",
        "role": "assistant",
        "function_call": null
      },
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ],
  "created": 1698892410,
  "model": "gpt-35-turbo",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 73,
    "prompt_tokens": 29,
    "total_tokens": 102
  },
  "prompt_filter_results": [
    {
      "prompt_index": 0,
      "content_filter_results": {
        "hate": {
          "filtered": false,
          "severity": "safe"
        },
        "self_harm": {
          "filtered": false,
          "severity": "safe"
        },
        "sexual": {
          "filtered": false,
          "severity": "safe"
        },
        "violence": {
          "filtered": false,
          "severity": "safe"
        }
      }
    }
  ]
}
Microsoft was founded by Bill Gates and Paul Allen. They established the company on April 4, 1975. Bill Gates served as the CEO of Microsoft until 2000 and later as Chairman and Chief Software Architect until his retirement in 2008, while Paul Allen left the company in 1983 but remained on the board of directors until 2000.

Catatan

Parameter berikut tidak tersedia dengan model GPT-35-Turbo dan GPT-4 baru: logprobs, , best_ofdan echo. Jika Anda mengatur salah satu parameter ini, Anda mendapatkan kesalahan.

Setiap respons mencakup finish_reason. Nilai yang mungkin untuk finish_reason adalah:

  • stop: API mengembalikan output model lengkap.
  • length: Output model tidak lengkap karena max_tokens parameter atau batas token.
  • content_filter: Konten yang dihilangkan karena bendera dari filter konten kami.
  • null: Respons API masih berlangsung atau tidak lengkap.

Pertimbangkan pengaturan max_tokens ke nilai yang sedikit lebih tinggi dari biasanya, seperti 300 atau 500. Nilai yang lebih tinggi memastikan bahwa model tidak berhenti menghasilkan teks sebelum mencapai akhir pesan.

Pembuatan versi model

Catatan

Versi gpt-35-turbo ini setara dengan gpt-3.5-turbo model dari OpenAI.

Tidak seperti model GPT-3 dan GPT-3.5 sebelumnya, gpt-35-turbo model dan gpt-4 model dan gpt-4-32k akan terus diperbarui. Saat membuat penyebaran model ini, Anda juga perlu menentukan versi model.

Anda dapat menemukan tanggal penghentian model untuk model ini di halaman model .

Bekerja dengan API Penyelesaian Obrolan

OpenAI melatih model GPT-35-Turbo dan GPT-4 untuk menerima input yang diformat sebagai percakapan. Parameter pesan mengambil array objek pesan dengan percakapan yang diatur berdasarkan peran. Saat Anda menggunakan Python API, daftar kamus digunakan.

Format penyelesaian obrolan dasar adalah:

{"role": "system", "content": "Provide some context and/or instructions to the model"},
{"role": "user", "content": "The users messages goes here"}

Percakapan dengan satu contoh jawaban diikuti dengan pertanyaan akan terlihat seperti:

{"role": "system", "content": "Provide some context and/or instructions to the model."},
{"role": "user", "content": "Example question goes here."},
{"role": "assistant", "content": "Example answer goes here."},
{"role": "user", "content": "First question/message for the model to actually respond to."}

Peran sistem

Peran sistem, juga dikenal sebagai pesan sistem, disertakan di awal array. Pesan ini memberikan instruksi awal untuk model. Anda dapat memberikan berbagai informasi dalam peran sistem, seperti:

  • Deskripsi singkat tentang asisten.
  • Sifat kepribadian asisten.
  • Instruksi atau aturan yang Anda inginkan untuk diikuti asisten.
  • Data atau informasi yang diperlukan untuk model, seperti pertanyaan yang relevan dari FAQ.

Anda dapat menyesuaikan peran sistem untuk kasus penggunaan Anda atau menyertakan instruksi dasar. Peran/pesan sistem bersifat opsional, tetapi kami sarankan Anda setidaknya menyertakan peran dasar untuk mendapatkan hasil terbaik.

Pesan

Setelah peran sistem, Anda dapat menyertakan serangkaian pesan antara user dan assistant.

 {"role": "user", "content": "What is thermodynamics?"}

Untuk memicu respons dari model, akhiri dengan pesan pengguna untuk menunjukkan bahwa itu adalah giliran asisten untuk merespons. Anda juga dapat menyertakan serangkaian contoh pesan antara pengguna dan asisten sebagai cara untuk melakukan pembelajaran beberapa kali.

Contoh perintah pesan

Bagian berikut menunjukkan contoh gaya permintaan yang berbeda yang dapat Anda gunakan dengan model GPT-35-Turbo dan GPT-4. Contoh-contoh ini hanyalah titik awal. Anda dapat bereksperimen dengan permintaan yang berbeda untuk menyesuaikan perilaku untuk kasus penggunaan Anda sendiri.

Contoh dasar

Jika Anda ingin model GPT-35-Turbo berulah mirip dengan chat.openai.com, Anda dapat menggunakan pesan sistem dasar seperti Assistant is a large language model trained by OpenAI.

{"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
{"role": "user", "content": "Who were the founders of Microsoft?"}

Contoh dengan instruksi

Untuk beberapa skenario, Anda mungkin ingin memberikan lebih banyak instruksi kepada model untuk menentukan pagar pembatas untuk apa yang dapat dilakukan model.

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions: 
- Only answer questions related to taxes. 
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information. "},
{"role": "user", "content": "When are my taxes due?"}

Menggunakan data untuk grounding

Anda juga dapat menyertakan data atau informasi yang relevan dalam pesan sistem untuk memberikan konteks tambahan model untuk percakapan. Jika Anda hanya perlu menyertakan sejumlah kecil informasi, Anda dapat melakukan hard code dalam pesan sistem. Jika Anda memiliki sejumlah besar data yang harus diperhatikan model, Anda dapat menggunakan penyematan atau produk seperti Azure AI Search untuk mengambil informasi yang paling relevan pada waktu kueri.

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you're not sure of an answer, you can say 'I don't know'.

Context:
- Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series.
- Azure OpenAI Service gives customers advanced language AI with OpenAI GPT-3, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other.
- At Microsoft, we're committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use."
},
{"role": "user", "content": "What is Azure OpenAI Service?"}

Pembelajaran beberapa bidikan dengan penyelesaian obrolan

Anda juga dapat memberikan contoh beberapa bidikan untuk model. Pendekatan untuk pembelajaran beberapa bidikan sedikit berubah karena format prompt baru. Anda sekarang dapat menyertakan serangkaian pesan antara pengguna dan asisten dalam perintah sebagai contoh beberapa bidikan. Dengan menggunakan contoh-contoh ini, Anda dapat menyemai jawaban atas pertanyaan umum untuk memandu model atau mengajarkan perilaku tertentu kepada model.

Contoh ini menunjukkan bagaimana Anda dapat menggunakan pembelajaran beberapa bidikan dengan GPT-35-Turbo dan GPT-4. Anda dapat bereksperimen dengan pendekatan yang berbeda untuk melihat apa yang paling sesuai untuk kasus penggunaan Anda.

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions. "},
{"role": "user", "content": "When do I need to file my taxes by?"},
{"role": "assistant", "content": "In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see https://www.irs.gov/filing/individuals/when-to-file."},
{"role": "user", "content": "How can I check the status of my tax refund?"},
{"role": "assistant", "content": "You can check the status of your tax refund by visiting https://www.irs.gov/refunds"}

Menggunakan penyelesaian obrolan untuk skenario nonchat

API Penyelesaian Obrolan dirancang untuk bekerja dengan percakapan multi-giliran, tetapi juga berfungsi dengan baik untuk skenario nonchat.

Misalnya, untuk skenario ekstraksi entitas, Anda mungkin menggunakan perintah berikut:

{"role": "system", "content": "You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format:
{
   "name": "",
   "company": "",
   "phone_number": ""
}"},
{"role": "user", "content": "Hello. My name is Robert Smith. I'm calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346-9322 when you get a chance so we can go over the benefits?"}

Membuat perulangan percakapan dasar

Contoh sejauh ini menunjukkan mekanisme dasar berinteraksi dengan API Penyelesaian Obrolan. Contoh ini memperlihatkan kepada Anda cara membuat perulangan percakapan yang melakukan tindakan berikut:

  • Terus mengambil input konsol dan memformatnya dengan benar sebagai bagian dari daftar pesan sebagai konten peran pengguna.
  • Output respons yang dicetak ke konsol dan diformat dan ditambahkan ke daftar pesan sebagai konten peran asisten.

Setiap kali pertanyaan baru diajukan, transkrip percakapan yang sedang berjalan sejauh ini dikirim bersama dengan pertanyaan terbaru. Karena model tidak memiliki memori, Anda perlu mengirim transkrip yang diperbarui dengan setiap pertanyaan baru atau model akan kehilangan konteks pertanyaan dan jawaban sebelumnya.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  api_key = os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version = "2024-02-01",
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")  # Your Azure OpenAI resource's endpoint value.
)

conversation=[{"role": "system", "content": "You are a helpful assistant."}]

while True:
    user_input = input("Q:")      
    conversation.append({"role": "user", "content": user_input})

    response = client.chat.completions.create(
        model="gpt-35-turbo", # model = "deployment_name".
        messages=conversation
    )

    conversation.append({"role": "assistant", "content": response.choices[0].message.content})
    print("\n" + response.choices[0].message.content + "\n")

Saat menjalankan kode sebelumnya, Anda mendapatkan jendela konsol kosong. Masukkan pertanyaan pertama Anda di jendela lalu pilih Enter kunci. Setelah respons dikembalikan, Anda dapat mengulangi proses dan terus mengajukan pertanyaan.

Mengelola percakapan

Contoh sebelumnya berjalan hingga Anda mencapai batas token model. Dengan setiap pertanyaan yang diajukan messages , dan jawaban yang diterima, daftar bertambah dalam ukuran. Batas token untuk gpt-35-turbo adalah 4.096 token. Batas token untuk gpt-4 dan gpt-4-32k masing-masing adalah 8.192 dan 32.768. Batas ini termasuk jumlah token dari daftar pesan yang dikirim dan respons model. Jumlah token dalam daftar pesan yang dikombinasikan dengan nilai max_tokens parameter harus tetap berada di bawah batas ini atau Anda menerima kesalahan.

Anda bertanggung jawab untuk memastikan bahwa perintah dan penyelesaian berada dalam batas token. Untuk percakapan yang lebih lama, Anda perlu melacak jumlah token dan hanya mengirim permintaan model yang termasuk dalam batas.

Catatan

Kami sangat menyarankan Agar Anda tetap berada dalam batas token input yang didokumen untuk semua model, bahkan jika Anda menemukan bahwa Anda dapat melebihi batas tersebut.

Sampel kode berikut menunjukkan contoh perulangan obrolan sederhana dengan teknik untuk menangani jumlah token 4.096 dengan menggunakan pustaka tiktoken OpenAI.

Kode menggunakan tiktoken 0.5.1. Jika Anda memiliki versi yang lebih lama, jalankan pip install tiktoken --upgrade.

import tiktoken
import os
from openai import AzureOpenAI

client = AzureOpenAI(
  api_key = os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version = "2024-02-01",
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")  # Your Azure OpenAI resource's endpoint value.
)

system_message = {"role": "system", "content": "You are a helpful assistant."}
max_response_tokens = 250
token_limit = 4096
conversation = []
conversation.append(system_message)

def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613"):
    """Return the number of tokens used by a list of messages."""
    try:
        encoding = tiktoken.encoding_for_model(model)
    except KeyError:
        print("Warning: model not found. Using cl100k_base encoding.")
        encoding = tiktoken.get_encoding("cl100k_base")
    if model in {
        "gpt-3.5-turbo-0613",
        "gpt-3.5-turbo-16k-0613",
        "gpt-4-0314",
        "gpt-4-32k-0314",
        "gpt-4-0613",
        "gpt-4-32k-0613",
        }:
        tokens_per_message = 3
        tokens_per_name = 1
    elif model == "gpt-3.5-turbo-0301":
        tokens_per_message = 4  # every message follows <|start|>{role/name}\n{content}<|end|>\n
        tokens_per_name = -1  # if there's a name, the role is omitted
    elif "gpt-3.5-turbo" in model:
        print("Warning: gpt-3.5-turbo may update over time. Returning num tokens assuming gpt-3.5-turbo-0613.")
        return num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613")
    elif "gpt-4" in model:
        print("Warning: gpt-4 may update over time. Returning num tokens assuming gpt-4-0613.")
        return num_tokens_from_messages(messages, model="gpt-4-0613")
    else:
        raise NotImplementedError(
            f"""num_tokens_from_messages() is not implemented for model {model}."""
        )
    num_tokens = 0
    for message in messages:
        num_tokens += tokens_per_message
        for key, value in message.items():
            num_tokens += len(encoding.encode(value))
            if key == "name":
                num_tokens += tokens_per_name
    num_tokens += 3  # every reply is primed with <|start|>assistant<|message|>
    return num_tokens
while True:
    user_input = input("Q:")      
    conversation.append({"role": "user", "content": user_input})
    conv_history_tokens = num_tokens_from_messages(conversation)

    while conv_history_tokens + max_response_tokens >= token_limit:
        del conversation[1] 
        conv_history_tokens = num_tokens_from_messages(conversation)

    response = client.chat.completions.create(
        model="gpt-35-turbo", # model = "deployment_name".
        messages=conversation,
        temperature=0.7,
        max_tokens=max_response_tokens
    )


    conversation.append({"role": "assistant", "content": response.choices[0].message.content})
    print("\n" + response.choices[0].message.content + "\n")

Dalam contoh ini, setelah jumlah token tercapai, pesan terlama dalam transkrip percakapan dihapus. Untuk efisiensi, del digunakan alih-alih pop(). Kita mulai dari indeks 1 untuk selalu mempertahankan pesan sistem dan hanya menghapus pesan pengguna atau asisten. Seiring waktu, metode pengelolaan percakapan ini dapat menyebabkan kualitas percakapan menurun karena model secara bertahap kehilangan konteks bagian percakapan sebelumnya.

Pendekatan alternatif adalah membatasi durasi percakapan hingga panjang token maksimum atau jumlah belokan tertentu. Setelah batas token maksimum tercapai, model akan kehilangan konteks jika Anda mengizinkan percakapan untuk melanjutkan. Anda dapat meminta pengguna untuk memulai percakapan baru dan menghapus daftar pesan untuk memulai percakapan baru dengan batas token lengkap yang tersedia.

Bagian penghitungan token dari kode yang ditunjukkan sebelumnya adalah versi yang disederhanakan dari salah satu contoh buku masak OpenAI.

Pemecahan Masalah

Berikut adalah tips pemecahan masalah.

Jangan gunakan sintaks ChatML atau token khusus dengan titik akhir penyelesaian obrolan

Beberapa pelanggan mencoba menggunakan sintaks ChatML warisan dengan titik akhir penyelesaian obrolan dan model yang lebih baru. ChatML adalah kemampuan pratinjau yang hanya berfungsi dengan titik akhir penyelesaian warisan dengan gpt-35-turbo model versi 0301. Model ini dijadwalkan untuk penghentian. Jika Anda mencoba menggunakan sintaks ChatML dengan model yang lebih baru dan titik akhir penyelesaian obrolan, itu dapat mengakibatkan kesalahan dan perilaku respons model yang tidak terduga. Kami tidak merekomendasikan penggunaan ini. Masalah yang sama ini dapat terjadi saat menggunakan token khusus umum.

Kode Kesalahan Pesan kesalahan Solusi
400 400 - "Gagal menghasilkan output karena token khusus dalam input." Prompt Anda berisi token khusus atau token ChatML warisan yang tidak dikenali atau didukung oleh model/titik akhir. Pastikan bahwa array prompt/messages Anda tidak berisi token ChatML warisan/token khusus. Jika Anda meningkatkan dari model warisan, kecualikan semua token khusus sebelum Anda mengirimkan permintaan API ke model.

Gagal membuat penyelesaian karena model menghasilkan output Unicode yang tidak valid

Kode Kesalahan Pesan kesalahan Solusi Sementara
500 500 - InternalServerError: Kode kesalahan: 500 - {'error': {'message': 'Failed to create completion as the model generated invalid Unicode output}}} . Anda dapat meminimalkan terjadinya kesalahan ini dengan mengurangi suhu permintaan Anda menjadi kurang dari 1 dan memastikan Anda menggunakan klien dengan logika coba lagi. Memasang ulang permintaan sering kali menghasilkan respons yang berhasil.

Langkah berikutnya