0Pricing
AI Prompt Engineering · Ders

Bağlam Uzunluğu ve Uygunluk

Kapsamlı bağlamı belirteç sınırları ve uygunlukla dengeleyin.

Bağlam Uzunluğu ve Uygunluk, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Bağlam Penceresi Bütçesi

Her modelin bir API çağrısında işleyebileceği toplam belirteç sayısını ifade eden bir maksimum bağlam penceresi vardır. Buna hem girdi (isteminiz + geçmiş) hem de çıktı (modelin yanıtı) dahildir.

Bu bütçeyi anlamak kritik öneme sahiptir: bütçeyi aşmanız isteminizin kesilmesine veya çıktının kaybolmasına yol açar. İlgisiz bağlam için bu bütçeyi harcamak, modelin önemli konular hakkında akıl yürütmesi için daha az alan bırakır.

Bağlam Penceresi Boyutları

Farklı modellerin farklı bağlam sınırları vardır. 2025 itibarıyla:

  • GPT-4o: 128.000 belirteç
  • Claude Opus 4.5: 200.000 belirteç
  • Gemini 1.5 Pro: 1.000.000 belirteç
  • GPT-3.5 Turbo: 16.385 belirteç

Daha büyük pencereler daha fazla bağlam eklemenize olanak tanır — ancak çağrı başına maliyetleri daha yüksektir. Çoğu görev için 8.000-16.000 belirteç yeterlidir. Daha büyük olması, ilgisiz içerik eklemek anlamına geliyorsa her zaman daha iyi değildir.

import tiktoken

def estimate_tokens(text, model='gpt-4o'):
    encoding = tiktoken.encoding_for_model(model)
    return len(encoding.encode(text))

# Quick token budget calculator
models = {
    'GPT-3.5 Turbo':  16385,
    'GPT-4o':        128000,
    'Claude Opus 4.5': 200000,
}

prompt = 'Explain the concept of technical debt in 500 words for a non-technical CEO.'
prompt_tokens = estimate_tokens(prompt)

for model_name, limit in models.items():
    reserved_for_output = 1024
    available = limit - prompt_tokens - reserved_for_output
    print(f'{model_name}: limit={limit:,} | prompt={prompt_tokens} | '
          f'context budget={available:,} tokens')

Neleri Dahil Etmeli: İlgililik Puanlaması

Herhangi bir bağlam parçasını eklemeden önce şunu sorun: Bu bilgi yanıtı değiştiriyor mu?

Basit bir zihinsel çerçeve kullanın — her bağlam öğesine puan verin:

  • Yüksek ilgililik (dahil edin): görevi doğrudan etkiler, kelime dağarcığını şekillendirir veya seçenekleri sınırlar
  • Orta düzeyde ilgililik (belki): yararlı ayrıntılar sağlar, ancak çıktı onsuz da iyi olur
  • Düşük ilgililik (dışarıda bırakın): doğrudur, ancak yanıtı hiçbir şekilde etkilemez
def score_context_element(element, task):
    '''
    Heuristic: does this context element directly constrain or shape the answer?
    Returns: HIGH / MEDIUM / LOW
    '''
    high_signals = ['stack', 'constraint', 'deadline', 'must', 'cannot', 'budget',
                    'audience', 'goal', 'version', 'scale', 'limit']
    low_signals  = ['founded', 'headquartered', 'fun fact', 'history', 'awards',
                    'team building', 'company culture', 'office location']

    el_lower = element.lower()
    if any(s in el_lower for s in high_signals):
        return 'HIGH'
    if any(s in el_lower for s in low_signals):
        return 'LOW'
    return 'MEDIUM'

context_elements = [
    'Our stack is Python FastAPI and PostgreSQL',
    'We cannot use any paid third-party APIs',
    'Our company was founded in Berlin in 2020',
    'We need the solution to handle 1000 requests/second',
    'We won a startup award last year',
]

for el in context_elements:
    score = score_context_element(el, task='optimize our API')
    print(f'[{score:6}] {el}')

Ortada Kaybolma Sorunu

Araştırmalar, büyük dil modellerinin çok uzun istemlerin ortasına yerleştirilen bilgilere daha az dikkat ettiğini göstermiştir. 50.000 belirteçlik bir istemin ortasına yerleştirilen kritik bağlam kısmen göz ardı edilebilir.

