Hızlı yanıt mühendisliği

Üretken yapay zeka modülünde, üretken yapay zeka modellerinin giriş alanının neredeyse sınırsız olduğunu öğrenmiştiniz. Kullanıcılarınızın beklentilerini karşılayan çıkışlar üretmek için istemler oluşturmanız gerekir. İstem, uygulamanız ve model arasındaki yapılandırılmış sözleşmedir.

İyi yazılmış bir istem:

  • LLM'nin yanıtını nasıl oluşturması gerektiğini belirtir.
  • Zaman içinde sürümlendirilebilen, test edilebilen ve geliştirilebilen birden fazla bileşenden oluşur.
  • Ekipler arasında ortak çalışma için paylaşılan bir yapay nesne olarak kullanılabilir.

Bu modülde, etkili istemler yazmayı öğreneceksiniz. İstemlerin nasıl yapılandırıldığını ve bileşenlerinin sistem ile son kullanıcı arasında nasıl dağıtıldığını açıklıyoruz. Ayrıca temel istem tekniklerini ve her birini hangi senaryolarda uygulayacağınızı öğreneceksiniz.

Bu modül boyunca, CyberAgent'ın Prompt API kullanımından esinlenerek oluşturulmuş, yapay zeka destekli bir yazma asistanı olan BlogBuddy adlı ortak bir örnek kullanacağız.

BlogBuddy sistem planı için üretken yapay zeka modülüne dönün.

İstem bileşenleri

Her istem bileşeninin, model davranışını yönlendirmede belirli bir rolü vardır.

  • Bağlam: Modelin rolünü ve alanını belirler. Böylece model, nasıl davranması gerektiğini anlar.
  • Talimat: Modele belirli bir görev atar.
  • Giriş değişkenleri: Uygulamanız tarafından gerçek zamanlı olarak sağlanan, duruma özel bağlam.
  • Çıkış biçimi: Beklenen çıkış yapısını tanımlar. Örneğin, JSON çıkışları isteyebilirsiniz.
  • Örnekler: Görevin bir veya daha fazla giriş için nasıl yürütülmesi gerektiğini gösterin.
  • Kısıtlamalar: Çıkışın tutarlı, güvenli ve markaya uygun olması için net sınırlar belirleyin.

İsteminize bu bileşenlerin bazılarını veya tümünü ekleyebilirsiniz. Aşağıdaki örnekte, BlogBuddy'nin yazma asistanı özelliğine ait bu bileşenler gösterilmektedir.

### Context

You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.

### Instruction

Generate 3 alternative titles for the user's blog post with a given style.

### Input variables

Here is the content of the blog post:
${blogPostContent}

Here is the desired style:
${titleStyle}

### Output format

Return valid JSON ONLY, in the following exact structure:
{
  "titles": ["Title option 1", "Title option 2", "Title option 3"]
}

### Examples

Example input:
{
  "blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
  "titleStyle": "friendly"
}

Example output:
{
  "titles": [
    "A First Visit to the Neighborhood Café",
    "Trying the Café I've Wanted to Visit for Months",
    "My Experience at a Long-Awaited Local Spot"
  ]
}
### Constraints

- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.

İlk istemlerinizde temel bilgilerle başlayın: talimat ve çıkış biçimi. Ardından, sonuçları analiz edip başarı için hangi daha ayrıntılı kontrollerin gerekli olduğunu belirledikçe yinelemeli olarak daha fazla bileşen ekleyin.

Sistem istemleri ve kullanıcı istemleri

İstem bileşenlerinden bazıları sabit kodludur, bazıları ise son kullanıcı tarafından sağlanabilir:

  • Sistem istemi, uygulama geliştiriciler tarafından sağlanır ve modelin genel davranışını tanımlar. Modelin rolünü, beklenen üslubunu, çıkış biçimini (ör. katı bir JSON şeması) ve genel kısıtlamaları ayarlayabilir. Sistem istemi, güvenlik ve sorumluluk koşullarını kodladığınız yerdir. İstekler arasında tutarlı kalır ve modelin davranışları için istikrarlı bir temel sağlar.

  • Kullanıcı istemi, çıkışa yol açan anlık isteği içerir. Kullanıcı, belirli değişkenler içerebilen belirli bir görev isteğinde bulunuyor. Örneğin, "Bu gönderi için üç başlık göster", "Bu paragrafa devam et" veya "Bu metnin dilini daha resmi hale getir" gibi istemler girebilirsiniz.

Çoğu üretken yapay zeka API'si, istemleri mesaj dizisi olarak yapılandırmanıza olanak tanır. Her mesajın bir rolü (sistem veya kullanıcı) ve içeriği vardır. Bu sayede, kararlı ve genel talimatları dinamik ve istek başına girişten ayırmak daha kolay olur.

Hangi bileşenlerin sistem istemine dahil edileceğine, hangilerinin ise kullanıcı tarafından belirtilmesine bırakılacağına nasıl karar veriyorsunuz? Bu sorunun cevabı, kullanıcı deneyiminizin ne kadar esnek olduğuna ve modelinizin ne kadar yetenekli olduğuna bağlıdır.

