AI Engineering Academy · Ders

Bağlam Sınırları İçinde Kalma Stratejileri

Token sınırlarını aşmadan uzun konuşmaları yönetmek için kayan pencere belleği, ileti özetleme ve seçmeli bağlam kısaltma uygulayın.

4. ders / 413 adım

Bağlam Sınırları İçinde Kalma Stratejileri, CoddyKit'te ücretsiz bir AI Engineering Academy 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 Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.

Büyüyen Konuşma Sorunu

Bir sohbet konuşmasında değiş tokuş edilen her ileti, sonraki API çağrısının belirteç sayısını artırır. Uzun bir müşteri destek oturumunda veya saatler süren bir kodlama oturumunda biriken konuşma geçmişi kolayca 20.000-50.000 belirteci aşabilir. Bunların tamamını her turda API'ye göndermeniz ve daha önce işlenmiş belirteçler için tekrar tekrar ödeme yapmanız gerekir.

Bir bağlam yönetimi stratejisi olmadan uygulamanız ya bağlam sınırına ulaşıp çöker ya da iletileri sessizce kısaltmak zorunda kalır; bu durumda model, önceki önemli bağlamı izleyemez. Üretimdeki her LLM uygulamasının bağlam büyümesini yönetmek için açık bir stratejiye ihtiyacı vardır.

1. Strateji: Kayan Pencere (Son N İleti)

En basit strateji, bağlamda yalnızca son N iletiyi tutup daha eski iletileri atmaktır. Buna kayan pencere denir. Uygulaması kolaydır, maliyeti öngörülebilirdir ve yakın geçmişin eski değiş tokuşlardan daha önemli olduğu birçok kullanım alanı için yeterlidir.

import openai

client = openai.OpenAI()

class SlidingWindowConversation:
    def __init__(self, system_prompt, window_size=10):
        self.system = system_prompt
        self.window_size = window_size
        self.history = []

    def chat(self, user_message):
        self.history.append({'role': 'user', 'content': user_message})

        # Keep only the last N messages
        windowed = self.history[-self.window_size:]
        messages = [{'role': 'system', 'content': self.system}] + windowed

        response = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages
        )
        reply = response.choices[0].message.content
        self.history.append({'role': 'assistant', 'content': reply})
        print(f'Context: {len(windowed)} messages ({len(self.history)} total)')
        return reply

conv = SlidingWindowConversation('You are a helpful assistant.', window_size=6)
print(conv.chat('Hello! My name is Alice.'))
print(conv.chat('What is the capital of France?'))
print(conv.chat('What is my name?'))  # Might forget if window is small

2. Strateji: Belirteç Farkındalıklı Kırpma

Belirteç farkındalıklı kırpma, ileti sayısına göre kırpmak yerine toplam belirteç sayısı bir eşik değerin altına inene kadar iletileri kaldırır. İletilerin uzunlukları büyük ölçüde değiştiği için bu yöntem daha kesindir: İleti sayısı sınırı, çok farklı belirteç maliyetlerine sahip 10 kısa iletiyi veya 3 çok uzun iletiyi içerebilir.

import tiktoken

def trim_to_token_budget(
    messages, system_prompt, model='gpt-4o-mini', max_input_tokens=8000
):
    enc = tiktoken.encoding_for_model(model)

    def count(msgs):
        return sum(len(enc.encode(m.get('content',''))) + 4 for m in msgs) + 3

    # System prompt token count
    system_tokens = len(enc.encode(system_prompt)) + 4
    budget = max_input_tokens - system_tokens

    # Trim from the oldest messages until we fit
    trimmed = list(messages)
    while trimmed and count(trimmed) > budget:
        trimmed.pop(0)  # Remove oldest message

    removed = len(messages) - len(trimmed)
    if removed:
        print(f'Trimmed {removed} old messages to stay within {max_input_tokens} tokens')
    return trimmed

3. Strateji: Konuşma Özeti Oluşturma

Özetleme, eski konuşma turlarını kullanıcının sözünü ettiği temel bilgileri, kararları ve bağlamı koruyarak kısa bir özete sıkıştırır. Bu yöntem kayan pencereden daha gelişmiştir; çünkü geçmiş değiş tokuşları basitçe atmak yerine özünü korur.

İşleyiş şu şekildedir: Konuşma bir eşiği aştığında, en eski N turu 'Şimdiye kadarki bu konuşmayı özetleyin' istemiyle modele gönderin, bu turları özeti içeren tek bir sistem iletisiyle değiştirin ve yeni sıkıştırılmış geçmişle konuşmaya devam edin.

import openai

client = openai.OpenAI()

def summarize_conversation(messages_to_summarize, model='gpt-4o-mini'):
    summary_prompt = [
        {'role': 'system', 'content': 'You summarize conversations. Be concise but preserve key facts, decisions, and any specific information the user shared (names, numbers, preferences).'},
        {'role': 'user', 'content': 'Summarize this conversation:\n' + '\n'.join(
            f"{m['role'].upper()}: {m['content']}" for m in messages_to_summarize
        )}
    ]
    resp = client.chat.completions.create(model=model, messages=summary_prompt, max_tokens=500)
    return resp.choices[0].message.content