İyi uygulama şudur: en önemli bağlamı isteminizin başına veya sonuna yerleştirin — model bu konumlara en güçlü biçimde odaklanır.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Structure: critical constraint at the TOP, then the body, then the task
well_structured_prompt = (
    # Critical constraint FIRST
    'CRITICAL CONSTRAINT: Output must be under 50 words and contain no code.\n\n'
    # Background in the middle
    'Background: we are explaining our API rate limiting policy to non-technical support agents. '
    'They handle billing inquiries and need to explain errors to customers. '
    'Our rate limit is 100 requests per minute per API key.\n\n'
    # Task at the end
    'Task: Write the explanation.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=128,
    messages=[{'role': 'user', 'content': well_structured_prompt}]
)
print(response.content[0].text)

Uzun Belgeleri Parçalara Ayırma

Belirteç bütçenizden daha uzun bir belgeyle çalışmanız gerektiğinde üç seçeneğiniz vardır:

  • Önce özetleyin: modelden belgeyi kısaltmasını isteyin, ardından özetle çalışın
  • Parçalara ayırıp işleyin: belgeyi parçalara bölün, her parçayı işleyin ve ardından sonuçları birleştirin
  • Çıkarıp ekleyin: isteme eklemeden önce yalnızca ilgili bölümleri çıkarın

Bağlam penceresini aşan bir belgeyi asla zorla sığdırmaya çalışmayın — belge sessizce kesilir.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

def chunk_and_summarize(long_text, chunk_size=2000):
    '''Split text into chunks, summarize each, combine summaries.'''
    words = long_text.split()
    chunks = []
    for i in range(0, len(words), chunk_size):
        chunk = ' '.join(words[i:i + chunk_size])
        chunks.append(chunk)

    summaries = []
    for idx, chunk in enumerate(chunks):
        response = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=256,
            messages=[{
                'role': 'user',
                'content': f'Summarize this section in 3 bullet points:\n\n{chunk}'
            }]
        )
        summaries.append(f'Section {idx+1}:\n{response.content[0].text}')

    return '\n\n'.join(summaries)

# Example usage
long_doc = 'word ' * 5000  # placeholder for a real document
print('Chunks needed:', len(long_doc.split()) // 2000 + 1)

Uygulamada İlgililik Süzme

İlgililik süzme, büyük bir belgenin isteme eklenmeden önce yalnızca ilgili kısımlarının çıkarılması anlamına gelir. Bu özellikle şu durumlarda önemlidir:

  • Yalnızca bir bölümünün ilgili olduğu uzun raporlar
  • Yalnızca bir işlevinin incelenmesi gereken kod dosyaları
  • Yalnızca son 3 iletinin önemli olduğu e-posta yazışmaları
  • 50 tablodan yalnızca 2'sinin ilgili olduğu veritabanı şemaları
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Step 1: Filter first, then ask
full_schema = (
    'Table: users (id, name, email, created_at, role)\n'
    'Table: products (id, name, price, stock, category_id)\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
    'Table: categories (id, name, parent_id)\n'
    'Table: reviews (id, product_id, user_id, rating, body)\n'
    'Table: sessions (id, user_id, token, expires_at)'
)

# Only include relevant tables for the specific question
relevant_context = (
    'Relevant tables for this query:\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': f'{relevant_context}\nWrite SQL to find the top 5 orders by total value this month.'
    }]
)
print(response.choices[0].message.content)

Konuşma Geçmişini Yönetme

Çok turlu konuşmalarda geçmiş her turda büyür. Geçmişi akıllıca yönetmek, belirteç bütçenizi dengede tutar:

  • Kayan pencere: yalnızca son N turu tutun
  • Özet ekleme: eski turları düzenli aralıklarla tek bir iletide özetleyin
  • Önemli olguları çıkarma: önemli kararları bir madde listesi olarak izleyin ve sistem bağlamı olarak ekleyin
  • Konu değiştiğinde sıfırlama: ilgisiz bir konuya geçerken yeni bir oturum başlatın
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

def summarize_history(old_history):
    '''Compress old conversation turns into a brief summary.'''
    history_text = '\n'.join(
        f'{m["role"].upper()}: {m["content"]}' for m in old_history
    )
    response = client.chat.completions.create(
        model='gpt-4o',
        max_tokens=200,
        messages=[{
            'role': 'user',
            'content': (
                'Summarize this conversation history in 3 bullet points. '
                'Focus on decisions made and key information established.\n\n'
                + history_text
            )
        }]
    )
    return response.choices[0].message.content