Sınırlı kullanım alanları

Çok özel kullanım alanlarında istemin çoğu sistem isteminde önceden tanımlanabilir. Örneğin BlogBuddy'de kullanıcılar, taslaklarıyla ilgili oluşturulan başlık önerilerini listelemek için Başlıkları Göster'i tıklayabilir.

Görev düzeltildi, çıkış biçimi biliniyor ve kullanıcının beklenen sonucu alması için ek bağlam sağlaması gerekmiyor. Bu durumda, tüm sabit kuralları, üslup yönergelerini, çıkış şemalarını ve örnekleri sistem istemine yerleştirirsiniz.

Bu özelliği Prompt API ile oluşturmak için tüm oturumda sistem düzeyinde davranışı tanımlamak üzere initialPrompts kullanırız:

// Defines stable behavior for the entire session
const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: "system",
      content: `You are a blog-writing assistant.
      Your task is to generate high-quality titles for blog posts.
      Always respond in concise, friendly language.
      Return exactly 3 alternative titles.
      Produce valid JSON with a "titles" array of strings.`
    }
  ]
});

Kullanıcı Başlıkları Göster'i tıkladığında, mevcut içerik için istem çağrılır:

// The only variable input is the blog content
const result = await session.prompt(blogContent);

Zaman içinde kullanıcılar daha fazla esneklik ve kontrol isteyebilir. Bu durumda, belirli bileşenleri arayüz kontrolleriyle kullanıcı istemine taşıyabilirsiniz. Örneğin, stil veya ton özelliklerinin açılır menüsü.

Ancak çok fazla yapılandırılmış işlem, kullanıcı deneyimini olumsuz etkileyebilir. Bu durumda, kullanıcıların istemlerinin çoğunu kendilerinin belirlemesine olanak tanıyan daha açık uçlu bir tasarıma geçmek isteyebilirsiniz. Bu tasarımı optimize etme hakkında daha fazla bilgiyi Kullanıcı deneyimi kalıpları modülünde bulabilirsiniz.

Esnek görevler, ayrıntılı kullanıcı istemlerine dayanır

Kullanıcıların blog yayınlarını sıfırdan yazmasına yardımcı olan, etkileşimli ve açık uçlu bir deneyim sunarak kullanıcılarınıza daha fazla esneklik sağlar. Fikir, taslak, yeniden yazma, üslup değişikliği veya beyin fırtınası isteyebilir ya da bir görevin tam olarak nasıl yürütülmesi gerektiğini belirtebilirler. Bu tür uygulamalarda daha güçlü bir sunucu tarafı modeli kullanmanız gerekir.

Esnek görevlerde, olası seçenek aralığı çok daha geniş olduğundan kullanıcının daha fazla bilgi belirtmesi gerekir. Sistem istemi, genel davranışı yönetmeye devam eder.

En iyi uygulamalar şunlardır:

  • Sistem istemine sabit kurallar, yapı ve örnekler ekleyin. Dinamik içerikleri ve göreve özel istekleri kullanıcı istemine ekleyin.
  • Kullanıcı deneyiminiz ne kadar açık uçlu olursa kullanıcı istemi de beklenmedik girişlere uyum sağlamak için o kadar esnek olmalıdır.
  • Kullanıcı isteminin yapması gereken iş ne kadar fazlaysa modelin o kadar yetenekli olması gerekir. Çünkü daha az yerleşik yapıyla daha fazla varyasyonu ele alması gerekir.

Bu kuralları, ürün bağlamınızda kontrol ve kullanıcı esnekliği arasındaki dengeyi kademeli olarak optimize etmek için kullanabilirsiniz. Kullanıcı tercihlerini ve davranışlarını yakından gözlemleyin. Daha fazla esneklik her zaman gerçek değere dönüşmez. Kullanıcılarınızın daha kapsamlı istemler oluşturmak için zamana, beceriye ve bilişsel bant genişliğine de ihtiyacı vardır.

Sık kullanılan istem teknikleri

Geliştiriciler, genellikle kullanım alanları ve modelleri için en iyi sonuç veren istem tekniklerini bulmak amacıyla birkaç farklı istem tekniği dener.

Sıfır örnekli istem

Modele görevi açıklarsınız ve en iyi sonucu almayı umarsınız. Örneğin:

"What is the capital of France?"

Sıfır örnekli istem, birçok yapay zeka görevi için etkili bir temeldir. Ansiklopedik bilgi sorgulama gibi karmaşık olmayan istekler için bu tekniği kullanmaya devam etmeniz muhtemelen en iyisidir. Ancak çoğu gerçek dünya uygulamasında isteminizi ek koşullandırma ve mantıkla genişletmeniz gerekir.

Çok görevli istem

Az görevli istemde, doğru davranışı, stili, yapıyı ve diğer önemli değişkenleri göstermek için örnekler sağlarsınız. Duygu sınıflandırması için örnek istem:

You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }

Input: "This is terrible. I want a refund."
Output: { "label": "negative" }

Çok görevli istem, bu tür sözde tahmini görevler için faydalıdır. Ayrıca, Şekil 1'deki başlık oluşturma gibi tanınabilir bir yapıya sahip görevlere de uygulanabilir.

Çıkış alanı çok geniş olduğunda (ör. açık uçlu veya uzun içerikler) birkaç görevli istem, muhtemelen en iyi teknik değildir. Alanı anlamlı bir şekilde kapsayan örnekler vermek zor, hatta imkansızdır.

Düşünce zinciri istemi

Modeli, yanıt üretmeden önce adım adım akıl yürütmeye teşvik ediyorsunuz. Adımlar açıkça açıklanabilir veya modelin tanımlamasına bırakılabilir. Örneğin:

"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."

Düşünce zinciri, çok adımlı akıl yürütme ve uygulama gerektiren görevlerde (ör. bir blog yayınının ana hatlarını belirleme veya karmaşık kararları destekleme) çok iyi sonuç verir. Bu teknik, sözde akıl yürütme modellerinin temelini oluşturur.

Bu işlem maliyetli olabilir. Adım adım akıl yürütme izleri oluşturmak; işlem, maliyet ve gecikmeyi artırır. Yalnızca kullanım alanınızda karmaşık muhakeme ve planlama gerektiğinde kullanın.

Kendi kendine düşünme istemi

İlk oluşturma işleminden sonra modelin kendi çıkışını eleştirmesini ve düzeltmesini istersiniz. Örneğin:

"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."

Özellikle düzenleme veya yeniden yazma araçları gibi yinelemeli iyileştirmeden yararlanan görevler için faydalıdır. Hızlı bir şekilde uygulanabilir ve önemli kalite artışları sağlayabilir. İsteminiz iyi performans gösterdiğinde kendi kendini yansıtma döngüsü faydalı olur. Öncelikle, daha net bir sonuç elde etmek veya kullanıcı memnuniyetini artırmak için çıkışı iyileştirin.

Önemli noktalar

Bu modülde, istemlerin nasıl yapılandırılmış bileşenlerden oluşturulduğunu öğrendiniz. İstem mühendisliği, pratikte oldukça deneysel bir alandır. Netlik ve güvenilirlik ancak birden fazla kez iyileştirildikten sonra ortaya çıkar.

Bir sonraki modülde, değerlendirmeye dayalı istem geliştirme konusunu ele alacağız. Bu uygulama, istemleri sistematik olarak iyileştirmenize ve ürününüz ile kullanıcılarınız için en iyi sonucu veren istemleri belirlemenize yardımcı olur.

Kaynaklar

Bu tekniklerin her birinin kendi varyantları ve en iyi uygulamaları vardır. Aşağıdakiler gibi çok çeşitli ayrıntılı harici kaynaklar vardır:

Mümkün olan en iyi sonuçları elde etmek için seçtiğiniz modelin dokümanlarını inceleyin. Size özel tavsiyeler olabilir.

Anlayıp anlamadığınızı kontrol etme

Sistem isteminde ne tür kurallar belirtebilirsiniz?

Belirli giriş değişkenleri (ör. kullanıcı girişleri), beklenen çıkış yapısı, model rolü ve karakter sayısı sınırı.
Doğru cevap, bravo!
Buraya yalnızca kullanıcı girişi eklenir.
Doğru değil. Tekrar deneyin.
Modelin rolünü ve alanını belirlemek için (davranış şeklini anlaması için).
Doğru değil. Tekrar deneyin.
Kullandığınız modelin türü ve model boyutu.
Hayır, tekrar deneyin.

Modelin yanıtı oluşturmadan önce adım adım akıl yürütmesini istediğinizde hangi tekniği kullanmalısınız?

Sıfır örnekli istem
Yanlış cevap.
Çok görevli istem
Yanlış cevap.
Düşünce zinciri istemi
Doğru cevap, bravo!
Kendi kendine düşünme istemi
Yanlış cevap.

Çok görevli istem en çok ne zaman kullanışlıdır?

Modelden bağlam olmadan bir görev yapmasını istediğinizde
Yanlış cevap.
Görev, başlık oluşturma gibi tanınabilir bir yapıya sahip olduğunda veya belirli bir biçimlendirme gerektirdiğinde.
Doğru cevap, bravo!
Çıkış alanı çok büyük olduğunda (ör. açık uçlu yaratıcı yazma).
Yanlış cevap.
Modelin kendi çalışmasını eleştirmesini istediğinizde
Yanlış cevap.

Kendi kendine düşünme istemi tekniği nedir?

Modelden, netliği veya kaliteyi artırmak için kendi çıktısını eleştirmesini ve düzeltmesini isteme
Doğru cevap, bravo!
İstemi birden çok kez çalıştırıp sonuçların ortalamasını alma
Yanlış cevap.
Sonuç kötü çıkarsa kullanıcıdan istemi yeniden yazmasını isteme
Yanlış cevap.
Modelin sistem istemini dinamik olarak değiştirmesine izin verin.
Yanlış cevap.