Prompt Engineering

Yapılandırılmış Çıktıları Ustalıkla Kullanma: JSON Şemaları ile Güvenilir AI Oluşturma

Büyük Dil Modelleri'nin (LLM'ler) erken dönemlerinde, AI ile etkileşim büyük ölçüde sohbet tabanlıydı. Bir soru sordunuz ve model bir metin yanıtı sağladı. Beyin fırtınası veya yaratıcı yazım için güçlü olsa da, bu yapılandırılmamış yaklaşım üretim ortamlarında yetersiz kalır. Kesin veri çıkarma, API entegrasyonları veya veritabanı güncellemeleri gerektiren uygulamalar oluştururken, rastlantısallık bir özellik değil, bir risk unsuru olarak görülür.

Burada Yapılandırılmış Çıktılar kritik hale gelir. Modelin veriyi belirli bir formatta (genellikle JSON) döndürmesi kısıtlandığında, geliştiriciler sağlam ve belirleyici iş akışları oluşturabilir. Bu yazıda, JSON şemaları kullanarak yapıyı nasıl zorlayacağımızı, ölçeklenebilirlik için bunun neden önemli olduğunu ve bunu etkili bir şekilde nasıl uygulayacağımızı keşfedeceğiz.

Özgür Metinden Şema Tabanlı Etkileşime Geçiş

Geleneksel olarak, LLM'lerden veri çıkarmak için son işleme adımları gerekiyordu. Modelden bir kullanıcının profilini tanımlamasını isteyebilir, ardından adı, e-postayı ve yaşı ayırmak için düzenli ifadeler veya dize manipülasyonu kullanabilirdiniz. Bu yöntem kırılgandır. Model çıktısında hafif bir değişiklik yaparsa (örneğin "Yaş:" yerine "Yaşı:" kullanırsa), ayrıştırıcınız bozulur.

Yapılandırılmış çıktılar, model henüz yanıtı oluşturmadan önce beklenen yanıt şeklini tanımlayarak bu sorunu çözer. Programlamada güçlü bir şekilde yazılmış bir işlev imzasına benzetilebilir. Genel bir string dönüş türü yerine, belirli alanlara ve türlere sahip bir nesne tanımlarsınız. Çoğu modern LLM sağlayıcısı artık yerel JSON şema zorlamasını desteklemektedir; bu, modelin matematiksel olarak sağladığınız yapıya uyması gerektiği anlamına gelir.

JSON Şema Kısıtlamalarının Uygulanması

Yapılandırılmış çıktılardan yararlanmak için, istenen çıktıyı tanımlayan bir JSON Şeması tanımlamanız gerekir. Bu şema, uygulamanız ile AI modeli arasında bir sözleşme görevi görür. Aşağıda, bir müşteri destek bilet analiz sistemi için bir şema tanımlamanın pratik bir örneği yer almaktadır.


{
  "type": "object",
  "properties": {
    "sentiment": {
      "type": "string",
      "enum": ["positive", "neutral", "negative"]
    },
    "priority_score": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "summary": {
      "type": "string",
      "maxLength": 280
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": ["sentiment", "priority_score", "summary", "tags"],
  "additionalProperties": false
}

Sıkı tanımlamalara dikkat edin. Duygu (sentiment) için modelin "iyi", "güzel" veya "olumlu" gibi değerler döndürmesini önlemek adına enum kullanıyoruz. Veri bütünlüğünü sağlamak için öncelik puanı için minimum ve maximum kısıtlamaları ayarladık. additionalProperties: false yönergesi hayati önem taşır; bu, modelin şemada tanımlanmayan herhangi bir ekstra alan içermemesini söyler ve yanıtı temiz ve öngörülebilir tutar.

Kodda Pratik Uygulama

Bunu uygulamanıza entegre ettiğinizde, API çağrısı biraz değişir. Şemayı, prompt'unuzun yanı sıra bir parametre olarak iletirsiniz. Aşağıda, tipik bir SDK uygulamasında bunun nasıl göründüğünü gösteren bir sahte kod örneği yer almaktadır.


import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-3-sonnet-20240229",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Bu bileti analiz edin: 'İnternetim 3 gündür kesik ve öfkeliyim.'"}
    ],
    # Şemayı API'ye doğrudan iletin
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "ticket_analysis",
            "schema": { ... # Yukarıdaki şemayı buraya ekleyin ... }
        }
    }
)

# Çıktı, şemaya uyan geçerli JSON olarak garanti edilir
parsed_response = json.loads(message.content[0].text)
print(parsed_response['priority_score'])

Bu yapıyı API düzeyinde zorlayarak, karmaşık hata işleme döngülerine olan ihtiyacı ortadan kaldırırsınız. Model uyum sağlamakta başarısız olursa, API bir doğrulama hatası fırlatır; bu da uygulamanızın aşağı akış işleme sırasında çakılmak yerine, istisnayı zarif bir şekilde ele almasını sağlar.

Sonuç

Yapılandırılmış çıktılar artık bir lüks değil; AI'yı üretim uygulamalarına entegre etmeye ciddiye veren her geliştirici için bir zorunluluktur. Serbest biçimli metinden uzaklaşarak ve şema tabanlı etkileşimleri benimseyerek güvenilirlik, daha kolay hata ayıklama ve arka uç sistemleriyle sorunsuz entegrasyon kazanırsınız. Ekosistem gelişmeye devam ettikçe, daha sofistike tür kısıtlamaları ve çok modlu yapılandırılmış çıktılar görmemiz muhtemeldir; bu da konuşma tabanlı AI ile geleneksel yazılım mühendisliği paradigmaları arasındaki boşluğu daha da daraltacaktır.

Share: