İçeriğe Atla
Mustafa Erbay
Teknoloji · 9 dk okuma · görüntülenme Read in English

Prompt Engineering Öldü, Context Engineering Geldi: Modelin

Büyük dil modellerinden verim almanın yolu süslü promptlar yazmaktan değil, modele beslenen context penceresini mühendislik prensipleriyle tasarlamaktan…

100%

Büyük dil modellerine (LLM) süslü sıfatlar ve sihirli kelimeler fısıldayarak mucizevi çıktılar alma dönemi kapandı. Bugün yapay zeka entegrasyonlarında başarının anahtarı, modele ne kadar yaratıcı bir “prompt” yazdığınız değil; modelin kısıtlı bellek penceresine (context window) hangi veriyi, hangi sıra ve biçimle soktuğunuzdur. Ben buna context engineering diyorum ve bu disiplin, prompt yazarlığının yerini alan gerçek bir yazılım ve sistem mimarisi disiplinidir.

Sistem ve backend tarafında 20 yılı deviren biri olarak söylüyorum: Yapay zekayı kurumsal sistemlere entegre ederken yaşadığımız sorunların kabaca tamamı “yanlış prompt” yüzünden değil, “kirli ve kontrolsüz context” yüzünden çıkıyor. Modelin önüne ne koyarsanız onu çiğner. Eğer önüne bütün veritabanını kontrolsüzce yığarsanız, hem faturayı şişirirsiniz hem de modelin kafasını karıştırıp yanlış kararlar vermesine (hallucination) sebep olursunuz.

Prompt engineering neden yetersiz kalmaya başladı?

Prompt engineering, modellerin context pencerelerinin küçük olduğu ve mantık yürütme (reasoning) yeteneklerinin emekleme aşamasında olduğu dönemde işe yarayan geçici bir çözümdü. O dönemde “Adım adım düşün”, “Sen bir finans uzmanısın” gibi şablonlarla modeli yönlendirmek bir fark yaratıyordu çünkü modelin elindeki tek kılavuz bu kelimelerdi. Ancak modeller geliştikçe ve context pencereleri yüz binlerce tokene ulaştıkça, bu kelime oyunlarının etkisi belirgin şekilde azaldı.

Bugün karşılaştığımız en büyük sorun promptun kendisi değil, context pencerelerinin büyümesiyle ortaya çıkan “lost in the middle” (ortada kaybolma) fenomenidir. Araştırmalar ve sahada yaptığımız testler net bir gerçeği gösteriyor: LLM’ler kendilerine verilen context’in başındaki ve sonundaki bilgilere odaklanma eğilimindedir; ortadaki devasa veri yığınını ise çoğunlukla görmezden gelirler. Süslü bir prompt yazıp altına 50 sayfalık dökümanı kontrolsüzce yapıştırırsanız, modelin ortalarda bir yerde yazan kritik bir iş kuralını atlama ihtimali çok yüksektir.

Context engineering nedir ve neyi amaçlar?

Context engineering, modele gönderilecek verinin filtrelenmesi, yapılandırılması, önceliklendirilmesi ve en optimize şekilde paketlenmesi sürecidir. Amacı, modele sadece ve sadece o anki görevi tamamlaması için gereken en rafine bilgiyi sunarak gecikmeyi (latency) düşürmek, maliyeti azaltmak ve çıktı kalitesini maksimuma çıkarmaktır. Bu bir kelime sanatı değil, veri boru hattı (data pipeline) tasarımıdır.

İyi bir context tasarımı yaparken veriyi ham haliyle bırakmayız. Veritabanından gelen satırları, logları veya dökümanları temizler, gereksiz gürültüden (boilerplate kodlar, tekrarlayan başlıklar, gereksiz metadata alanları) arındırırız. Ardından bu veriyi modelin en hızlı ve doğru şekilde parse edebileceği Markdown veya yapılandırılmış JSON formatına dönüştürürüz.

graph TD;
A["Ham Veri Kaynakları"] --> B["Veri Temizleme & Chunking"]
B --> C["Metadata Zenginleştirme"]
C --> D["Vektör Veritabanı (RAG)"]
D --> E["Context Re-ranking (Reranker)"]
E --> F["LLM Context Window"]

RAG mimarilerinde context tasarımı nasıl yapılır?

Retrieval-Augmented Generation (RAG) sistemleri kurarken yapılan en büyük hata, vektör veritabanından gelen ilk 5-10 sonucu doğrudan modelin önüne atmaktır. Sadece kosinüs benzerliğine (cosine similarity) güvenerek context oluşturursanız, modelin önüne birbirini tekrar eden veya tamamen alakasız veriler yığabilirsiniz. Bu durum hem token maliyetini artırır hem de modelin kafasını karıştırır.

RAG mimarisinde context’i tasarlarken şu adımları uygulamak zorundayız:

  1. Semantic Chunking (Anlamsal Parçalama): Dökümanları sadece karakter sınırına (örneğin her 1000 karakterde bir) göre bölmek anlamsal bütünlüğü bozar. Bunun yerine paragrafları, Markdown başlıklarını veya kod bloklarını takip eden akıllı chunking stratejileri kullanmalıyız.
  2. Metadata Enrichment (Metadata Zenginleştirme): Her veri parçasına (chunk) hangi dökümana ait olduğu, oluşturulma tarihi, yetki seviyesi gibi etiketler eklenmelidir. Model, önüne gelen bilginin bağlamını bu etiketlerden okuyabilmelidir.
  3. Re-ranking (Yeniden Sıralama): Vektör veritabanından dönen sonuçları, anahtar kelime ve semantik uyumu optimize eden bir reranker modelinden (örneğin Cohere veya BAAI reranker) geçirerek en alakalı ilk 3 sonucu seçmeliyiz.

Token ekonomisi ve context window limitleri nasıl yönetilir?

Bağlam pencerelerinin büyümesi, onları sınırsızca kullanabileceğimiz anlamına gelmez; çünkü token maliyetleri ve ağ gecikmesi hala doğrusal (bazen de üstel) olarak artmaktadır. Üretim ortamında çalışan bir sistemde her istekte 100 bin token göndermek, hem cüzdanınızı hızlıca boşaltır hem de kullanıcı deneyimini (TTFT - Time to First Token) mahveder. Bu yüzden context boyutunu dinamik olarak yönetmek kritik bir sistem mühendisliği görevidir.

Bu durumu yönetmek için “Prompt Caching” (Prompt Önbelleğe Alma) mekanizmalarından yararlanıyoruz. Eğer sisteme gönderdiğimiz sistem talimatları ve sabit dökümanlar değişmiyorsa, bunları destekleyen API sağlayıcılarında (örneğin Anthropic veya OpenAI) cache’leyerek sonraki isteklerde ciddi bir maliyet ve hız avantajı elde ediyoruz. Ayrıca, kullanıcı geçmişini saklarken “sliding window” (kayan pencere) mantığıyla sadece son N adet mesajı context’te tutup, daha eski mesajları özetleyerek tek bir token bloğu haline getirmeliyiz.

# Context optimizasyonu için basit bir sliding window ve özetleme mantığı
def build_context(user_history, current_query, max_tokens=4000):
    context = []
    current_tokens = count_tokens(current_query)
    
    # En son mesajları önceliklendirerek geriye doğru tara
    for message in reversed(user_history):
        msg_tokens = count_tokens(message["content"])
        if current_tokens + msg_tokens < max_tokens:
            context.insert(0, message)
            current_tokens += msg_tokens
        else:
            # Sınırı aşan eski mesajları özet servisinden geçir veya atla
            context.insert(0, {"role": "system", "content": "[Eski konuşmaların özeti...]"})
            break
            
    context.append({"role": "user", "content": current_query})
    return context

LLM agent mimarisinde state ve memory yönetimi nasıl olmalıdır?

Otonom ajanlar (agents) tasarlarken, ajanın geçmişte yaptığı eylemleri ve bunların sonuçlarını hatırlaması gerekir. Ancak bu “bellek” (memory) kontrolsüz büyürse, ajan bir süre sonra kendi döngüleri içinde kaybolur. Memory yönetimi, context engineering’in en karmaşık alanlarından biridir.

Ajan mimarilerinde state verisini Redis veya PostgreSQL gibi hızlı ve kalıcı veri depolarında tutuyoruz. Her adımda tüm geçmişi ajana göndermek yerine, ajanın o anki “state” durumunu temsil eden minimalist bir JSON objesi tasarlıyoruz. Örneğin bir e-ticaret iade ajanı tasarlıyorsak, ajanın context’inde tüm sohbet geçmişi yerine sadece aşağıdaki gibi temiz bir state objesi bulunmalıdır:

{
  "current_step": "verify_invoice",
  "invoice_id": "INV-2026-0042",
  "verification_status": "pending_user_signature",
  "attempts": 2
}

Bu yapılandırılmış veri, ajanın her seferinde ne yapacağını şaşırmadan, doğrudan iş mantığına (business logic) odaklanmasını sağlar.

Gerçek bir üretim ERP’sinde context engineering uygulaması

Bir üretim ERP’sinde, operatörlerin makinelerdeki arıza kodlarını analiz etmesi ve bakım ekiplerine otomatik iş emri açması için bir yapay zeka asistanı tasarlamıştık. İlk denemelerimizde, makineden gelen tüm sensör loglarını ve geçmiş bakım dökümanlarını ham haliyle LLM’e gönderiyorduk. Sonuç tam bir fiyaskoydu: Model sürekli yanlış arıza teşhisleri koyuyor, üstelik her sorgu saniyeler sürüyordu.

Sorunu çözmek için klasik prompt değiştirmeyi bıraktık ve context pipeline’ını baştan tasarladık. Öncelikle sensör verilerini normalize ettik; sadece sapan (anomaly) değerleri context’e ekledik. Bakım dökümanlarını ise hata kodlarına göre indeksleyip, sadece o anki hata koduyla eşleşen paragrafları aldık.

# ERP Context Hazırlama Pipeline Örneği
def prepare_operator_context(machine_id, error_code):
    # 1. Sadece aktif ve sapan sensör verilerini al (Gürültüyü azalt)
    telemetry = get_active_anomalies(machine_id) 
    
    # 2. Hata koduna özel geçmiş bakım kayıtlarını filtrele
    history = query_maintenance_db(error_code, limit=2)
    
    # 3. Context'i modelin en iyi anladığı Markdown formatında birleştir
    context = f"""
    # MACHINE STATUS: {machine_id}
    Active Anomalies: {telemetry}
    
    # RELEVANT MAINTENANCE HISTORY FOR ERROR {error_code}:
    {history}
    """
    return context

Bu yapısal değişiklikten sonra, modelin doğru teşhis koyma oranı belirgin şekilde arttı ve token tüketimini kabaca üçte birine düşürdük.

Sonuç

Net pozisyonum şudur: Yapay zeka projelerinde başarı, kelime cambazlığıyla değil, veri mühendisliğiyle gelir. Prompt yazmayı bir kenara bırakın; veriyi filtrelemeye, önceliklendirmeye ve modelin önüne en rafine haliyle koymaya odaklanın. Context’i doğru yönettiğinizde, en vasat model bile bir dahiye dönüşebilir; context’i kirlettiğinizde ise en gelişmiş model bile size çöp üretmekten başka bir şey sunmaz.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Context engineering'i nasil baslatirim ve hangi araçlari kullanmaliyim?
Ben, büyük dil modellerinden verim almak için süslü promptlar yazmaktan vazgeçip, modele beslenen context penceresini mühendislik prensipleriyle tasarlamaya başladım. Context engineering'i başlatmak için öncelikle büyük dil modellerinin çalışma prensibini anlamak ve sonra da context penceresini optimize etmek gerekiyor. Benim deneyimime göre, context penceresini optimize etmek için araçlar olarak Mermaid gibi görselleştirme araçlarını ve Callout gibi özel komutları kullanmak işe yarıyor.
Context engineering'in avantaj ve dezavantajlari nelerdir?
Benim deneyimime göre, context engineering'in avantajı, büyük dil modellerinden daha doğru ve tutarlı sonuçlar alınmasını sağlamasıdır. Ancak dezavantajı, context penceresini optimize etmek için fazla zaman ve çaba gerektirmesidir. Ayrıca, context penceresini yanlış tasarlamak, modelin yanlış kararlar vermesine sebep olabilir. Ben, bu nedenle context engineering'i dikkatli bir şekilde uygulamak gerektiğini düşünüyorum.
Context engineering'de hata olursa ne yapmaliyim?
Ben, context engineering'de hata olursa, öncelikle context penceresini tekrar incelemeli ve optimize etmeliyim. Ayrıca, büyük dil modelininDOCUMENTATION'ını tekrar okumalı ve örnekleri incelemeliyim. Benim deneyimime göre, hata genellikle context penceresinin yanlış tasarlanması veya modelin yanlış parametrelerle çalıştırılması nedeniyle oluşuyor. Bu nedenle, dikkatli bir şekilde context penceresini tasarlamak ve modeli çalıştırmak gerekiyor.
Prompt engineering'in yerini context engineering aliyor mu?
Ben, prompt engineering'in yerini context engineering'in aldığını düşünüyorum. Büyük dil modelleri geliştikçe ve context pencereleri büyüdükçe, prompt engineering'in etkisi azalıyor. Benim deneyimime göre, context engineering, büyük dil modellerinden daha doğru ve tutarlı sonuçlar alınmasını sağlıyor. Ancak, prompt engineering hala bazı durumlarda işe yarayabiliyor. Ben, bu nedenle her iki yöntemi de bilmeli ve uygulamalı olmak gerektiğini düşünüyorum.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Yeni yazılardan haberdar olun

Yeni içerikler ve teknik notlar e-postanıza gelsin.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar