Menu

Token ve Bağlam Penceresi Nedir? LLM Rehberi

Yapay zekâ modelleri metni token denen küçük kelime parçaları olarak okur ve aynı anda sadece sınırlı sayıda tokeni tutabilir: bağlam penceresi. İkisinin nasıl çalıştığını ve sohbet uzadığında ne yapacağını öğren.

Bu sayfadaki her istemi düzenleyebilir, sonra ChatGPT, Claude ya da başka bir yapay zekâ uygulamasında açabilirsin.

Yapay zekâ dil modelleri harfleri ya da kelimeleri okumaz. Token okurlar: küçük metin parçaları, çoğu zaman bir kelimenin tamamı, bazen bir parçası. Ve aynı anda sadece sınırlı sayıda token alabilirler; bu sınıra bağlam penceresi (context window) denir. Bu iki fikir, yapay zekâ araçlarının neden öyle fiyatlandığını, uzun sohbetlerin neden baştaki talimatları unutmaya başladığını ve bir modelin az önce doğru yazdığı bir kelimenin harflerini saymakta neden zorlanabildiğini açıklar.

Yapay zekâda token nedir?

Model promptunu görmeden önce tokenizer denen bir program metni sabit bir kelime dağarcığından parçalara böler ve her parçayı bir sayıya çevirir. Model tamamen bu sayılarla çalışır ve yanıtını da aynı şekilde, her seferinde bir token olmak üzere yazar; uygulama bunu tekrar metne çevirir.

Kelime dağarcığı büyük miktarda metinden öğrenilir, bu yüzden yaygın kelimeler genellikle tek bir token olur, daha nadir kelimeler ise birkaç tanıdık parçaya bölünür. Boşluk çoğu zaman kendinden sonraki kelimenin başına eklenir. İngilizce bir cümle kabaca şöyle bölünebilir:

Token ization isn 't magic .

Bu bölünme temsilidir. Her model ailesinin kendi tokenizer'ı vardır ve aynı cümle her birinde farklı sayıda parçaya ayrılabilir. Birçok sağlayıcı gerçek sayıları kontrol edebilmen için bir tokenizer aracı ya da token sayma API'si yayımlıyor.

Bir model görsel, ses ve dosya kabul ettiğinde bunlar da tokenlere çevrilir; eklediğin bir ekran görüntüsünün metninle aynı bütçeden yemesinin nedeni budur.

Bir kelime kaç token eder?

İngilizce metin için yaygın bir pratik kural token başına yaklaşık dört karakter, yani kabaca bir kelimenin dörtte üçüdür. Bu tahmine göre 1.000 token yaklaşık 750 İngilizce kelime, 3.000 kelimelik bir makale de yaklaşık 4.000 token eder.

Oran içeriğe göre değişir:

  • Diğer diller aynı anlam için çoğu zaman daha fazla token harcar. Tokenizer'lar İngilizcenin ağırlıkta olduğu verilerle eğitilir, bu yüzden İngilizce kelimeler kompakt tokenler alırken Türkçe, Japonca, Korece, Arapça, Hintçe ve birçok başka dildeki metin daha fazla parçaya bölünür. Eklerle uzayan Türkçe kelimeler bunun iyi bir örneğidir. Fark tokenizer'a bağlıdır ve yeni tokenizer'larda azaldı, ama ortadan kalkmadı.
  • Kod girinti, parantez, operatör ve uzun tanımlayıcılar için token harcar, bu yüzden bir dosya çoğu zaman kelime sayısının düşündürdüğünden daha fazla token tutar.
  • Sayılar, URL'ler ve alışılmadık dizeler, örneğin ID'ler ve hash'ler, genellikle birçok küçük tokene bölünür.

Tokenler neden önemli

Maliyet. API'ler token başına ücret alır; gönderdiğin tokenler ve modelin yazdığı tokenler için ayrı fiyatlar vardır. Bir sohbette her yeni mesajla bütün konuşma yeniden gönderilir, yani uzun bir sohbette mesaj başına maliyet kısa bir sohbettekinden fazladır.

Sınırlar. Bir modelin tek bir istekte okuduğu ve yazdığı her şey için bir bağlam penceresi, çoğu zaman da tek bir yanıtın ne kadar uzun olabileceğine dair ayrı bir üst sınırı vardır. API'de bu sınırı kendin belirleyebilirsin, Anthropic'in API'sinde ise belirlemek zorundasın: max_tokens zorunlu bir parametredir.

Hız. Yanıt token token üretilir, bu yüzden daha uzun bir yanıtın bitmesi orantılı olarak daha uzun sürer.