# Example: compressing old history before continuing
old_turns = [
    {'role': 'user',      'content': 'We are building a Kanban app.'},
    {'role': 'assistant', 'content': 'Great, what is your stack?'},
    {'role': 'user',      'content': 'React + FastAPI + PostgreSQL.'},
    {'role': 'assistant', 'content': 'Good choice for a Kanban app.'}
]
summary = summarize_history(old_turns)
print('Summary of old history:', summary)

Bağlam Sıkıştırma Teknikleri

Çok miktarda bağlam eklemeniz gerektiğinde ancak belirteç bütçeniz sınırlı olduğunda sıkıştırma tekniklerini kullanın:

  • Düz yazı yerine maddeler: madde listeleri cümlelere göre belirteçler açısından %30-50 daha verimlidir
  • Bilinen terimleri kısaltın: ilk kullanımdan sonra “PostgreSQL 15” → “PG15”
  • Dolgu ifadelerini kaldırın: “Şunu belirtmekte fayda var ki ...” → doğrudan gerçeği ifade edin
  • Yapılandırılmış biçimler kullanın: anahtar:değer çiftleri cümlelerden daha yoğundur
import tiktoken

def count_tokens(text):
    enc = tiktoken.encoding_for_model('gpt-4o')
    return len(enc.encode(text))

# Same information, different token counts
prose_context = (
    'Our company is a startup that was founded recently and we are building '
    'a data analytics platform. It is worth noting that we use Python for our backend. '
    'Additionally, we have chosen PostgreSQL as our primary database. '
    'Furthermore, we deploy on AWS using ECS containers.'
)

bullet_context = (
    'Company: data analytics startup\n'
    'Stack: Python backend, PostgreSQL, AWS ECS'
)

print('Prose context tokens: ', count_tokens(prose_context))
print('Bullet context tokens:', count_tokens(bullet_context))
print('Tokens saved:', count_tokens(prose_context) - count_tokens(bullet_context))
print('Same information? Yes — same facts, 60% fewer tokens')

Dinamik Bağlam Seçimi

Üretim ortamındaki yapay zekâ uygulamalarında bağlam, çoğu zaman mevcut sorguyla en ilgili içerik temel alınarak dinamik biçimde seçilir. Buna Getirmeyle Zenginleştirilmiş Üretim (RAG) denir.

Tüm belgeleri eklemek yerine, kullanıcının sorusuna anlamsal olarak en çok benzeyenleri getirir ve isteme eklersiniz. Böylece bağlam yalın ve son derece ilgili kalır.

# Simplified RAG pattern: retrieve relevant chunks, inject into prompt
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Simulated knowledge base (in production: vector database)
knowledge_base = [
    {'id': 1, 'topic': 'billing',   'text': 'Refunds are processed within 5-7 business days.'},
    {'id': 2, 'topic': 'shipping',  'text': 'Standard shipping takes 3-5 days.'},
    {'id': 3, 'topic': 'returns',   'text': 'Returns accepted within 30 days with receipt.'},
    {'id': 4, 'topic': 'warranty',  'text': 'All products come with a 1-year warranty.'},
]

def get_relevant_docs(user_query, kb, top_k=2):
    '''Simplified relevance: keyword match. Production uses embeddings.'''
    scored = [(doc, sum(w in user_query.lower() for w in doc['topic'].split())) for doc in kb]
    scored.sort(key=lambda x: x[1], reverse=True)
    return [doc['text'] for doc, _ in scored[:top_k]]

query = 'Can I return this and get my money back?'
relevant = get_relevant_docs(query, knowledge_base)
context = '\n'.join(relevant)
print('Injected context:', context)
response = client.chat.completions.create(
    model='gpt-4o', max_tokens=80,
    messages=[{'role': 'user', 'content': f'Context:\n{context}\n\nQuestion: {query}'}]
)
print('Answer:', response.choices[0].message.content.strip())

Bağlam Bütçesi Planlama

Üretim uygulamaları için geliştirmeye başlamadan önce bağlam bütçenizi açıkça planlayın:

  • Bağlam penceresinin %25'ini çıktı için ayırın
  • %10'unu sistem mesajı ve kişilik için ayırın
  • %30'unu en güncel konuşma geçmişine ayırın
  • %35'ini dinamik bağlam için bırakın (getirilen belgeler, eklenen veriler)

