GitHub Copilot 101Orta seviye15 dk

Kod İçin Prompting: Kalıplar ve Uygulamalar

Kod prompt'unu test edilebilir bir şartnameye dönüştürün. Hedefi, bağlamı, kaynakları ve beklentileri yazmayı, öncelik kurallarını few-shot örneklerle netleştirmeyi ve Cookbook döngüsünü doğrulamayla tamamlamayı öğrenin.


Bu derste neler öğreneceksiniz?

  • Bir kod prompt'unu test edilebilir şartname olarak hazırlayın
  • Zero-shot ve few-shot prompting arasından uygun olanı seçin
  • Birbiriyle etkileşen kuralları ve önceliği few-shot örnekle açıklığa kavuşturun
  • Gerçek bir görevde Seç, Kapsamla, Prompt Yaz, İncele, İyileştir ve Doğrula döngüsünü uygulayın
Bu sayfada

"Bu fonksiyona doğrulama ekle" önemli kararları açıkta bırakır. Geçerli, geçersiz ve sınır girdilerini tanımlayan bir istek Copilot'un tahmin alanını daraltır, size de somut inceleme ölçütleri verir. Kod işi için prompt, sonucu değerlendireceğiniz şartnamedir.

Kod prompt'u bir şartnamedir

Günlük prompt'larda kullandığınız hedef, bağlam, kaynak ve beklenti yapısı kod görevlerinde de geçerlidir. Yazmaya başlamadan önce şu dört soruyu yanıtlayın:

  1. Hedef: Hangi davranış değişmelidir?
  2. Bağlam: Uygulama hangi kısıtları korumalıdır ve değişiklik neden gereklidir?
  3. Kaynak: Doğru davranışı hangi dosyalar tanımlar ve her dosya hangi konuda belirleyicidir?
  4. Beklenti: Nasıl bir çıktı istiyorsunuz ve doğruluğu hangi kanıtla gösterilecektir?

Hedef prompt'u uzatmak değil, yanlış uygulamaya yol açan varsayımları kaldırmaktır. "parseConfig'e doğrulama ekle" demek yerine fonksiyonun kullanıcı tarafından düzenlenebilen bir yapılandırma dosyasını okuduğunu ve geçersiz verinin çağıranın işleyebileceği bir hata üretmesi gerektiğini yazın. src/config.ts uygulamayı, test/config.test.ts beklenen davranışı tanımlasın. Copilot'tan önce doğrulama kurallarını listelemesini ve public imzayı korumasını isteyin. Böylece hem değişikliğin sınırı hem de incelemede kullanacağınız kanıt belli olur.

Kaynak gösterirken dosyanın neden belirleyici olduğunu da açıklayın. Dosya mevcut uygulamayı, public türü veya beklenen davranışı tanımlıyor olabilir. Bir dosyanın açık olması tek başına onu doğruluk kaynağı yapmaz.

Dört öğeyi de içeren bir kod prompt'u· github-copilot
Zayıf örnek

parseConfig'e doğrulama ekle ve testleri güncelle. Kod temiz olsun.

İyi örnek

Hedef: parseConfig'e doğrulama ekle. Bağlam: kullanıcı tarafından düzenlenebilen bir yapılandırma dosyası okuyor. Bu nedenle geçersiz veri, çağıran kodun işleyebileceği bir hata üretmeli. Public imzayı koru. Kaynak: uygulama için src/config.ts, public tür için src/types.ts ve davranış otoritesi olarak test/config.test.ts kullan. Beklentiler: önce doğrulama kurallarını listele, sonra en küçük değişikliği ve eksik testleri öner. Diff'i göster.

Bu prompt neden daha iyi? Adı verilen dosyalarla sınırlı bir kurallar listesi, küçük bir uygulama ve odaklı testler elde edersiniz. Public imza korunur ve diff kolayca incelenebilir.

Ne zaman zero-shot, ne zaman few-shot?

Zero-shot prompt, tamamlanmış bir örnek vermeden sonuç ister. Gereksinimler açık ve davranış alışılmış olduğunda iyi bir başlangıçtır. Örneğin normalizeEmail fonksiyonunun baştaki ve sondaki boşlukları temizlemesini, metni küçük harfe çevirmesini, boş sonucu reddetmesini ve imzayı korumasını açıkça belirtebilirsiniz. Zero-shot yaklaşım aynı zamanda şartnamenizi sınar. Yanıt yazmadığınız bir varsayımı ortaya çıkarırsa şartnamenizdeki eksik noktayı bulmuş olursunuz.