Harf görevleri. Model magic gibi bir kelimeyi beş harf olarak değil, bir ya da iki birim olarak gördüğü için, harf saymak, bir kelimeyi ters çevirmek ya da tam belirli uzunlukta kelimeler bulmak gibi tek tek karakterlere dayanan görevler onun için göründüğünden zordur. Yeni modeller bunların çoğunu daha iyi yapıyor, ama karakterler önemliyse cevabı kontrol et ya da modelden önce kelimeyi harf harf yazmasını iste.

Bağlam penceresi nedir?

Bağlam penceresi, bir modelin tek bir istekte hesaba katabileceği en fazla token sayısıdır. Onu modelin çalışma belleği gibi düşün: modelin yanıtını yazmak için kullanabileceği her şeyin aynı anda içine sığması gerekir, şunlar dahil:

  • sistem promptu, yani uygulamanın kendi talimatları ve seninkiler
  • o ana kadarki sohbet, her kullanıcı mesajı ve her yanıt
  • eklenen dosyalar, yapıştırılan belgeler ve arama ya da araç sonuçları
  • yazılmakta olan yanıt

Pencerenin dışında kalan hiçbir şey model için yoktur. Bir şeylere bakabileceği arka planda bir hafıza yoktur. Bağlam penceresi boyutları modelden modele çok değişir ve büyümeye devam eder, bu yüzden bir makaledeki sayıya güvenmek yerine kullandığın modelin sağlayıcı dokümantasyonuna bak.

Model istekler arasında da hiçbir şey saklamaz. Bir sohbette hafıza gibi görünen şey, uygulamanın her seferinde bütün konuşmayı yeniden göndermesidir. Sohbet uygulamalarındaki hafıza özellikleri de aynı şekilde çalışır: uygulama hakkında notlar kaydeder ya da önceki sohbetlerinde arama yapar ve bulduğunu yeni sohbetlerin bağlamına ekler.

Sohbet uzadığında ne olur

Bir sohbet bağlam penceresini aştığında bir şeyden vazgeçilmesi gerekir. Uygulamaya göre en eski mesajlar atılır, eski kısımlar bir özetle değiştirilir ya da sohbetin sınırına ulaştığı ve yeni bir sohbet başlatman gerektiği söylenir. Her durumda baştaki ayrıntılar, ilk mesajda verdiğin talimatlar dahil, cevapları etkilemeyi bırakabilir.

Dolu bir pencere tek sorun değil. Modelin önündeki malzeme ne kadar çoksa gözden kaçacak şey de o kadar çoktur ve uzun bir sohbette ilk kararlar o zamandan beri söylenen her şeyle yarışır. Belirtileri şunlardır: daha önce koyduğun bir kısıtı yok sayan cevaplar, zaten düzelttiğin bir sürüme geri dönen kod ya da reddettiğin bir fikri tekrarlayan bir model.

Bağlam penceresi içinde çalışmak

Her görev için yeni bir sohbet başlat. Net bir ilk mesajı olan yeni bir sohbet, birkaç konu arasında sürüklenmiş uzun bir sohbetten genellikle daha iyidir.

Bir özeti yanında taşı. Bir sohbette işe yarar kararlar biriktiyse yeni bir sohbete yapıştırılmak üzere yazılmış bir özet iste, sonra orada devam et. Aşağıdaki boşlukları kendi işine göre doldur.

Yeni bir sohbette devam et
Fill in
Bu sohbet uzamaya başladı. İşe devam etmek için yeni bir sohbete yapıştırabileceğim bir özet yaz. Şunları dahil et: hedef, aldığımız kararlar ve nedenleri, veritabanı şemasının güncel hâli ve açık sorular. veritabanı şemasının kendisi hariç özet 200 kelimeyi geçmesin.
Try it
Example replyReplies vary between models and runs.

Hedef: SQLite'ta saklanan küçük bir kütüphane uygulaması için veritabanı.

Kararlar:

  • Ödünç verme işlemleri kendi tablosunda tutulacak, böylece ödünç geçmişinin tamamı saklanır.
  • Bir kitabın returned_at alanı boş olan bir ödünç kaydı yoksa kitap müsait sayılır.

Güncel şema:

CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT NOT NULL, author TEXT NOT NULL);
CREATE TABLE members (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE);
CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  loaned_at TEXT NOT NULL,
  returned_at TEXT
);

Açık sorular:

  • Gecikme ücretine ihtiyacımız var mı?
  • Kütüphane aynı kitabın birden fazla kopyasını takip etmeli mi?

Sadece görevin gerektirdiğini yapıştır. Bütün depoyu değil, hatalı fonksiyonu ve onu çağıran kodu. Kırk sayfanın tamamını değil, sözleşmenin söz konusu bölümünü. Daha az malzeme, gözden kaçacak daha az şey bırakır.

