Share via


GPT-3.5-Turbo ve GPT-4 modelleriyle çalışma

GPT-3.5-Turbo ve GPT-4 modelleri, konuşma arabirimleri için iyileştirilmiş dil modelleridir. Modeller, eski GPT-3 modellerinden farklı davranır. Önceki modeller metin içinde ve metin çıkışındaydı, yani bir istem dizesini kabul ettiler ve istemin sonuna eklemek için bir tamamlama döndürdüler. Ancak GPT-3.5-Turbo ve GPT-4 modelleri konuşma ve ileti çıkışıdır. Modeller, girişin belirli bir sohbet benzeri transkript biçiminde biçimlendirilmiş olmasını bekler. Sohbette model tarafından yazılmış bir iletiyi temsil eden bir tamamlama döndürür. Bu biçim, çok aşamalı konuşmalar için özel olarak tasarlanmıştır, ancak sohbet dışı senaryolar için de iyi çalışabilir.

Bu makale, GPT-3.5-Turbo ve GPT-4 modellerini kullanmaya başlama konusunda size yol gösterir. En iyi sonuçları elde etmek için burada açıklanan teknikleri kullanın. Modeller genellikle ayrıntılı olduğundan ve daha az yararlı yanıtlar sağladığından, eski model serisiyle yaptığınız gibi modellerle etkileşim kurmayın.

GPT-3.5-Turbo ve GPT-4 modelleriyle çalışma

Aşağıdaki kod parçacığı, Sohbet Tamamlama API'siyle GPT-3.5-Turbo ve GPT-4 modellerini kullanmanın en temel yolunu gösterir. Bu modelleri program aracılığıyla ilk kez kullanıyorsanız, GPT-3.5-Turbo ve GPT-4 hızlı başlangıcı ile başlamanızı öneririz.

Not

Azure OpenAI belgelerinde GPT-3.5-Turbo ve GPT-35-Turbo'ya birbirinin yerine başvuracağız. OpenAI üzerindeki modelin resmi adıdır gpt-3.5-turbo. Azure OpenAI için, Azure'a özgü karakter kısıtlamaları nedeniyle temel model adı şeklindedir 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.

Not

Yeni GPT-35-Turbo ve GPT-4 modellerinde aşağıdaki parametreler kullanılamaz: logprobs, best_ofve echo. Bu parametrelerden herhangi birini ayarlarsanız bir hata alırsınız.

Her yanıt içerir finish_reason. finish_reason için olası değerler şunlardır:

  • stop: API tam model çıktısı döndürdü.
  • length: Parametresi veya belirteç sınırı nedeniyle max_tokens tamamlanmamış model çıktısı.
  • content_filter: İçerik filtrelerimizden gelen bir bayrak nedeniyle içerik atlanır.
  • null: API yanıtı hala devam ediyor veya tamamlanmadı.

300 veya 500 gibi normalden biraz daha yüksek bir değere ayarlamayı max_tokens göz önünde bulundurun. Daha yüksek bir değer, modelin iletinin sonuna ulaşmadan önce metin oluşturmayı durdurmamasını sağlar.

Model sürümü oluşturma

Not

Sürüm gpt-35-turbo , OpenAI'deki modele gpt-3.5-turbo eşdeğerdir.

Önceki GPT-3 ve GPT-3.5 modellerinin aksine, gpt-35-turbo model ve gpt-4 ve gpt-4-32k modelleri güncelleştirilmeye devam edecektir. Bu modellerin dağıtımını oluştururken bir model sürümü de belirtmeniz gerekir.

Bu modellerin kullanımdan kaldırma tarihlerini modeller sayfasında bulabilirsiniz.

Sohbet Tamamlama API'siyle çalışma

OpenAI, GPT-35-Turbo ve GPT-4 modellerini konuşma olarak biçimlendirilmiş girişi kabul etmek için eğitti. messages parametresi, role göre düzenlenmiş bir konuşma içeren bir dizi ileti nesnesi alır. Python API'sini kullandığınızda sözlük listesi kullanılır.

Temel sohbet tamamlama biçimi şu şekildedir:

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

Bir örnek yanıt ve ardından bir soru içeren bir konuşma şöyle görünür:

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

Sistem rolü

Sistem iletisi olarak da bilinen sistem rolü, dizinin başına eklenir. Bu ileti modele ilk yönergeleri sağlar. Sistem rolünde aşağıdakiler gibi çeşitli bilgiler sağlayabilirsiniz:

  • Asistanın kısa bir açıklaması.
  • Asistanın kişilik özellikleri.
  • Yardımcının izlemesini istediğiniz yönergeler veya kurallar.
  • SSS'de yer alan ilgili sorular gibi model için gereken veriler veya bilgiler.

Kullanım örneğiniz için sistem rolünü özelleştirebilir veya temel yönergeler ekleyebilirsiniz. Sistem rolü/iletisi isteğe bağlıdır, ancak en iyi sonuçları elde etmek için en azından temel bir rol eklemenizi öneririz.

İletiler

Sistem rolünden sonra ve assistantarasında user bir dizi ileti ekleyebilirsiniz.

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

Modelden bir yanıt tetiklemesi için, yardımcının yanıt verme sırası olduğunu belirten bir kullanıcı iletisiyle sonlandırın. Ayrıca, az denemeli öğrenmenin bir yolu olarak kullanıcı ve yardımcı arasında bir dizi örnek ileti de ekleyebilirsiniz.

İleti istemi örnekleri

Aşağıdaki bölümde, GPT-35-Turbo ve GPT-4 modelleriyle kullanabileceğiniz farklı istem stilleri örnekleri gösterilmektedir. Bu örnekler yalnızca bir başlangıç noktasıdır. Kendi kullanım örneklerinizin davranışını özelleştirmek için farklı istemlerle denemeler yapabilirsiniz.

Temel örnek

GPT-35-Turbo modelinin chat.openai.com benzer şekilde davranmasını istiyorsanız,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?"}

Yönergeler içeren örnek

Bazı senaryolarda, modelin yapabilecekleri için korumalar tanımlamak üzere modele daha fazla yönerge vermek isteyebilirsiniz.

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

Topraklama için verileri kullanma

Modele konuşma için ek bağlam sağlamak için sistem iletisine ilgili verileri veya bilgileri de ekleyebilirsiniz. Yalnızca az miktarda bilgi eklemeniz gerekiyorsa, bunu sistem iletisine sabit kodlayabilirsiniz. Modelin bilmesi gereken büyük miktarda veriniz varsa, sorgu zamanında en uygun bilgileri almak için eklemeleri veya Azure AI Search gibi bir ürünü kullanabilirsiniz.

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

Sohbet tamamlama ile az denemeli öğrenme

Modele birkaç çekim örneği de verebilirsiniz. Az çekim öğrenme yaklaşımı, yeni istem biçimi nedeniyle biraz değişti. Artık kullanıcı ile yardımcı arasında birkaç çekim örneği olarak bir dizi ileti ekleyebilirsiniz. Bu örnekleri kullanarak modelin temellerini belirlemek veya modele belirli davranışları öğretmek için sık sorulan soruların yanıtlarını görebilirsiniz.

Bu örnekte GPT-35-Turbo ve GPT-4 ile az çekim öğrenmeyi nasıl kullanabileceğiniz gösterilmektedir. Kullanım örneğiniz için en uygun olanı görmek için farklı yaklaşımlarla denemeler yapabilirsiniz.

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

Sohbet dışı senaryolar için sohbet tamamlama özelliğini kullanma

Sohbet Tamamlama API'si çok aşamalı konuşmalarla çalışacak şekilde tasarlanmıştır, ancak sohbet dışı senaryolar için de iyi çalışır.

Örneğin, varlık ayıklama senaryosu için aşağıdaki istemi kullanabilirsiniz:

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

Temel konuşma döngüsü oluşturma

Şu ana kadarki örneklerde Sohbet Tamamlama API'siyle etkileşim kurmanın temel mekanizmaları gösterilmektedir. Bu örnekte, aşağıdaki eylemleri gerçekleştiren bir konuşma döngüsünün nasıl oluşturulacağı gösterilmektedir:

  • Konsol girişini sürekli alır ve ileti listesinin bir parçası olarak kullanıcı rolü içeriği olarak düzgün biçimlendirin.
  • Konsola yazdırılan ve biçimlendirilen ve yardımcı rol içeriği olarak iletiler listesine eklenen yanıtların çıktısını alır.

Yeni bir soru sorulduğunda, en son soruyla birlikte konuşmanın şu ana kadar çalışan bir dökümü gönderilir. Modelin belleği olmadığından, her yeni soruyu içeren güncelleştirilmiş bir transkript göndermeniz gerekir, aksi takdirde model önceki soruların ve yanıtların bağlamını kaybeder.

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")

Önceki kodu çalıştırdığınızda boş bir konsol penceresi alırsınız. Pencereye ilk sorunuzu girin ve anahtarı seçin Enter . Yanıt döndürüldükten sonra işlemi yineleyebilir ve soru sormaya devam edebilirsiniz.

Konuşmaları yönetme

Önceki örnek, modelin belirteç sınırına gelene kadar çalışır. Her soru sorulduğunda ve yanıt alındığında, listenin messages boyutu büyür. için gpt-35-turbo belirteç sınırı 4.096 belirteçtir. ve gpt-4-32k için gpt-4 belirteç sınırları sırasıyla 8.192 ve 32.768'tir. Bu sınırlar hem gönderilen ileti listesinden hem de model yanıtından belirteç sayısını içerir. İleti listesindeki belirteçlerin sayısı, parametrenin değeriyle birlikte bu sınırların max_tokens altında kalmalıdır veya bir hata alırsınız.

İstem ve tamamlamanın belirteç sınırına uygun olduğundan emin olmak sizin sorumluluğunuzdadır. Daha uzun konuşmalar için belirteç sayısını izlemeniz ve modele yalnızca sınıra denk gelen bir istem göndermeniz gerekir.

Not

Bu sınırı aşabileceğinizi fark etseniz bile tüm modeller için belgelenen giriş belirteci sınırında kalmanızı kesinlikle öneririz.

Aşağıdaki kod örneği, OpenAI'nin tiktoken kitaplığını kullanarak 4.096 belirteç sayısını işleme tekniğine sahip basit bir sohbet döngüsü örneğini gösterir.

Kod tiktoken 0.5.1kullanır. Daha eski bir sürümünüz varsa komutunu çalıştırın 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")

Bu örnekte, belirteç sayısına ulaşıldıktan sonra konuşma transkriptindeki en eski iletiler kaldırılır. Verimlilik için yerine delpop()kullanılır. Sistem iletisini her zaman korumak ve yalnızca kullanıcı veya yardımcı iletilerini kaldırmak için dizin 1'den başlıyoruz. Zaman içinde bu konuşma yönetimi yöntemi, model konuşmanın önceki bölümlerinin bağlamını kademeli olarak kaybettiğinden konuşma kalitesinin düşmesine neden olabilir.

Alternatif bir yaklaşım, konuşma süresini maksimum belirteç uzunluğu veya belirli bir dönüş sayısıyla sınırlamaktır. En yüksek belirteç sınırına ulaşıldıktan sonra, konuşmanın devam etmesi için izin verirseniz model bağlamı kaybeder. Kullanıcıdan yeni bir konuşma başlatmasını ve ileti listesini temizleyip tam belirteç sınırıyla yeni bir konuşma başlatmasını isteyebilirsiniz.

Kodun daha önce gösterildiği belirteç sayma bölümü, OpenAI'nin yemek kitabı örneklerinden birinin basitleştirilmiş bir sürümüdür.

Sorun giderme

İşte bir sorun giderme ipucu.

Sohbet tamamlama uç noktasıyla ChatML söz dizimini veya özel belirteçleri kullanmayın

Bazı müşteriler, sohbet tamamlama uç noktaları ve daha yeni modellerle eski ChatML söz dizimini kullanmaya çalışır. ChatML, yalnızca sürüm 0301 modeliyle eski tamamlamalar uç noktasıyla gpt-35-turbo çalışan bir önizleme özelliğiydi. Bu model kullanımdan kaldırılıyor. ChatML söz dizimini daha yeni modellerle ve sohbet tamamlama uç noktasıyla kullanmayı denerseniz hatalara ve beklenmeyen model yanıt davranışına neden olabilir. Bu kullanımı önermiyoruz. Ortak özel belirteçler kullanılırken de aynı sorun oluşabilir.

Hata Kodu Hata İletisi Çözüm
400 400 - "Girişteki özel belirteçler nedeniyle çıkış oluşturulamadı." İsteminiz özel belirteçler veya model/uç nokta tarafından tanınmayan veya desteklenmeyen eski ChatML belirteçleri içeriyor. İstem/ileti dizinizin eski ChatML belirteci/özel belirteç içermediğinden emin olun. Eski bir modelden yükseltme yapıyorsanız, modele api isteği göndermeden önce tüm özel belirteçleri hariç tutun.

Model geçersiz Unicode çıkışı oluşturduğundan tamamlama oluşturulamadı

Hata Kodu Hata İletisi Geçici çözüm
500 500 - InternalServerError: Hata kodu: 500 - {'error': {'message': 'Model geçersiz Unicode çıktısı oluşturduğundan tamamlama oluşturulamadı}}. İstemlerinizin sıcaklığını 1'in altına düşürerek ve yeniden deneme mantığıyla istemci kullandığınızdan emin olarak bu hataların oluşmasını en aza indirebilirsiniz. İsteğin yeniden dağıtılması genellikle başarılı bir yanıta neden olur.

Sonraki adımlar