Few-shot prompt, bir veya daha fazla girdi ve çıktı örneği içerir. Kurallar birbiriyle etkileşiyorsa, öncelik sırası önemliyse, çıktı biçimi alışılmadıksa veya mevcut örnekler açıklamadan daha belirleyiciyse few-shot kullanın. Örnekler, iki koşul aynı anda doğru olduğunda beklenen kesin sonucu gösterebilir. Verdiğiniz örneklerin birbiriyle uyumlu olması gerekir. Çelişkili davranışlar gösteriyorlarsa kod istemeden önce bu çelişkiyi çözün. Aksi halde Copilot'a hangi kuralı uygulayacağını söylememiş olursunuz.

Pek çok makul görünen uygulama burada hata yapar. Yapı düzgün görünür, iş kuralı yanlıştır. Belirleyici bir örnek, düz yazının açıkta bıraktığı sonucu görünür hale getirir.

Öncelik sırasını few-shot örnekle açıklayın· github-copilot
Zayıf örnek

discountCents fonksiyonunu üyeler doğru indirimi alacak ve indirimler birikmeyecek şekilde düzelt.

İyi örnek

discountCents fonksiyonunu şu belirleyici örneklere göre düzelt. Girdi { subtotalCents: 10000, isMember: true, itemCount: 2 } → 1500. Girdi { subtotalCents: 10000, isMember: false, itemCount: 10 } → 1000. Girdi { subtotalCents: 10000, isMember: true, itemCount: 10 } → 1500. Üçüncü örnek, üye ve toplu alım indirimlerinin birlikte uygulanmadığını ve üye kuralının öncelikli olduğunu gösterir. Türü koru ve yalnızca kural seçme mantığını değiştir.

Bu prompt neden daha iyi? Üye kuralının öncelikli olduğu ve indirimlerin birlikte uygulanmadığı bir uygulama elde edersiniz. Üçüncü örnek belirsiz ifadeyi kontrol edilebilir bir sonuca dönüştürür.

Her kaynağın neden belirleyici olduğunu yazın

"src/config.ts kullan" ifadesi yalnızca dosyayı belirtir. Dosyanın mevcut uygulamayı, public türü, hata kuralını veya beklenen davranışı mı tanımladığını da yazın. Kaynağın rolünü açıklamak, çelişki olduğunda Copilot'un hangi bilgiyi esas alacağını gösterir.

Yanlış uygulanan bir kuralı kanıtla düzeltin

Bir indirim hesabı istediğinizi düşünün. Üyeler %15 indirim alıyor. Üye olmayan müşteriler 10+ ürün aldığında %10 indirim kazanıyor. İndirimler birlikte uygulanmıyor ve üyelik kuralı öncelikli. Copilot ise büyük sipariş veren bir üye için iki indirimi birden uygulayıp 1.500 yerine 2.500 cent döndürüyor. İlk tepkiniz kodu elle düzenlemek olabilir. Önce şartnameyi düzeltin. Belirsiz kalan şartname, kodu kaç kez değiştirirseniz değiştirin aynı tür hatayı yeniden üretebilir.

Şu belirleyici örneği ekleyin: { subtotalCents: 10000, isMember: true, itemCount: 10 } → 1500. Bu girdide iki koşul da doğrudur, dolayısıyla sonuç öncelik kuralını görünür hale getirir. Copilot'a üyelik kuralının önce geldiğini söyleyin ve yalnızca kural seçme mantığını değiştirmesini isteyin. Sonra yalnızca üye, yalnızca toplu alım, iki koşulun birlikte olduğu ve hiçbir koşulun sağlanmadığı durumları çalıştırın. Odaklı takip, doğru kalan parçaları koruyup yalnızca hatalı kuralı düzeltmenizi sağlar.

Sözleşmenizi uyguluyor gibi görünen ayrıştırma kısayollarına da dikkat edin. Bir port ayrıştırıcısında kullanılan basit bir parseInt, "12px" veya "1e3" girdisini kabul edebilir. Bu kod normal bir örneği geçse bile şartnameyi ihlal eder. Doğrulamanın chat dışında yapılmasının nedeni budur. Uygulamayı okuyun, her dalı bir gereksinimle eşleştirin ve "80px", "1e3", " 3000 " gibi zor girdileri çalıştırın. Sonuçları beklenen değerler tablosuyla karşılaştırın. Okunaklı görünen kod henüz doğrulanmış değildir.

Chat geçmişi, değişen kuralı açıkça yazdığınızda düzeltmeyi kısaltabilir. "Uygulamayı koru. Üye ve toplu alım indirimlerini birlikte uygulama. Önce üye kuralını değerlendir. Public API'yi ve diğer tüm davranışları koru." isteği, doğru olan parçaları yeniden kullanır. Ancak eski bir kuralın konuşma geçmişinde kalabileceğini unutmayın. Gereksinim değiştiğinde yeni kuralı ve hâlâ geçerli olan kısıtları birlikte yazın. Prompt ile testler çelişiyorsa kararı Copilot'a bırakmayın. Kod değişmeden önce tam girdiyi ve iki farklı beklenen sonucu göstermesini isteyin, ardından hangi kaynağın belirleyici olduğuna siz karar verin.

Cookbook döngüsünü tekrarlanabilir hale getirin

GitHub Copilot Cookbook, geçersiz JSON hatasını ayıklama, test üretme, okunabilirlik için refactor yapma ve eski kodu belgeleme gibi görevler için uygulamalar sunar. Tek tek tariflerden çok, hepsinin altında çalışan döngü işe yarar. Her görevi altı aşamadan geçirin:

İhtiyacınız olan çıktıya uygun uygulamayı Seçin. Görevi belirli dosya, issue, hata günlüğü veya testle Kapsamlayın ve değişmemesi gereken noktaları yazın. Hedef, bağlam, kaynak ve beklentileri içeren bir Prompt Yazın. Yanıtı, kaynakların desteklemediği varsayımlar açısından İnceleyin ve adı geçen dosya ile sembollerin varlığını kontrol edin. Her turda tek bir sorunu İyileştirin. Hata sözleşmesini netleştirin, eksik durumu ekleyin veya diff'i daraltın. Sonucu uygun kanıtla Doğrulayın. Testi çalıştırın, diff'i inceleyin veya kod dışı çıktıyı kaynağıyla karşılaştırın.

İki alışkanlık bu döngüyü güvenilir kılar. Önce üretilecek çıktıyı doğrulama yöntemiyle eşleştirin. Hata ayıklama görevi, hatayı önce yeniden üreten ve düzeltmeden sonra geçen bir testle tamamlanır. Tablo üretme görevi ise her hücrenin kaynak girdiye dayandığını gösteren bir sadakat kontrolüyle biter. Ayrıca prompt'ta bir dosya adının geçmesinin, dosya içeriğinin bağlama eklendiğini kanıtlamadığını unutmayın. O içeriğe dayanan yanıta güvenmeden önce görünür bağlamı kontrol edin. Uygulamayı önünüzdeki göreve benzediği için seçin. Amaç tarif biriktirmek değil, döngünün tamamını doğru yürütmektir.

Sınırları belirlenmiş hata ayıklama prompt'u· github-copilot
Zayıf örnek

Webhook ayrıştırıcısındaki başarısız kaçışlı tırnak testini başka bir şeyi bozmadan düzelt.

İyi örnek

Hedef: kaçışlı tırnak testinin neden başarısız olduğunu belirle ve en küçük güvenli düzeltmeyi öner. Bağlam: bu TypeScript ayrıştırıcısı webhook JSON işliyor. Public imza değişmemeli ve bozuk girdi hâlâ ParseError fırlatmalı. Kaynak: src/parseWebhook.ts ve tests/parseWebhook.test.ts kullan. Test beklentilerini gereksinim say. Beklentiler: nedeni açıkla, küçük bir değişiklik öner, ParseError sözleşmesini koru ve ilgisiz kodu yeniden yazma.

Bu prompt neden daha iyi? Hatanın nedenini, küçük bir yamayı ve korunmuş hata sözleşmesini elde edersiniz. Daha önce başarısız olan testi yeniden çalıştırır ve bozuk girdinin hâlâ hata ürettiğini doğrularsınız.

Şimdi siz deneyin

Belirsiz bir prompt'tan doğrulanmış port ayrıştırıcısına ilerleyin

Zor uç durumları bulunan bir fonksiyonda zero-shot'tan few-shot'a geçişi uygulayın. Çalışma için yaklaşık sekiz dakika ayırın.

  1. 01

    Bir çalışma TypeScript dosyasına hata fırlatan parsePort(value: string | number) taslağını ekleyin. Sözleşmeyi yazın. Fonksiyon 1–65535 arasında bir tam sayı döndürmelidir. Boş dizeleri, ondalıkları, işaretli dizeleri, üslü gösterimi, rakam dışı son ekleri ve aralık dışı değerleri reddetmelidir.

  2. 02

    Yalnızca bu sözleşmeyi içeren bir zero-shot prompt gönderin ve Copilot'un ilk uygulamasını kaydedin.

  3. 03

    "80px", "1e3", " 3000 ", "00080" ve "-1" girdilerini test edin. Yanlış işlenen her durumu not alın.

    İpucu: Basit sayısal dönüşümler genellikle "12px" veya "1e3" girdisini kabul eder.

  4. 04

    Prompt'u hedef, bağlam, kaynak ve beklentileri içerecek biçimde yeniden yazın. En az "80px", "1e3" ve " 3000 " girdilerini belirleyici örnek olarak ekleyin.

  5. 05

    Düzeltilmiş uygulamayı isteyin. Ardından bütün durumları yeniden çalıştırıp beklenen değeri veya tam hata mesajını aldığınızı doğrulayın.

Zor girdileri doğru işleyen bir port ayrıştırıcısı elde edersiniz. Ayrıca few-shot örneğin ne zaman düz yazıdan daha açıklayıcı olduğunu uygulamada görürsünüz.

Aklınızda kalsın

  • Kod prompt'u test edilebilir bir şartnamedir. Hedef, bağlam, kaynak ve beklentiler gizli varsayımları görünür hale getirir.
  • Gereksinimler açıksa zero-shot kullanın. Kurallar etkileşiyorsa veya öncelik önemliyse few-shot kullanın.
  • Belirleyici tek bir örnek belirsiz kuralı görünür kılar. Kodu değiştirmeden önce şartnameyi düzeltin.
  • Açık dosyanın doğruluk kaynağı olduğunu varsaymak yerine her kaynağın neden otorite olduğunu belirtin.
  • Seç, Kapsamla, Prompt Yaz, İncele, İyileştir ve Doğrula döngüsünü uygulayın. Sonucu chat dışında doğrulayın.

Kendinizi test edin

  1. 1. "parseConfig'e doğrulama ekle" isteğini değerlendirmesi kolay bir prompt'a nasıl dönüştürürsünüz?

  2. 2. Zero-shot'tan few-shot prompting'e hangi durumda geçmelisiniz?

  3. 3. Copilot'un ürettiği kod üye ve toplu alım indirimlerini birlikte uyguluyor. Kurala göre üyelik önceliklidir ve indirimler birleşmemelidir. Önce neyi düzeltmelisiniz?

  4. 4. Copilot'a "src/config.ts kullan" dediğinizde dosyanın rolünü de neden belirtmelisiniz?

  5. 5. Cookbook döngüsünde prompt'unuzu yazdınız ve Copilot bir düzeltme önerdi. Döngünün son adımı nedir?

  6. 6. Üretilen ayrıştırıcı normal girdi testini geçiyor, ancak "12px" değerini geçerli kabul ediyor. Buradan hangi sonucu çıkarmalısınız?

Sık sorulan sorular

Kod prompt'u uzadıkça sonuç her zaman iyileşir mi?

Hayır. Amaç uzun değil, eksiksiz bir prompt yazmaktır. Hedefi, korunacak kısıtları, belirleyici kaynakları ve beklenen çıktıyı belirtmek yanlış koda yol açan varsayımları azaltır. Aynı ifadeleri tekrarlamak ek fayda sağlamaz.

Zero-shot ile few-shot arasındaki fark tek cümlede nedir?

Zero-shot örnek vermeden sonuç ister ve gereksinimler açık olduğunda uygundur. Few-shot ise tamamlanmış girdi ve çıktı örnekleri içerir. Kurallar etkileştiğinde, öncelik önemli olduğunda veya biçim alışılmadık olduğunda kullanılır.

Copilot istemediğim bir dosyayı kaynak aldı. Bunu nasıl önlerim?

Yalnızca görevle ilgili kaynakları belirtin ve her birinin neden belirleyici olduğunu açıklayın. Yanıta güvenmeden önce görünür bağlamı kontrol edin. Prompt'ta dosya adının geçmesi, içeriğinin isteğe eklendiğini garanti etmez.

Bu dersteki terimler

zero-shot prompt
Tamamlanmış bir girdi ve çıktı örneği vermeden Copilot'tan bir görevi yerine getirmesini isteyen prompt'tur.
few-shot prompt
Etkileşen kuralları, öncelik sırasını veya alışılmadık biçimlendirmeyi açıklamak için bir veya daha fazla girdi ve çıktı örneği içeren prompt'tur.
davranış sözleşmesi
Kabul edilen girdileri, çıktıları, hataları ve kısıtları tanımlayan yazılı ifadedir. Kod prompt'unu sonuç inceleme listesine dönüştürür.
kaynak otoritesi
Referans verilen dosyanın uygulama, public tür veya beklenen davranış gibi belirtilmiş rolüdür. Çelişki olduğunda Copilot'un hangi kaynağı esas alacağını gösterir.

Daha fazla kaynak