Modül 3 · Prompt Evaluation · ⏱ 5 dakika

Test dataset'i üretmek

Generating test datasets

Orijinal İngilizce video — Anthropic Academy / JWPlayer. Aşağıdaki Türkçe metin dersi birebir özetler.

Bu modül için tahmini süre: 5 dakika

Genel bakış

Custom bir prompt evaluation workflow’u kurmak, sağlam bir prompt yazıp ne kadar iyi performans gösterdiğini görmek için test verisi üretmekle başlar. Kullanıcıların AWS’ye özgü kod yazmasına yardımcı olan bir prompt için evaluation sistemi kurma sürecinde ilerleyelim.

Hedefi belirlemek

Prompt’umuzun kullanıcılara AWS use case’leri için üç spesifik tipte output yazmada yardımcı olması gerekiyor:

  • Python kodu
  • JSON konfigürasyon dosyaları
  • Regular expression’lar (regex)

Temel gereksinim: bir kullanıcı bir task için yardım istediğinde, herhangi bir ekstra açıklama, header veya footer olmadan bu formatlardan birinde temiz output döndürmemiz.

Başlangıç prompt’umuz (versiyon 1):

prompt = f"""
Please provide a solution to the following task:
{task}
"""

Evaluation dataset’i oluşturmak

Bir evaluation dataset, prompt’umuza feed edeceğimiz input’ları içerir. Her prompt + input kombinasyonu için prompt’u çalıştırıp sonuçları analiz edeceğiz.

Dataset’imiz, her objenin Claude’tan ne yapmasını istediğimizi tanımlayan bir “task” property’si içerdiği bir JSON object array’i olacak. Bu dataset’i elle de oluşturabilir, Claude kullanarak otomatik de üretebiliriz.

Test verisi ürettiğimiz için, tam Claude modeli yerine Haiku gibi daha hızlı bir modeli kullanmak için mükemmel bir fırsat bu.

Test verisini kodla üretmek

Test dataset’imizi otomatik olarak üreten bir fonksiyon oluşturalım. Önce Claude ile çalışmak için helper fonksiyonlarımız gerek:

def add_user_message(messages, text):
    user_message = {"role": "user", "content": text}
    messages.append(user_message)

def add_assistant_message(messages, text):
    assistant_message = {"role": "assistant", "content": text}
    messages.append(assistant_message)

def chat(messages, system=None, temperature=1.0, stop_sequences=[]):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
        "temperature": temperature
    }
    if system:
        params["system"] = system
    if stop_sequences:
        params["stop_sequences"] = stop_sequences
    
    response = client.messages.create(**params)
    return response.content[0].text

Şimdi dataset üretme fonksiyonumuzu oluşturalım:

def generate_dataset():
    prompt = """
Generate an evaluation dataset for a prompt evaluation. The dataset will be used to evaluate prompts that generate Python, JSON, or Regex specifically for AWS-related tasks. Generate an array of JSON objects, each representing task that requires Python, JSON, or a Regex to complete.

Example output:
```json
[
  {
    "task": "Description of task",
  },
  ...additional
]
  • Focus on tasks that can be solved by writing a single Python function, a single JSON object, or a single regex
  • Focus on tasks that do not require writing much code

Please generate 3 objects. """


JSON response'unu düzgün parse etmek için prefilling ve stop sequences kullanırız:

```python
    messages = []
    add_user_message(messages, prompt)
    add_assistant_message(messages, "```json")
    text = chat(messages, stop_sequences=["```"])
    return json.loads(text)

Dataset üretimini test etmek

Fonksiyonumuzu çalıştırıp nasıl test case’ler aldığımıza bakalım:

dataset = generate_dataset()
print(dataset)

Bu, hedef çıktılarımızı (AWS’ye özgü görevler için Python fonksiyonları, JSON konfigürasyonları ve regex’ler) kapsayan üç farklı test case döndürmeli.

Dataset’i kaydetmek

Dataset’imiz hazır olduğunda, evaluation sırasında kolayca yükleyebilmek için bir dosyaya kaydediyoruz:

with open('dataset.json', 'w') as f:
    json.dump(dataset, f, indent=2)

Bu, notebook’unuz ile aynı dizinde, prompt evaluation için hazır task listenizi içeren bir dataset.json dosyası oluşturur.

Bu temel ile artık prompt’larınızın farklı türde AWS ile ilgili coding task’larında ne kadar iyi performans gösterdiğini değerlendirmek için sistematik bir test verisi üretme yönteminiz var.

Temel çıkarımlar

  • Eval dataset’i elle yazılabilir ama hızlı başlangıç için Claude (özellikle Haiku) ile otomatik üretmek pratiktir
  • Dataset’i JSON object listesi olarak yapılandırın; her object input için ihtiyacınız olan tüm alanları taşısın
  • JSON çıktısını kararlı almak için prefill (\“json) + stop_sequences (```)` pattern’i bu modüldeki gibi kritik
  • Üretilen dataset’i bir kez dosyaya yazıp (örn. dataset.json) sonraki çalışmalarda yeniden kullanın — her seferinde yeniden üretmek hem yavaş hem maliyetli
  • Üretim modeli olarak Haiku, sadece test verisi ürettiğimiz için maliyet ve hız açısından akıllı bir tercih