def compress_history(history, keep_recent=4):
    if len(history) <= keep_recent:
        return history
    to_summarize = history[:-keep_recent]
    summary = summarize_conversation(to_summarize)
    summary_msg = {'role': 'system', 'content': f'Earlier conversation summary: {summary}'}
    return [summary_msg] + history[-keep_recent:]

print('Summarization strategy compresses old turns into a single summary message')

4. Strateji: Varlık Belleği

Varlık belleği, ham ileti geçmişini saklamak yerine konuşmada belirtilen temel gerçeklerin (kullanıcı tercihleri, adlar, proje ayrıntıları, alınan kararlar) yapılandırılmış bir gösterimini çıkarır ve güncel tutar. Her turdan önce saklanan gerçekler sistem istemine eklenir.

Yalnızca anlamsal olarak önemli olanları, her turun her kelimesini değil, içerdiğiniz için bu yöntem tüm geçmişe göre daha az belirteç kullanır. Varlık belleği, kullanıcıların konuşmanın çok daha önceki bölümlerinde belirlenen tercihlere ve gerçeklere geri gönderme yaptığı uzun süre çalışan yardımcılar için özellikle iyi sonuç verir.

import openai
import json

client = openai.OpenAI()

def extract_entities(messages, model='gpt-4o-mini'):
    prompt = [
        {'role': 'system', 'content': 'Extract key facts from this conversation as JSON: {"user_name": null, "preferences": [], "key_facts": []}'},
        {'role': 'user', 'content': '\n'.join(f"{m['role']}: {m['content']}" for m in messages)}
    ]
    resp = client.chat.completions.create(
        model=model,
        messages=prompt,
        response_format={'type': 'json_object'}
    )
    return json.loads(resp.choices[0].message.content)

conversation = [
    {'role': 'user', 'content': 'Hi, I am Alice and I prefer Python over JavaScript.'},
    {'role': 'assistant', 'content': 'Great to meet you, Alice! Python is an excellent choice.'},
    {'role': 'user', 'content': 'I am building a REST API for my e-commerce startup.'}
]
entities = extract_entities(conversation)
print(json.dumps(entities, indent=2))

Her Strateji Ne Zaman Uygulanmalı

Stratejinizi uygulamanızın özelliklerine göre seçin:

  • Kayan pencere: Yakın geçmişin önemli olan tek şey olduğu ve kullanıcıların eski değiş tokuşlara geri dönmediği basit sohbet uygulamaları. Uygulaması en ucuz seçenektir.
  • Belirteç farkındalıklı kırpma: İleti uzunluklarının önemli ölçüde değiştiği tüm üretim uygulamaları. Her zaman ileti sayısına göre kırpmaktan daha iyidir.
  • Özetleme: Uzun süre çalışan yardımcılar, müşteri destek oturumları ve proje yönetimi botları. Kullanıcılar, saatler önceki değiş tokuşlardan temel bilgilerin hatırlanmasını bekler.
  • Varlık belleği: Kişisel yardımcılar, kullanıcı tercihlerini dikkate alan sohbet botları ve oturum boyunca kullanıcı profilinin önemli olduğu öğretim sistemleri.

Bu stratejiler birleştirilebilir: Temel gerçekler için varlık belleğini, yakın konuşma için de kayan pencereyi kullanabilirsiniz.

Bağlamı Gereksiz İçerikle Doldurmaya Alternatif Olarak RAG

Bilgi ağırlıklı uygulamalarda en iyi bağlam yönetimi stratejisi belgeleri bağlama hiç koymamaktır; bunun yerine RAG (Getirmeyle Güçlendirilmiş Üretim) kullanarak yalnızca geçerli sorguyla ilgili belirli parçaları alın. Bu, bağlamı odaklı tutar, maliyeti azaltır ve çoğu zaman tüm belgeyi eklemekten daha iyi yanıtlar üretir.

Temel çıkarım şudur: Uzun bağlam pencereleri sığabilir mi? sorununu çözer, ancak model bunu iyi kullanacak mı? sorununu çözmez. Kesin alma işlemi, modele geçerli soru için gerçekten ihtiyaç duyduğu bilgiyi vererek her iki sorunu da ele alır.

Azami Bağlam Hatalarını Sorunsuz Biçimde Ele Alma

En iyi çabalara rağmen, özellikle beklenmedik şekilde uzun kullanıcı içeriği nedeniyle üretimde bağlam sınırı hatalarıyla karşılaşabilirsiniz. context_length_exceeded hatasını her zaman açıkça ele alın; kullanıcının karşısına işlenmemiş bir özel durum olarak çıkmasına izin vermeyin.

import openai
import tiktoken

client = openai.OpenAI()

def chat_with_context_guard(messages, model='gpt-4o-mini', max_tokens=100000):
    enc = tiktoken.encoding_for_model(model)
    total = sum(len(enc.encode(m.get('content',''))) + 4 for m in messages) + 3

    while total > max_tokens and len(messages) > 2:
        # Remove the second message (keep system prompt)
        removed = messages.pop(1)
        total -= len(enc.encode(removed.get('content',''))) + 4
        print(f'Trimmed a message. New total: {total} tokens')

    try:
        return client.chat.completions.create(model=model, messages=messages)
    except openai.BadRequestError as e:
        if 'context_length' in str(e):
            return {'error': 'Message history too long. Please start a new conversation.'}
        raise

Oturumlar Arasında Bağlamı Kalıcılaştırma

Gerçek bir uygulamada kullanıcılar uygulamayı kapatıp yeniden açar. Sunucu yeniden başlatılır. Bağlam yönetimi yalnızca tek bir oturum içini değil, oturumlar arasındaki kalıcılığı da dikkate almalıdır. Bunun için konuşma geçmişini bir veritabanında saklamak ve her oturumun başında yüklemek gerekir.

Mantıklı bir yaklaşım şudur: Denetim ve ince ayar amaçlarıyla ham geçmişin tamamını PostgreSQL'de saklayın; ancak yeni bir API çağrısı için bağlamı yüklerken, belirteç bütçesine sığması için özetleme veya kırpma stratejinizi uygulayın. Böylece verileri hiçbir zaman kaybetmez, ancak her istekte tüm geçmiş için ödeme yapmazsınız.

Üretimde Bağlam Büyümesini İzleme

Her API çağrısının belirteç sayısını günlüğe kaydedin ve bunu konuşma kimliğine göre zaman içinde izleyin. Sağlıklı bir konuşmada, özetleme devreye girdikçe önce kademeli bir büyüme, ardından bir sabitlenme görülmelidir. Bağlam sınırına kadar sınırsız büyüyen bir konuşma, kırpma mantığınızın doğru çalışmadığını gösterir.

Ayrıca tüm konuşmalardaki ortalama bağlam uzunluğunu izleyin. Bu değer zaman içinde yükseliyorsa varsayılan sistem isteminizin büyüdüğünü (özellik eklemeleri nedeniyle), kullanıcıların daha uzun girdiler yapıştırdığını veya RAG'in giderek daha büyük parçalar döndürdüğünü gösterebilir. Bunların her biri farklı bir çözüm gerektirir.

Stratejileri Birleştirme: Üretim Yaklaşımı

Sağlam bir üretim bağlam yönetimi sistemi, birden fazla stratejiyi katmanlar hâlinde birleştirir:

  1. Bağlamı oluşturmadan önce: belirteç bütçesini kontrol edin ve günlüğe kaydedin
  2. Varlık çıkarma uygulayın: temel gerçekleri içeren yapılandırılmış bir bellek bloğu ekleyin
  3. Yakın geçmişi ekleyin: son 6-10 iletiyi olduğu gibi dahil edin
  4. Daha eski geçmişi özetleyin: daha eski geçmiş varsa devam eden bir özet ekleyin
  5. Koruma kontrolü: toplam hâlâ bütçeyi aşıyorsa, olduğu gibi tutulan en eski iletileri kırpın

Bu katmanlı yaklaşım, en önemli bilgileri (varlık belleği ve yakın bağlam) korurken daha eski geçmişi önce özetlere, yalnızca son çare olarak da kırpmaya dönüştürerek zarif bir şekilde azaltır.

Hızlı Kontrol

Bu dersteki yapay zekâ mühendisliği kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: kayan pencereler ve belirteç farkındalıklı kırpma, sınırlar içinde kalmak için eski bağlamı atan basit stratejilerdir, özetleme, temel gerçekleri koruyarak eski turları sıkı bir gösterime dönüştürür ve varlık belleği, bir konuşma boyunca belirteçleri verimli kullanan uzun vadeli bellek için yapılandırılmış gerçekleri çıkarır. Sırada, JSON kipini ve yapılandırılmış çıktıları kullanarak LLM'lerin güvenilir JSON döndürmesini nasıl sağlayacağımızı inceleyeceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Bağlam Sınırları İçinde Kalma Stratejileri” dersi ücretsiz mi?

Evet — “Bağlam Sınırları İçinde Kalma Stratejileri” 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 Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.

“Bağlam Sınırları İçinde Kalma Stratejileri” dersinde ne öğreneceğim?

Token sınırlarını aşmadan uzun konuşmaları yönetmek için kayan pencere belleği, ileti özetleme ve seçmeli bağlam kısaltma uygulayın. AI Engineering Academy 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 Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, 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 Sınırları İçinde Kalma Stratejileri” 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 Engineering Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Engineering Academy 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. Token Nedir
  2. Bağlam Pencereleri: Boyut ve Sonuçları
  3. API Maliyetlerini Hesaplama ve Öngörme
  4. Bağlam Sınırları İçinde Kalma Stratejileri
← AI Engineering Academy Sayfasına Dön