Soruyu uzun malzemeden sonra sor ve önemli olanı tekrarla. Uzun bir belge yapıştırdığında sorunu sonda, belgeden sonra sor ve önemli kısıtları orada tekrarla. Böylece talimat, modelin yazmaya başladığı noktanın yanında durur.

Tek mesaja sığmayacak kadar uzun bir belgeyi böl. Bazı uygulamalar, modelin penceresi daha fazlasını tutabilecek olsa bile tek bir mesaja ne kadar yapıştırabileceğini sınırlar. Belgeyi parçalar hâlinde göndermek mesaj sınırını aşar, ama bağlam penceresini aşmaz: her parça yine ondan yer kaplar. Modele baştan her şeyi gönderene kadar cevap vermemesini söyle.

Fill in
Sana uzun bir belgeyi 3 parça hâlinde göndereceğim. Her parçadan sonra sadece "3 parçadan N. parça alındı" diye cevap ver, başka hiçbir şey yazma. Ben sorumu sorana kadar hiçbir şeyi özetleme ya da cevaplama. Parça 1 / 3: """ [1. parçayı buraya yapıştır] """
Try it
Example replyReplies vary between models and runs.

3 parçadan 1. parça alındı

Önemli olduğunda tokenleri say. Bir API ile geliştirme yapıyorsan göndermeden önce say. OpenAI'ın açık kaynak tiktoken kütüphanesi metni OpenAI'ın tokenizer'larıyla böler, Anthropic'in API'sinde de bir token sayma endpoint'i var. Bir sağlayıcının tokenizer'ından gelen sayılar, bir başkası için sadece tahmindir.

import tiktoken

enc = tiktoken.get_encoding("o200k_base")  # one of OpenAI's tokenizers
tokens = enc.encode("Tokenization isn't magic.")
print(len(tokens))
print([enc.decode([t]) for t in tokens])

Bir model etrafında uygulama kurduğunda pencereye neyin hangi sırayla gireceğine karar vermek kendi başına bir tasarım problemine dönüşür. Bağlam mühendisliği bunu anlatır; prompt zincirleme ise büyük bir işi her biri rahatça sığan adımlara nasıl böleceğini gösterir. Tek bir mesajın girdinin tamamına nasıl oturduğu için prompt nedir sayfasına bak.

Sıkça Sorulan Sorular

Yapay zekâda token nedir?

Token, bir dil modelinin okuyup yazdığı metin birimidir. Yaygın bir kelimenin tamamı, uzun bir kelimenin bir parçası, bir noktalama işareti ya da bir boşluk parçası olabilir. Model promptunu görmeden önce bir tokenizer onu tokenlere böler ve her birini bir sayıya çevirir; model de yanıtını her seferinde bir token olmak üzere üretir.

1.000 token kaç kelime eder?

İngilizce için yaygın bir pratik kural token başına yaklaşık dört karakterdir, bu da 1.000 token için kabaca 750 kelime eder. Gerçek sayı modelin tokenizer'ına ve metne bağlıdır. Kod, sayılar ve Türkçe dahil İngilizce dışındaki birçok dil aynı miktarda içerik için daha fazla token kullanır.

Bağlam penceresi nedir?

Bağlam penceresi (context window), bir modelin tek bir istekte hesaba katabileceği en fazla token sayısıdır. Sistem promptunu, o ana kadarki sohbeti, eklenen dosyaları ya da araç sonuçlarını ve modelin yazmakta olduğu yanıtı tutması gerekir. Onun dışında kalan hiçbir şey model için yoktur.

Bir sohbet bağlam penceresini aşınca ne olur?

Uygulamanın yer açması gerekir. Uygulamaya göre en eski mesajları atar, onları bir özetle değiştirir ya da sohbetin sınırına ulaştığını söyler. Her durumda sohbetin başındaki talimatlar ve ayrıntılar cevapları etkilemeyi bırakabilir; uzun sohbetlerin bazen bir şeyleri unutuyor gibi görünmesinin nedeni budur.

ChatGPT ya da Claude önceki sohbetlerimi hatırlar mı?

Modelin kendisi hatırlamaz. Her yanıt o istek için bağlam penceresinde ne varsa ondan üretilir. Bazı uygulamaların hakkında notlar kaydeden ya da geçmiş sohbetlerinde arama yapıp bulduklarını yeni sohbetlere ekleyen hafıza özellikleri vardır, projeler de ortak dosya ve talimatlar içerebilir; ama bu, modelin hatırlaması değil, uygulamanın bağlama metin koymasıdır.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA