Mühendislik İşaretleri

Bu kılavuz, GPT-4 gibi büyük dil modellerinden (bazen GPT modelleri olarak da adlandırılır) daha iyi sonuçlar almak için stratejiler ve taktikler paylaşıyor. Burada anlatılan yöntemler bazen daha büyük bir etki için birleştirilerek uygulanabilir. Size en iyi sonuçları veren yöntemleri bulmak için deney yapmanızı teşvik ediyoruz.

Burada gösterilen bazı örnekler şu anda sadece en yetenekli modelimiz olan gpt-4 ile çalışmaktadır. Genel olarak, bir modelin bir görevi başaramadığını fark ederseniz ve daha yetenekli bir model mevcutsa, daha yetenekli modelle tekrar denemeniz sıklıkla işe yarar.

İpucu: Bu rehber, resmi OpenAI İpucu Mühendisliği Rehberi'nin çevirisidir. Bu rehber, ipucu kelimeleri yazmanın stratejilerini/taktiklerini ve LLM'ye istenen sonucu dönmesi için nasıl talimat verileceğini açıklar.

Daha İyi Sonuçlar Almak İçin Altı Strateji

Açık talimatlar yazın

Bu modeller sizin düşüncelerinizi okuyamaz. Eğer çıktılar çok uzunsa, kısa cevaplar isteyin. Eğer çıktılar çok basitseler, uzman seviyesi yazma isteyin. Eğer formattan hoşlanmıyorsanız, görmek istediğiniz formattaki örnekleri gösterin. Modelin isteğinizi ne olduğunu tahmin etmesi gerektiği kadar az olursa, istediğinizi alma olasılığınız o kadar artar.

Taktikler:

  • Daha ilgili cevaplar almak için sorgunuzda detayları ekleyin
  • Modelden belirli bir karakteri benimsemesini isteyin
  • Girdinin belirgin bir şekilde farklı parçalarını göstermek için ayraçlar kullanın
  • Bir görevi tamamlamak için gereken adımları belirtin
  • Örnekler verin
  • Çıktının istenen uzunluğunu belirtin

Referans metin sağlayın

Dil modelleri özellikle ender konular hakkında veya alıntılar ve URL'ler istendiğinde sahte cevaplar uydurabilir. Bir öğrencinin bir sınavda daha iyi performans göstermesine yardımcı olabileceği gibi, bu modellere referans metin sağlamak, daha az uydurma ile cevap vermede yardımcı olabilir.

Taktikler:

  • Modeli referans metin kullanarak cevap vermeye yönlendirin
  • Modeli bir referans metinden yapılan alıntılarla cevap vermeye yönlendirin

Karmaşık görevleri daha basit alt görevlere ayırın

Yazılım mühendisliğinde karmaşık bir sistemi modüler bileşenlere ayırmak iyi bir uygulama olduğu gibi, bir dil modeline gönderilen görevlerin de aynısı geçerlidir. Karmaşık görevler, basit görevlere göre daha yüksek hata oranlarına sahiptir. Ayrıca, karmaşık görevler genellikle önceki görevlerin çıktıları daha sonraki görevlerin girdilerini oluşturmak için kullanıldığı basit görevlerin bir iş akışı olarak yeniden tanımlanabilir.

Taktikler:

  • Kullanıcı sorgusu için en ilgili talimatları belirlemek için niyet sınıflandırma kullanın
  • Çok uzun konuşmalar gerektiren diyalog uygulamaları için önceki diyalogları özetleyin veya filtreleyin
  • Uzun belgeleri aşama aşama özetleyin ve tam bir özeti tekrarlayarak oluşturun

Modelin "düşünmesine" zaman tanıyın

Eğer 17 ile 28'i çarpmasını isterseniz, belki anında bilemeyebilirsiniz, ama yine de bir süre çalışarak çözebilirsiniz. Benzer şekilde, modeller doğru cevaplara ulaşmaya çalışırken hemen cevap vermeye çalışmak yerine bir süre düşünüp çalışarak daha az akıl yürütme hataları yaparlar. Modelin doğru cevaplara daha güvenilir bir şekilde ulaşmasına yardımcı olmak için cevaptan önce bir "düşünme zinciri" istemek, modelin yolunu doğru cevaplara daha güvenilir bir şekilde bulmasına yardımcı olabilir.

Taktikler:

  • Modelin doğru cevaplarına ulaşmadan önce kendi çözümünü bulmasını sağlamak için talimat verin
  • Modelin akıl yürütme sürecini gizlemek için içsel monolog veya bir dizi sorgu kullanın
  • Modelden önceki geçişlerde bir şey kaçırıp kaçırmadığını sorun

Harici araçları kullanın

Modelin zayıflıklarını diğer araçların çıktılarını besleyerek telafi edin. Örneğin, bir metin geri getirme sistemi (bazen RAG veya geri getirme artırılmış üretim olarak adlandırılır) modeli ilgili belgeler hakkında bilgilendirebilir. OpenAI'nın Kod Yorumlayıcı gibi bir kod yürütme motoru, modelin matematik yapmasına ve kod çalıştırmasına yardımcı olabilir. Bir dil modelinden ziyade bir araç tarafından daha güvenilir veya verimli bir şekilde yapılabilecek bir görev varsa, en iyisini almak için onu dışarıya aktarın.

Taktikler:

  • Verimli bilgi geri getirme uygulamak için gömme tabanlı arama kullanın
  • Daha doğru hesaplamalar yapmak veya harici API'leri çağırmak için kod yürütme kullanın
  • Modelin belirli fonksiyonlara erişimini sağlayın

Değişiklikleri sistemli bir şekilde test edin

Performansı iyileştirmek, onu ölçebiliyorsanız daha kolaydır. Bazı durumlarda bir ipucunun değiştirilmesi birkaç izole örnekte daha iyi performans elde etmeye yol açabilir, ancak daha temsilci bir örnek kümesinde genel performansı daha da kötüleştirebilir. Bu nedenle bir değişikliğin performans açısından net bir şekilde olumlu olup olmadığından emin olmak için kapsamlı bir test takımı (aynı zamanda bir "değerlendirme" olarak da bilinir) tanımlamak gerekli olabilir.

Taktik:

  • Referans altın standart cevaplarla model çıktılarını değerlendirin

Taktikler

Yukarıda listelenen her bir strateji belirli taktiklerle somutlaştırılabilir. Bu taktikler, denemek için fikirler sunmayı amaçlamaktadır. Bunlar kesinlikle tamamen kapsamlı değildir ve burada temsil edilmeyen yaratıcı fikirleri denemekte özgür hissetmelisiniz.

Prompt kelime örneği tanımı

Bilindiği üzere, OpenAI'yi çağıran Chat Model API'sinin üç mesaj türü vardır: SİSTEM, KULLANICI ve ASİSTAN, ve bu üç mesajın işlevleri aşağıdaki gibidir:

Mesaj türü (api'nin role parametresine karşılık gelir) Açıklama
SİSTEM Sistem mesajı, asistanın davranışını belirlemeye yardımcı olur. Örneğin, asistanın kişiliğini değiştirebilir veya konuşma boyunca nasıl davranması gerektiğine dair belirli talimatlar verebilirsiniz. Ancak sistem mesajının opsiyonel olduğunu ve sistem mesajı olmadan modelin davranışının genellikle "Yardımsever bir asistansınız." gibi genel bir mesaj kullanmakla benzer olacağını unutmayın.
KULLANICI Bir kullanıcı mesajı, kullanıcı girişi meselesidir.
ASİSTAN Yardımcı mesajlar, GPT'nin dönüşlerini temsil eder.

Bu kılavuzdaki prompt kelime örnekleri aşağıdaki formatta açıklanacaktır:

// SİSTEM Mesajı
Bu, SİSTEM Mesajı prompt kelimesini ayarlamanın nasıl olduğunu gösterir.

// KULLANICI Mesajı
Bu, KULLANICI Mesajı prompt kelimesini nasıl ayarlayacağınızı gösterir.

// ASİSTAN Mesajı
Bu, GPT'nin ne döndürebileceğini gösterir.

Strateji: Net talimatlar yazın

Taktik: Daha ilgili cevaplar almak için detayları dahil edin

Son derece ilgili bir yanıt almak için, isteklerin herhangi önemli detayları veya bağlamı sağladığından emin olun. Aksi halde modele ne demek istediğini tahmin etmek kalır.

Daha Kötü Daha İyi
Excel'de sayıları nasıl eklerim? Excel'de dolar miktarı olan bir satırın toplamını nasıl ekleyebilirim? Bu işlemi otomatik olarak tüm satırın üzerinde yapmak istiyorum ve tüm toplamların "Toplam" adında bir sütunda sağ tarafta bitmesini istiyorum.
Kim başkan? 2021'de Meksika'nın başkanı kimdi ve seçimler ne sıklıkla yapılıyor?
Fibonacci dizisini hesaplamak için kod yazın. Verimli bir şekilde Fibonacci dizisini hesaplamak için TypeScript fonksiyonu yazın. Her parçanın ne yaptığını ve neden o şekilde yazıldığını açıklamak için kodu bolca yorumlayın.
Toplantı notlarını özetleyin. Toplantı notlarını tek bir paragrafta özetleyin. Ardından konuşmacıların her birinin ana noktalarını içeren bir markdown listesi yazın. Son olarak, konuşmacılar tarafından önerilen bir sonraki adımları veya eylem öğelerini listeleyin, varsa.

Taktik: Modelin bir kişilik benimsemesini isteyin

Sistem mesajı, modelin yanıtlarında kullandığı kişiliği belirtmek için kullanılabilir.

// SİSTEM Mesajı
Bir şey yazmak için yardım istediğimde, her paragrafta en az bir şaka veya şakacı yorum içeren bir belgeyle cevap vereceksiniz.

// KULLANICI Mesajı
Çelik cıvata tedarikçime, teslimatı zamanında ve kısa sürede alabildiğim için teşekkür notu yazın. Bu, bize önemli bir siparişi teslim etmemizi sağladı.

Taktik: Farklı bölümleri net bir şekilde belirtmek için ayraçları kullanın

Üçlü tırnaklar, XML etiketleri, bölüm başlıkları vb. gibi ayraçlar, metin parçalarını farklı şekilde işleme koymak için yardımcı olabilir.

// KULLANICI Mesajı
Üçlü tırnaklarla sınırlanan metni bir haiku ile özetleyin.

"""buraya metin ekle"""
// SİSTEM Mesajı
Aynı konuyla ilgili iki makale sağlanacaksınız (XML etiketleriyle sınırlanmış). İlk olarak, her bir makalenin argümanlarını özetleyin. Daha sonra, hangisinin daha iyi bir argüman sunduğunu belirtin ve nedenini açıklayın.

// KULLANICI Mesajı
<article> buraya birinci makaleyi ekleyin </article>
<article> buraya ikinci makaleyi ekleyin </article>
// SİSTEM Mesajı
Size bir tez özeti ve önerilen bir başlık verilecek. Tez başlığı, okuyucuya tezin konusu hakkında iyi bir fikir vermelidir, ancak dikkat çekici olmalıdır. Başlık bu kriterleri karşılamıyorsa, 5 alternatif önerin.

// KULLANICI Mesajı
Özet: buraya özeti ekleyin

Başlık: buraya başlığı ekleyin

Bu tür basit görevler için ayraçlar kullanmak, çıktı kalitesinde fark yaratmayabilir. Ancak görev ne kadar karmaşıksa, görev ayrıntılarını belirsizleştirmekten daha önemlidir. Modelin tam olarak ne istediğinizi anlamasını sağlamak için çalışmasına neden olmayın.

Taktik: Bir görevi tamamlamak için gereken adımları belirleyin

Bazı görevler en iyi adım adım bir dizi olarak belirtilir. Adımları açıkça yazmak modelin bunları takip etmesini kolaylaştırabilir.

// SİSTEM Mesajı

Kullanıcı girdilerine yanıt vermek için aşağıdaki adım adım talimatları kullanın.

Adım 1 - Kullanıcı size üçlü tırnak içinde metin verecek. Bu metni "Özet: " öneki ile bir cümlede özetleyin.

Adım 2 - 1. Adımdaki özeti İspanyolca'ya çevirin, "Çeviri: " öneki ile.

// KULLANICI Mesajı
"""buraya metin ekleyin"""

Taktik: Örnekler sağlayın

Tüm örneklerin genel talimatlar sağlamak genellikle tüm görevin tüm olası durumlarını açıklamaktan daha etkilidir fakat bazı durumlarda örnekler vermek açıklaması zor olan belirli bir stilin kopyalanmasını modelden isteniyorsa daha kolay olabilir.

// SİSTEM Mesajı
Tutarlı bir stilde cevap verin.

// KULLANICI Mesajı
Bana sabır hakkında öğret.

// ASİSTAN Mesajı
En derin vadileri oymuş nehir, mütevazı bir kaynaktan geliyor; en muhteşem senfoni, tek bir notasından kaynaklanır; en karmaşık halı, yalnızca bir iplikle başlar.

// KULLANICI Mesajı
Bana okyanus hakkında öğret.

Taktik: Çıktının istenen uzunluğunu belirtin

Modelden belirli bir hedef uzunluğa sahip çıktılar üretmesini isteyebilirsiniz. Hedeflenen çıktı uzunluğu kelime, cümle, paragraf, madde sayısı vb. cinsinden belirtilebilir. Ancak modele belirli bir kelime sayısı üretmesini istemek yüksek hassasiyetle çalışmaz. Model, belirli bir paragraf veya madde sayısıyla daha güvenilir bir şekilde çıktı üretebilir.

// KULLANICI Mesajı

Üçlü tırnaklarla sınırlanan metni yaklaşık 50 kelimeyle özetleyin.

"""buraya metin ekleyin"""
// KULLANICI Mesajı

Üçlü tırnaklarla sınırlanan metni 2 paragrafta özetleyin.

"""buraya metin ekleyin"""
// KULLANICI Mesajı

Üçlü tırnaklarla sınırlanan metni 3 madde halinde özetleyin.

"""buraya metin ekleyin"""

Strateji: Referans metin sağlayın

Taktik: Modelin bir referans metni kullanarak yanıtlamasını isteyin

Modeli, mevcut soruyla ilgili güvenilir bilgilerle sağladığımızda, modelin yanıtını oluşturmak için sağlanan bilgileri kullanmasını isteyebiliriz.

// SİSTEM Mesajı
Sorulara cevap vermek için üçlü tırnaklarla sınırlanmış sağlanan makaleleri kullanın. Yanıt makalelerde bulunamıyorsa, "Cevap bulunamadı." yazın.

// KULLANICI Mesajı
<üçlü tırnaklarla sınırlanmış makaleleri buraya ekleyin>

Soru: <buraya soruyu ekleyin>

Mevcut modellerin sınırlı bağlam pencereleri olduğu göz önüne alındığında, sorulmakta olan soruyla ilgili dinamik olarak alakalı bilgileri aramak için bir yol bulmamız gerekiyor. Gömme işlemleri etkin bilgi alışverişi gerçekleştirmek için kullanılabilir. Bu konuyu uygulamak için ayrıntılı bilgi için "Verimli bilgi alışverişi için gömme tabanlı arama kullanın" taktiğine bakın.

Taktik: Modelin bir referans metni kullanarak alıntılar eklemesini isteyin

Eğer girdi ilgili bilgi ile güçlendirilmişse, modelden yanıtlarına sağlanan belgelerden alıntılar eklemesini istemek oldukça basittir. Alıntılar çıktıda, sağlanan belgeler içinde dize eşleme ile programatik olarak doğrulanabilir.

// SİSTEM Mesajı
Üçlü tırnaklarla sınırlanmış bir belge ve bir soruyla karşınıza çıkılacaktır. Göreviniz sadece sağlanan belgeyi kullanarak soruya cevap vermek ve kullanılan belgeden alıntı yapmaktır. Eğer belge cevabı sağlamıyorsa basitçe "Yetersiz bilgi." yazın. Sorunun cevabı veriliyorsa, ilgili geçiş(ler)i alıntılayın. Alakalı geçişleri alıntılamak için aşağıdaki formatı kullanın ({"alıntı": …}).

// KULLANICI Mesajı

"""<buraya belgeyi ekleyin>"""

Soru: <buraya soruyu ekleyin>

Taktik: Kullanıcı sorgusu için en uygun talimatları belirlemek için niyet sınıflandırma kullanın

Farklı durumları ele almak için çok sayıda bağımsız talimat setine ihtiyaç duyulan görevlerde, öncelikle sorgu türünü sınıflandırmak ve bu sınıflandırmayı kullanarak hangi talimatların gerekli olduğunu belirlemek faydalı olabilir. Bu, sabit kategorileri tanımlayarak ve bir verilen kategorideki görevleri ele almak için ilgili talimatları sert kodlayarak sağlanabilir. Bu işlem ayrıca bir görevi bir dizi aşamaya ayırmak için de tekrarlı olarak uygulanabilir. Bu yaklaşımın avantajı, her sorgunun, bir görevin bir sonraki aşamasını gerçekleştirmek için gereken talimatları içermesi nedeniyle, tek bir sorguyu kullanmaktan kaynaklanan hata oranlarına göre daha düşük olabilir. Bu ayrıca daha düşük maliyetlere yol açabilir çünkü daha büyük ipuçları çalıştırmak daha pahalıya mal olur.

Örneğin, bir müşteri hizmetleri uygulaması için sorgular aşağıdaki gibi yararlı bir şekilde sınıflandırılabilir:

// SİSTEM Mesajı
Size müşteri hizmetleri sorguları sağlanacaktır. Her sorguyu birincil bir kategori ve ikincil bir kategoriye sınıflandırın. Çıktınızı json formatında aşağıdaki anahtarlarla sağlayın: birincil ve ikincil.

Birincil kategoriler: Fatura, Teknik Destek, Hesap Yönetimi veya Genel Soruşturma.

Fatura ikincil kategorileri:
- Abonelikten ayrılma veya yükseltme
- Ödeme yöntemi ekle
- Faturaya ilişkin açıklama
- Faturayı tartış

Teknik Destek ikincil kategorileri:
- Sorun giderme
- Cihaz uyumluluğu
- Yazılım güncellemeleri

Hesap Yönetimi ikincil kategorileri:
- Şifre sıfırlama
- Kişisel bilgileri güncelle
- Hesabı kapat
- Hesap güvenliği

Genel Soruşturma ikincil kategorileri:
- Ürün bilgisi
- Fiyatlandırma
- Geri bildirim
- Bir insanla konuş

// KULLANICI Mesajı
İnternetimi tekrar çalıştırmam gerekiyor.

Müşteri sorgusunun sınıflandırılmasına göre, bir modelin ele almak için bir sonraki adımları işlemesi için daha spesifik talimatlar sağlanabilir. Örneğin, müşterinin "sorun giderme" ile yardıma ihtiyacı olduğunu varsayalım.

// SİSTEM Mesajı
Teknik destek bağlamında sorun giderme gerektiren müşteri hizmetleri soruları sağlanacaksınız. Kullanıcıya yardımcı olun:

- Tüm yönlendiriciden gelen çıkış ve giriş kablolarının bağlı olduğunu kontrol etmelerini isteyin. Kabloların zamanla gevşeme eğiliminde olduğunu unutmayın.
- Tüm kablolar bağlı ise ve sorun devam ediyorsa, hangi yönlendirici modelini kullandıklarını sormalarını isteyin
- Şimdi onlara cihazlarını nasıl yeniden başlatacaklarını tavsiye edin:
-- Eğer model numarası MTD-327J ise, kırmızı düğmeyi 5 saniye basılı tutmalarını ve ardından bağlantıyı test etmeden önce 5 dakika beklemelerini önerin.
-- Eğer model numarası MTD-327S ise, çıkartıp tekrar takmalarını ve ardından bağlantıyı test etmeden önce 5 dakika beklemelerini önerin.
- Cihazlarını yeniden başlattıktan ve 5 dakika bekledikten sonra müşterinin sorunu devam ederse, {"IT destek istendi"} şeklinde bir çıktı vererek onları BT desteğine bağlayın.
- Kullanıcı bu konuyla ilgili olmayan sorular sormaya başlarsa, mevcut sorunun sohbetini sonlandırmak isteyip istemediklerini onaylayın ve bu şeme göre taleplerini sınıflandırın:

<yukarıdaki birincil/ikincil sınıflandırma şemasını buraya ekleyin>

// KULLANICI Mesajı
İnternetimi tekrar çalıştırmam gerekiyor.

Modelin, konuşmanın durumunu değiştiğinde özel dizeleri yayınlaması talimatı verilmiştir. Bu, sistemimizi bir durum makinesine dönüştürmemizi sağlar, bu durum talimatların hangi durumda olduğunu ve o durumda hangi talimatların ilgili olduğunu takip ederek, isteğe bağlı olarak o durumdan hangi durum geçişlerinin izin verildiğini de gözetebiliriz ve ayrıca kullanıcı deneyiminin etrafına koruma barikatları koyabiliriz ki, bu daha az yapılandırılmış bir yaklaşımla zor olabilir.

Taktik: Uzun konuşmaları özetleyin veya filtreleyin

Bir kullanıcı ve asistan arasındaki diyalogun tamamının bağlam penceresine dahil edildiği bir konuşmanın, modellerin sabit bir bağlam uzunluğuna sahip olduğu ve sürekli olarak devam edemeyeceği bir durumda, farklı çalışma yöntemleri mevcuttur.

Bu sorunun bir çözümü, önceki dönemleri özetlemenin bir yolu olabilir. Girişin belirlenmiş bir eşiği aştığı zaman, bu önceki kısmı özetleyen bir sorguyu tetikleyebilir ve önceki konuşmanın özeti, sistem mesajının bir parçası olarak dahil edilebilir. Alternatif olarak, önceki konuşma, tüm konuşma boyunca arka planda asenkron olarak özetlenebilir.

Alternatif bir çözüm, geçerli sorgu için en uygun olan önceki konuşma parçalarını dinamik olarak seçmektir. Daha verimli bilgi almak için "Gömme tabanlı arama kullanarak verimli bir bilgi erişimi uygulamak" taktiğine bakınız.

Taktik: Uzun belgeleri aşamalı olarak özetleyin ve tam özeti rekürsif olarak oluşturun

Modellerin sabit bir bağlam uzunluğu olduğu için, bir metin özetinden daha kısa bir bağlam uzunluğu eksiği olan uzun bir metni tek bir sorguda özetlemek için kullanılamazlar.

Bir kitap gibi çok uzun bir belgeyi özetlemek için belgenin her bölümünü özetlemek için bir dizi sorgu kullanabiliriz. Bölüm özetleri birleştirilerek özetler üretilebilir. Bu süreç rekürsif olarak devam ederek bir belgenin tamamı özetlenebilir. Eğer daha sonraki bölümlerin anlamını kavramak için daha önceki bölümlerle ilgili bilgi kullanmak gerekiyorsa, o zaman bir başka yararlı bir hile de belirli bir noktadaki içeriği özetlerken, o noktaya kadar metnin bir koşulu dahil etmek olabilir. Kitapları özetlemek için bu prosedürün etkinliği daha önceki OpenAI araştırmasında incelenmiştir ve GPT-3'ün değişkenleri kullanılarak incelenmiştir.

Strateji: Modellere "düşünme" süresi verin

Taktik: Modeli kendi çözümünü bulmaya teşvik edin

Bazı durumlarda, modeli bir sonuca varmadan önce ilkelerden hareketle düşünmeye yönlendirdiğimizde daha iyi sonuçlar elde edebiliriz. Örneğin, bir modelin bir öğrencinin bir matematik problemine olan çözümünü değerlendirmesini istiyoruz. Bu durumu ele almanın en açık yolu, modelden sadece öğrencinin çözümünün doğru olup olmadığını sormaktır.

// SİSTEM Mesajı
Öğrencinin çözümünün doğru olup olmadığını belirleyin.

// KULLANICI Mesajı
Problem Tanımı: Güneş enerjisi kurulumu yapıyorum ve maliyetleri hesaplamak konusunda yardıma ihtiyacım var.
- Arazi maliyeti: 100 $ / metrekare 
- Güneş panelleri için maliyet: 250 $ / metrekare
- Bakım için yıllık 100.000 $ sabit ve ek olarak metrekare başına 10 $ maliyetle anlaşma yaptım.
Kare metre cinsinden işletme için ilk yıl toplam maliyet nedir.

Öğrencinin Çözümü: x, kurulumun büyüklüğü (metrekare cinsinden) olsun.
1. Arazi maliyeti: 100x
2. Güneş paneli maliyeti: 250x
3. Bakım maliyeti: 100.000 + 100x
Toplam maliyet: 100x + 250x + 100.000 + 100x = 450x + 100.000

// ASİSTAN Mesajı
Öğrencinin çözümü doğrudur.

Fakat öğrencinin çözümü aslında doğru değil! Modelin kendi çözümünü başarılı bir şekilde üretmesi için modeli öğrencinin çözümünü karşılaştırmadan önce kendi çözümünü üretmeye teşvik edebiliriz.

// SİSTEM Mesajı
Önce problemi kendi çözümünüzle çalıştırın. Sonra kendi çözümünüzü öğrencinin çözümüyle karşılaştırın ve öğrencinin çözümünün doğru olup olmadığını değerlendirin. Öğrencinin çözümünün doğru olup olmadığına karar vermeyin, problemi kendiniz çözene kadar.

// KULLANICI Mesajı
Problem Tanımı: Güneş enerjisi kurulumu yapıyorum ve maliyetleri hesaplamak konusunda yardıma ihtiyacım var.
- Arazi maliyeti: 100 $ / metrekare 
- Güneş panelleri için maliyet: 250 $ / metrekare
- Bakım için yıllık 100.000 $ sabit ve ek olarak metrekare başına 10 $ maliyetle anlaşma yaptım.

Öğrencinin Çözümü: x, kurulumun büyüklüğü (metrekare cinsinden) olsun.
1. Arazi maliyeti: 100x
2. Güneş paneli maliyeti: 250x
3. Bakım maliyeti: 100.000 + 100x
Toplam maliyet: 100x + 250x + 100.000 + 100x = 450x + 100.000

// ASİSTAN Mesajı
x, kurulumun büyüklüğü (metrekare cinsinden) olsun.
1. Arazi maliyeti: 100x
2. Güneş paneli maliyeti: 250x
3. Bakım maliyeti: 100.000 + 10x
Toplam maliyet: 100x + 250x + 100.000 + 10x = 360x + 100.000

Öğrencinin çözümü yanlıştır. Bakım maliyeti hesaplamasında hata yapmışlar, 100x yerine 10x kullanmışlar. İlk yıl işletme toplam maliyeti doğru cevap 360x + 100.000'dir.

Taktik: Zihin İçi Konuşma veya Sorgu Dizisi Kullanarak Modelin Akıl Yürütme Sürecini Gizlemek

Önceki taktik, modelin belirli bir soruya cevap vermeden önce bir problem hakkında ayrıntılı bir şekilde düşünmesinin bazen önemli olduğunu göstermektedir. Bazı uygulamalarda bir modelin nihai bir cevaba ulaşmak için kullandığı akıl yürütme sürecini kullanıcıyla paylaşmak uygun olmayabilir. Örneğin, öğretim uygulamalarında öğrencilerin kendi cevaplarını bulmalarını teşvik etmek isteyebiliriz, ancak bir modelin öğrencinin çözümü hakkındaki akıl yürütme süreci öğrenciye cevabı ifşa edebilir.

Zihin içi konuşma, bunu hafifletmek için kullanılabilecek bir taktiktir. Zihin içi konuşma fikri, modelin kullanıcıdan gizlenmesi amaçlanan çıktılarının, onları kolayca ayrıştırılabilir hale getiren yapılandırılmış bir formata konulmasını istemektir. Daha sonra çıktıyı kullanıcıya sunmadan önce çıktı ayrıştırılır ve yalnızca bir kısmı görünür hale getirilir.

// SİSTEM Mesajı
Kullanıcı sorgularına cevap vermek için bu adımları izleyin.

Adım 1 - İlk olarak, problem için kendi çözümünüzü bulun. Öğrencinin çözümüne güvenmeyin çünkü yanlış olabilir. Bu adım için tüm çalışmanızı üçlü tırnaklar içine alın (""").

Adım 2 - Çözümünüzü öğrencinin çözümüyle karşılaştırın ve öğrencinin çözümünün doğru olup olmadığını değerlendirin. Bu adım için tüm çalışmanızı üçlü tırnaklar içine alın (""").

Adım 3 - Eğer öğrenci hatayla birşeyler yapmışsa, cevabı öğrenciye vermeden hangi ipucunu verebileceğinizi belirleyin. Bu adım için tüm çalışmanızı üçlü tırnaklar içine alın (""").

Adım 4 - Eğer öğrenci hata yapmışsa, önceki adımda belirlediğiniz ipucunu öğrenciye verin (üçlü tırnakların dışında). "Adım 4 - ..." yazmak yerine "İpucu:" yazın.

// KULLANICI Mesajı
Problem Tanımı: <problem tanımını ekleyin>

Öğrenci Çözümü: <öğrenci çözümünü ekleyin>

Alternatif olarak, bu, tümünden yalnızca en sonuncusunun kullanıcıdan gizlendiği bir sorgu dizisi kullanılarak da elde edilebilir.

İlk olarak, modelin kendi başına problemi çözmesini isteyebiliriz. Bu ilk sorgu öğrencinin çözümünü gerektirmediği için atlanabilir. Bu sağladığı ek avantajla birlikte ki, modelin çözümü öğrencinin denemesiyle yanıltılmamış olacaktır.

// KULLANICI Mesajı
<problem tanımını ekleyin>

Sonra, modelin öğrencinin çözümünün doğruluğunu değerlendirmek için mevcut tüm bilgileri kullanmasını isteyebiliriz.

// SİSTEM Mesajı
Çözümünüzü öğrencinin çözümüyle karşılaştırın ve öğrencinin çözümünün doğru olup olmadığını değerlendirin.

// KULLANICI Mesajı
Problem tanımı: """<problem tanımını ekleyin>"""

Çözümünüz: """<model tarafından oluşturulan çözümü ekleyin>"""

Öğrencinin çözümü: """<öğrencinin çözümünü ekleyin>"""

Son olarak, modelin kendi analizini kullanarak yardımcı bir öğretmen kişiliğinde bir yanıt oluşturmasına izin verebiliriz.

// SİSTEM Mesajı

Sen bir matematik öğretmenisin. Eğer öğrenci bir hata yaptıysa, cevabı ifşa etmeden öğrenciye ipucu verin. Eğer öğrenci bir hata yapmadıysa, sadece onlara cesaret veren bir yorum yapın.

// KULLANICI Mesajı

Problem tanımı: """<problem tanımını ekleyin>"""

Çözümünüz: """<model tarafından oluşturulan çözümü ekleyin>"""

Öğrencinin çözümü: """<öğrencinin çözümünü ekleyin>"""

Analiz: """<önceki adımdan model tarafından oluşturulan analizi ekleyin>"""

Taktik: Modelin önceki adımlarda kaçırdığı herhangi bir şey olup olmadığını sormak

Diyelim ki bir modeli, belirli bir soruyla ilgili olan belgelerden alıntıları listelemek için kullanıyoruz. Her alıntı listeleme işlemi sonrasında modelin başka bir alıntı yazmaya devam edip etmemesi veya durması gerektiğini belirlemesi gerekir. Eğer kaynak belge büyükse, modelin erken durup tüm ilgili alıntıları listeleyememesi yaygındır. Bu durumda, modelin önceki geçişlerde kaçırdığı herhangi bir alıntıyı bulmak için takip sorgularıyla modeli teşvik etmek genellikle daha iyi performans elde etmek için kullanılır.

// SİSTEM Mesajı
Belirli bir soruyla ilgili olan belge üçlü tırnaklar ile sınırlandırılmış olarak size sağlanacak. Göreviniz, bu soruyla ilgili olan alıntıları seçmektir: "Yapay zeka tarihinde hangi önemli paradigmalar değişiklikleri meydana gelmiştir."

Alıntıların yorumlanması için gereken tüm ilgili bağlamı içeren alıntılar sağlayın - diğer bir deyişle, önemli bağlamı eksik olan küçük parçalar çıkarmayın. Aşağıdaki JSON formatında çıktı sağlayın:

[{"alıntı": "..."},
...
{"alıntı": "..."}]

// KULLANICI Mesajı
"""<buraya belgeyi ekleyin>"""

// ASİSTAN Mesajı
[{"alıntı": "model burada bir alıntı yazıyor"},
...
{"alıntı": "model burada başka bir alıntı yazıyor"}]

// KULLANICI Mesajı
Daha fazla ilgili alıntı var mı? Alıntıları tekrarlamamaya dikkat edin. Ayrıca alıntıların yorumlanması için gerekli tüm ilgili bağlamı içerdiğinden emin olun.

Strateji: Harici araçlar kullanma

Taktik: Gömülere dayalı arama kullanarak etkili bilgi getirme uygulama

Bir model, girdi olarak sunulan harici kaynaklardan bilgi sağlayabilir. Bu, modelin daha bilgili ve güncel yanıtlar üretmesine yardımcı olabilir. Örneğin, bir kullanıcı belirli bir film hakkında bir soru sorduğunda, filmin yüksek kaliteli bilgilerini (örneğin oyuncular, yönetmen vb…) modele girdi olarak eklemek faydalı olabilir. Gömülüler kullanılarak etkili bilgi getirme uygulamak için, ilgili bilgileri model girdisine dinamik olarak eklemek için kullanılabilir.

Metin gömme, metin kümeleri arasındaki ilişkiyi ölçebilen bir vektördür. Benzer veya ilgili metinler, ilişkili olmayan metinlerden daha yakındır. Bu gerçek, hızlı vektör arama algoritmalarının varlığıyla beraber, gömülülerin etkili bilgi getirme uygulamak için kullanılabileceği anlamına gelir. Özellikle, bir metin kütüphanesi parçalara ayrılabilir, her bir parça gömülüp depolanabilir. Ardından verilen bir sorgu gömülebilir ve sorgunun en yakın ilişkili (yani gömme uzayında birbirine en yakın) metin parçalarını bulmak için vektör araması yapılabilir.

Taktik: Daha doğru hesaplamalar yapmak veya harici API'ları çağırmak için kodu yürütmek

Dil modellerine, aritmetik hesaplamaları veya uzun hesaplamaları kendi başlarına doğru bir şekilde gerçekleştirmek için güven oluşturulamaz. Böyle durumlarda, bir model, kendi hesaplamalarını yapmak yerine kod yazıp çalıştırmak için talimatlandırılabilir. Özellikle, bir modelin çalıştırılması gereken kodu belirli bir formata (örneğin üçlü ters tırnak) koyması için talimatlandırılabilir. Bir çıktı üretildikten sonra, kod çıkarılabilir ve çalıştırılabilir. Son olarak, gerektiğinde, kodun çıktısı (yani Python yorumlayıcısı) bir sonraki sorgu için modele girdi olarak sağlanabilir.

// SİSTEM Mesajı

Üçlü ters tırnak içine Python kodu yazıp çalıştırabilirsiniz, örn. ```kod buraya yazılır```. Bunun için hesaplamaları yapmak için kullanabilirsiniz.

// KULLANICI Mesajı

Aşağıdaki polinomun tüm gerçel köklerini bulun: 3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

Bir diğer iyi kullanım durumu kodu yürütmek, harici API'ları çağırmaktır. Bir model, API'yi kullanmanın doğru kullanımı konusunda talimatlandırılırsa, API'yi kullanacak kodu yazabilir. API'yi nasıl kullanacağını öğretmek için, modelin belgelendirme ve/veya API'yi nasıl kullanacağını gösteren kod örnekleri sağlamak yeterlidir.

// SİSTEM Mesajı

Üçlü ters tırnak içine Python kodu yazıp çalıştırabilirsiniz. Ayrıca, kullanıcıların arkadaşlarına mesaj göndermelerine yardımcı olacak aşağıdaki modüle erişiminiz olduğunu unutmayın:

\`\`\`python
import message
message.write(to="John", message="Hey, iş çıkışı buluşmak ister misin?")\`\`\`

UYARI: Bir model tarafından üretilen kodu çalıştırmak her zaman güvenli değildir ve bu amaçla alınması gereken tedbirler bulunmaktadır. Özellikle, güvensiz kodun neden olabileceği zararı sınırlamak için kum havuzlu bir kod yürütme ortamına ihtiyaç vardır.

Taktik: Modelin belirli fonksiyonlara erişmesi

Sohbet Tamamlama API'si, isteklerde bir liste halinde fonksiyon açıklamaları geçirilmesine izin verir. Bu, modellerin sağlanan şemalara göre fonksiyon argümanları üretmesine olanak tanır. Üretilen fonksiyon argümanları API tarafından JSON formatında döndürülür ve fonksiyon çağrılarını yapmak için kullanılabilir. Fonksiyon çağrılarından sağlanan çıktılar, döngüyü kapatmak için bir sonraki istekte modele geri beslenebilir. Bu, harici fonksiyonları çağırmak için OpenAI modellerini kullanmanın tavsiye edilen yoludur.

Strateji: Değişiklikleri Sistematik Bir Şekilde Test Etme

Bazen bir değişikliğin - örneğin yeni bir talimatın veya yeni bir tasarımın - sisteminizi daha iyi mi yoksa daha kötü mü yaptığını anlamak zor olabilir. Birkaç örnek incelemek belki hangisinin daha iyi olduğunu ima edebilir, ancak küçük örneklem boyutları ile gerçek gelişme ile rastgele şansa arasındaki farkı ayırt etmek zor olabilir. Belki de değişiklik bazı girdilerde performansı artırırken, diğerlerinde performansı düşürebilir.

Değerlendirme prosedürleri (veya "değerlendirmeler"), sistem tasarımlarını optimize etmek için yararlıdır. İyi değerlendirmeler şunlardır:

  • Gerçek dünya kullanımını temsil eder (veya en azından çeşitlidir)
  • Daha büyük istatistiksel güç için birçok test durumu içerir (tavsiyeler için tabloya bakınız)
  • Otomatikleştirilmesi veya tekrarlanması kolaydır
Algılanması gereken fark %95 güven düzeyi için gereken örneklem boyutu
30% ~10
10% ~100
3% ~1,000
1% ~10,000

Çıktıların değerlendirilmesi, bilgisayarlar, insanlar veya bir karışım tarafından yapılabilir. Bilgisayarlar, objektif kriterlerle (örneğin, tek doğru cevapları olan sorular) ve bazı subjektif veya belirsiz kriterlerle otomatik değerlendirmeleri yapabilir. Model çıktıları başka model sorguları tarafından değerlendirilir. OpenAI Evals, otomatik değerlendirmeler oluşturmak için araçlar sağlayan açık kaynaklı bir yazılım çerçevesidir.

Model tabanlı değerlendirmeler, bir modelin çıktısı için eşit kalitede kabul edilebilecek olası bir çeşitlilik olduğunda (örneğin, uzun cevaplara sahip sorular için) kullanışlı olabilir. Bir model tabanlı değerlendirme ile gerçekçi bir şekilde neyin değerlendirilebileceği ile insanın değerlendirmesi gereken noktaların sınırı belirsizdir ve modeller daha yetenekli hale geldikçe sürekli değişmektedir. Model tabanlı değerlendirmelerin işe yarayıp yaramadığını anlamak için deney yapmanızı teşvik ediyoruz.

Taktik: Altın standart cevaplara göre model çıktısını değerlendirme

Bir sorunun doğru cevabının belirli bir bilgi setine referans vermesi gerektiği biliniyorsa, o zaman model sorgusunu kullanarak gereken bilgilerin cevapta kaçının bulunduğunu sayabiliriz.

Örneğin, aşağıdaki sistem mesajını kullanarak:

// SİSTEM Mesajı
Üç tırnakla sınırlandırılmış metinlerle (""" """) verilen cevabın, aşağıdaki bilgilerden hangilerini doğrudan içerdiğini kontrol edin:

- Neil Armstrong, ayda yürüyen ilk kişiydi.
- Neil Armstrong'un ayda yürüme tarihi 21 Temmuz 1969'dur.

Her biri için aşağıdaki adımları uygulayın:

1 - Bilgiyi yeniden ifade edin.
2 - Bu bilgeye en yakın olan cevap içinde hangi kaynağı sağladığınızı belirtin.
3 - Konuyu bilmeyen birinin, kaynağı okuyarak bu bilgiye doğrudan varıp varamayacağını düşünün. Neden varıp varamayacağını açıklayın.
4 - 3. adımın cevabına "evet" yazın eğer cevap evetse, aksi halde "hayır" yazın.

Son olarak, kaç tane "evet" cevabı olduğunu sayarak bir sayı olarak {"count": <buraya ekle>} olarak sağlayın.

İşte her iki bilgiyi de karşılayan bir örnek girdi:

// SİSTEM Mesajı
<Yukarıdaki sistem mesajı ekle>

// KULLANICI Mesajı
"""Neil Armstrong, ayda yürüyen ilk insan olmasıyla ünlüdür. Bu tarihi olay, Apollo 11 görevi sırasında 21 Temmuz 1969 tarihinde gerçekleşmiştir."""

Yalnızca bir bilgiyi karşılayan bir örnek girdi:

// SİSTEM Mesajı

<Yukarıdaki sistem mesajı ekle>

// KULLANICI Mesajı

"""Neil Armstrong, uzay aracından adımını attığında tarihe geçerek ayda yürüyen ilk insan olmuştur."""

Hiçbirini karşılamayan bir örnek girdi:

// SİSTEM Mesajı

<Yukarıdaki sistem mesajı ekle>

// KULLANICI Mesajı

"""69 yazında, muhteşem bir sefer,
Apollo 11, efsanenin cesur elleri.
Armstrong bir adım attı, tarih açıldı,
"Küçük bir adım," dedi, yeni bir dünya için."""

Bu tür model tabanlı değerlendirme için pek çok olası varyant bulunmaktadır. Aşağıdaki değişiklik, aday cevap ile altın standart cevap arasındaki türden örtüşmeyi takip eder ve ayrıca aday cevabın altın standart cevabın herhangi bir bölümüne aykırı olup olmadığını izler.

// SİSTEM Mesajı
Kullanıcı girdilerine yanıt vermek için aşağıdaki adımları kullanın. Her adımı devam etmeden önce tam olarak düz bir şekilde yeniden ifade edin. yani "Adım 1: Neden...".

Adım 1: Gönderilen cevaptaki bilginin uzman cevabına göre ya: ayrık, eşit, bir alt küme, bir üst küme veya örtüşen olduğunu adım adım düşünün.

Adım 2: Gönderilen cevabın uzman cevabının herhangi bir yönüne aykırı olup olmadığını adım adım düşünün.

Adım 3: {"type_of_overlap": "ayrık" veya "eşit" veya "bir alt küme" veya "bir üst küme" veya "örtüşen", "contradiction": true veya false} yapılandırmasına sahip olan bir JSON nesnesi üretin.

Açıklanan uzman cevabıyla çelişmeyen yetersiz bir cevapla ilgili bir örnek girdi:

// SİSTEM Mesajı

<Yukarıdaki sistem mesajı ekle>

// KULLANICI Mesajı

Soru: """Neil Armstrong en çok hangi olayla tanınır ve bu olay ne zaman gerçekleşmiştir? UTC zamanını varsayalım. """

Gönderilen Cevap: """Sanırım ayda yürüdü veya bir şey mi yaptı?"""

Uzman Cevabı: """Neil Armstrong, ayda yürüyen ilk kişi olmasıyla en çok tanınır. Bu tarihi olay, 21 Temmuz 1969 tarihinde gerçekleşmiştir."""

Uzman cevabıyla doğrudan çelişen bir cevapla ilgili bir örnek girdi:

// SİSTEM Mesajı

<Yukarıdaki sistem mesajı ekle>

// KULLANICI Mesajı
Soru: """Neil Armstrong en çok hangi olayla tanınır ve bu olay ne zaman gerçekleşmiştir? UTC zamanını varsayalım. """

Gönderilen Cevap: """21 Temmuz 1969'da, Neil Armstrong, Buzz Aldrin'den sonra aya yürüyen ikinci kişi oldu."""

Uzman Cevabı: """Neil Armstrong, ayda yürüyen ilk kişi olmasıyla en çok tanınır. Bu tarihi olay, 21 Temmuz 1969 tarihinde gerçekleşmiştir."""

Gerekenden biraz daha fazla ayrıntı sağlayan doğru bir cevapla ilgili bir örnek girdi:

// SİSTEM Mesajı
<yukarıya sistem mesajı ekle>

// KULLANICI Mesajı

Soru: """Neil Armstrong'un en ünlü olduğu olay nedir ve ne zaman gerçekleşti? UTC zaman dilimi varsayılsın."""

Gönderilen Cevap: """Yaklaşık olarak 21 Temmuz 1969'da 02:56 UTC'de, Neil Armstrong ay yüzeyine ilk adımını atarak insanlık tarihinde önemli bir başarıya imza attı."""

Uzman Cevabı: """Neil Armstrong, ay yüzeyinde yürüyen ilk insan olması ile en ünlüdür. Bu tarihi olay 21 Temmuz 1969'da gerçekleşmiştir."""