Kullanım alanınız geliştikçe kolayca ayarlanabilmeleri için bu dağılımları kodunuzda sabitler olarak belgeleyin.

# Context budget planner
MODEL_LIMIT = 128000  # GPT-4o

BUDGET = {
    'output_reserve':  int(MODEL_LIMIT * 0.25),  # 32,000 tokens
    'system_message':  int(MODEL_LIMIT * 0.05),  # 6,400 tokens
    'recent_history':  int(MODEL_LIMIT * 0.30),  # 38,400 tokens
    'dynamic_context': int(MODEL_LIMIT * 0.35),  # 44,800 tokens
    'task_prompt':     int(MODEL_LIMIT * 0.05),  # 6,400 tokens
}

total_input = sum(v for k, v in BUDGET.items() if k != 'output_reserve')
print('Context budget plan:')
for key, tokens in BUDGET.items():
    pct = round(tokens / MODEL_LIMIT * 100)
    print(f'  {key:<20}: {tokens:>7,} tokens ({pct}%)')
print(f'  {"total input":<20}: {total_input:>7,} tokens')
print(f'  {"+ output reserve":<20}: {BUDGET["output_reserve"]:>7,} tokens')
print(f'  {"= model limit":<20}: {MODEL_LIMIT:>7,} tokens')

Uzunluk Yerine İlgililik Öne Çıktığında

Son derece ilgili 500 belirteçlik bir bağlam, gevşek biçimde ilgili 5.000 belirteçlik bir bağlamdan daha iyi sonuç verir. Modelin elemesi gereken içerik azaldığında daha iyi çıktı üretir.

Bağlamınızın fazla uzun ve odaklanmamış olduğunu gösteren işaretler:

  • Model kısıtlamalarınızın bazılarını göz ardı eder
  • Uzun bir bağlama rağmen çıktı genel ve yüzeysel görünür
  • Model sorunuzun yanlış bölümünü ele alır
  • Gecikme ve maliyet beklenenden yüksektir

Bu işaretleri gördüğünüzde bağlamı kısaltın ve yeniden çalıştırın.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Demonstrating: lean context produces sharper output
lean_context = (
    'Task: write a 50-word product tagline.\n'
    'Product: CLI tool that auto-generates Git commit messages from your diff.\n'
    'Audience: senior developers who hate writing commit messages.\n'
    'Tone: dry, witty, technical.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=100,
    messages=[{'role': 'user', 'content': lean_context}]
)
print('Lean context output:')
print(response.content[0].text.strip())

Bilgi Kontrolü

Bir geliştirici, 20 turluk bir konuşma geçmişine sahip bir sohbet robotu oluşturuyor. 20 turdan sonra bağlam penceresi dolmaya başlıyor. Önemli bağlamı kaybetmeden konuşmayı sürdürmek için en iyi (BEST) strateji nedir?

Bağlam Uzunluğu ve İlgililik — Özet

Bağlamı etkili biçimde yönetmek, üretim uygulamalarında kritik hâle gelen temel bir istem oluşturma becerisidir. Temel ilkeler:

  • Her bağlam öğesine puan verin: yüksek / orta / düşük ilgililik — yalnızca yüksek olanları dahil edin
  • Kritik kısıtlamaları ortasına değil, başına veya sonuna yerleştirin
  • %30-50 belirteç tasarrufu için düz yazı yerine madde biçimlerini kullanın
  • Bütçenizi aşan belgeleri özetleyin veya parçalara ayırın
  • Çok turlu konuşmalarda baştan başlamak yerine eski geçmişi sıkıştırın
  • Bağlam bütçenizi kod sabitleri olarak açıkça planlayın

Sıkça Sorulan Sorular

“Bağlam Uzunluğu ve Uygunluk” dersi ücretsiz mi?

Evet — “Bağlam Uzunluğu ve Uygunluk” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Bağlam Uzunluğu ve Uygunluk” dersinde ne öğreneceğim?

Kapsamlı bağlamı belirteç sınırları ve uygunlukla dengeleyin. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Bağlam Uzunluğu ve Uygunluk” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yapay Zeka İstemlerinde Bağlam Ne Anlama Gelir?
  2. Arka Plan Bilgileri Sağlama
  3. Sahneyi Etkili Biçimde Kurma
  4. Bağlam Uzunluğu ve Uygunluk
← AI Prompt Engineering Sayfasına Dön