Bloga dön

Yeni başlayanlar için AIKılavuz

Uzun bir AI sohbeti neden daha pahalı: API geçmişi yeniden gönderir

Bir AI sohbetindeki her yeni mesaj tüm geçmişi yeniden gönderir, böylece giriş her turda büyür. Aritmetiği ve maliyeti düşürmenin 3 yolunu görün.

Yazan: CheapTokens TeamYayınlanma tarihi: Güncellenme tarihi: 4 dk okuma

Kapak: “Uzun bir sohbet her mesajla neden daha pahalı” — API her turda tüm geçmişi yeniden gönderir
Bu sayfada
  1. Kısa cevap
  2. Uydurma sayılarla işlenmiş bir örnek
  3. Güncel fiyatlarla maliyeti
  4. Maliyeti düşürmenin üç yolu
  5. 1. Konu değiştiğinde yeni bir sohbet başlatın
  6. 2. Geçmişi kırpın
  7. 3. Eski turları bir özetle değiştirin
  8. Kendi kodunuzda görün
  9. Uzun sohbetleri nerede çalıştırmalı

Bir sohbetin ilk mesajları ucuzdur. Ellinci mesaj, onuncu mesajdan belirgin şekilde daha pahalıdır, oysa aynı miktarda yazdınız. Hiçbir şey bozuk değil: sohbet API'leri böyle çalışır.

Kısa cevap#

Bir model önceki isteklerinizi hatırlamaz. OpenAI'nin dokümantasyonu bunu doğrudan söyler: "her metin üretim isteği bağımsız ve durumsuzdur" ve çok turlu bir konuşma için önceki mesajları ve modelin önceki cevabını bir sonraki isteğe dahil edersiniz. Anthropic'in Messages API aynı deseni tanımlar: önceki turların messages parametresinde iletildiği durumsuz çok turlu konuşmalar.

Yani bir uygulamada gördüğünüz sohbet penceresi, uygulama tarafından kurulan bir yanılsamadır. Arka planda her yeni mesaj, o ana kadarki tüm konuşmayı taşıyan yeni bir istektir. Her istekte giriş token'ları için ödeme yaparsınız ve geçmiş bu girişin bir parçasıdır. Terimlere yeniyseniz önce Token nedir ve Giriş ve çıkış token'ları yazılarını okuyun.

OpenAI, yanıt zincirleri için faturalandırma tarafını açıkça belirtir: zincirdeki tüm önceki giriş token'ları giriş token'ı olarak faturalandırılır. Geçmişi kendiniz gönderdiğiniz her API için aynı ilke geçerlidir: gönderdiğiniz şey sayılan şeydir.

Uydurma sayılarla işlenmiş bir örnek#

Aşağıdaki sayılar bir öğretim örneğidir, ölçüm değildir. Her mesajınızın yaklaşık 200 token, her cevabın yaklaşık 300 token olduğunu varsayın. Tamamlanmış bir alışveriş geçmişe 500 token ekler.

Tur Yeniden gönderilen önceki geçmiş Yeni mesaj Bu isteğin girişi Çıkış
1 0 200 200 300
5 500 × 4 = 2.000 200 2.200 300
10 500 × 9 = 4.500 200 4.700 300
20 500 × 19 = 9.500 200 9.700 300

Cevap aynı uzunlukta kalır, ancak 20. turun girişi 1. turun girişinin neredeyse elli katıdır. Çıkış büyümez; giriş büyür.

Şimdi 20 turluk bir sohbetin toplamı. Geçmiş, alışveriş sayısının 0, 1, 2 ... 19 katı olarak yeniden gönderilir, bu basit bir toplamdır:

  • Yeniden gönderilen eski alışverişler: 500 × 190 = 95.000 token (190, 0 + 1 + 2 + ... + 19'dur).
  • Yeni mesajlar: 200 × 20 = 4.000 token.
  • Sohbet için toplam giriş: 95.000 + 4.000 = 99.000 token.
  • Toplam çıkış: 300 × 20 = 6.000 token.

Model her şeyi ücretsiz hatırlasaydı, giriş yalnızca 200 × 20 = 4.000 token olurdu. Geri kalanı yeniden gönderilen geçmiş. Tur sayısını ikiye katlamak geçmişin maliyetini ikiye katlamaz, kabaca dörde katlar, çünkü toplam tur sayısının karesiyle büyür.

Güncel fiyatlarla maliyeti#

Aynı 20 turluk sohbet (99.000 giriş, 6.000 çıkış) güncel fiyatlarla. Tablo canlıdır ve tarifeler değiştiğinde güncellenir; son sütun karşılaştırma için OpenRouter'ın referans fiyatıdır.

Model Maliyet OpenRouter
GLM-5.3-Flash $0.0022 $0.0045
DeepSeek-V4-Flash $0.0021 $0.0056
MiniMax-M2.7 $0.0059 $0.0369

Toplamda 99.000 giriş ve 6.000 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.

Metinle hızlı bir kontrol için: MiniMax-M2.7'de bu konuşmanın tamamı $0.0059 tutar. Girişin baskın olduğu bunun gibi bir sohbette en çok giriş fiyatı önemlidir: MiniMax-M2.7'de OpenRouter'ın referans fiyatından daha ucuzdur. 1M token başına MiniMax-M2.7 giriş için $0.05, çıkış için $0.15.

Maliyeti düşürmenin üç yolu#

1. Konu değiştiğinde yeni bir sohbet başlatın#

En ucuz geçmiş boş olandır. Bir fonksiyonda hata ayıklamayı bitirdiyseniz ve şimdi bir tarif istiyorsanız, yeni bir sohbet 9.700 yerine 200 token gönderir. Bir uygulamada bu tek bir düğmedir; kodda history = []. Önceki bağlam bir sonraki soruya artık yardımcı olmadığında bunu yapın.

2. Geçmişi kırpın#

Yalnızca son birkaç mesajı tutun ve gerisini atın. Son üç alışverişi tuttuğunuzu varsayalım, böylece geçmiş hiçbir zaman 500 × 3 = 1.500 token'ı aşmaz:

  • 1-3. turlar normal büyür: 0 + 500 + 1.000 = 1.500 token geçmiş.
  • 4-20. turların her biri sınırlanmış 1.500'ü taşır: 1.500 × 17 = 25.500 token.
  • Geçmiş toplamı: 1.500 + 25.500 = 27.000 token, artı 4.000 yeni mesaj = 31.000 token giriş.

Aynı 20 tur için 99.000 yerine 31.000, ve MiniMax-M2.7'de $0.0025 tutar. Kırpmanın bedeli, modelin sohbetin başlangıç kısmını unutmasıdır, bu yüzden sistem istemini ve kaybetmemesi gereken olguları kırpılan kısmın dışında tutun.

3. Eski turları bir özetle değiştirin#

Geçmiş uzadığında, modelden bir kez özetlemesini isteyin, sonra tam metin yerine özetle devam edin. Yukarıdaki örnekte dokuz alışveriş 4.500 token'dır; yaklaşık 300 token'lık bir özet ana noktaları ileri taşır. Özeti yazmak için bir ekstra istek ödersiniz ve sonraki her istek daha hafif olur. Bu, düz kırpmadan daha fazla anlam korur, karşılığında biraz ayrıntı kaybeder.

Bağlam penceresi ayrı bir sınırdır: bir isteğin cevap dahil kaç token tutabileceğini sınırlar. Geçmiş eninde sonunda bu tavana çarpacaktır; Bir AI cevabı neden cümle ortasında durur? bunu açıklar.

Kendi kodunuzda görün#

Yanıt bir usage nesnesi içerir, böylece büyümeyi kendiniz izleyebilirsiniz. Bu bir örnektir: anahtarı değiştirin ve model kimliğini CheapTokens dokümantasyonundan alın, çünkü kimlikler sağlayıcılar arasında farklıdır.

python
from openai import OpenAI

client = OpenAI(base_url='https://api.cheaptokens.dev/v1', api_key='YOUR_KEY')

system = {'role': 'system', 'content': 'You are a helpful assistant.'}
history = []
KEEP = 7  # new message + last 3 exchanges (6 messages); None keeps everything

def ask(text):
    history.append({'role': 'user', 'content': text})
    r = client.chat.completions.create(
        model='MODEL_ID_FROM_DOCS',
        messages=[system] + (history[-KEEP:] if KEEP else history),
    )
    answer = r.choices[0].message.content
    history.append({'role': 'assistant', 'content': answer})
    print(r.usage.prompt_tokens, r.usage.completion_tokens)
    return answer

ask()'ü arka arkaya birkaç kez çağırın ve prompt_tokens yazdırın: KEEP = None ile her turda yükselir, KEEP = 7 ile düzleşir. Birçok adımdan geçen ajanlar için aynı etki her adımda geçerlidir; Bir AI ajanının maliyeti nasıl tahmin edilir bunun için nasıl bütçe yapılacağını gösterir.

Uzun sohbetleri nerede çalıştırmalı#

Uzun diyaloglar ve ajan döngüleri tam olarak giriş hacminin baskın olduğu iş yükleridir, bu yüzden geniş bir bağlam penceresi ve uzun cevaplar için alan ikisi de önemlidir:

  • MiniMax-M2.7: 180K bağlam, cevap başına 8.192 token'a kadar, giriş ve çıkış ikisi de OpenRouter'ın referans fiyatından daha ucuz.
  • DeepSeek-V4-Flash: 380K bağlam, cevap başına 32.768 token'a kadar, çıkış OpenRouter'ın referans fiyatından daha ucuz.

CheapTokens tüm modeller için tek bir bakiye, yoğun saatler olmadan model başına sabit fiyat ve OpenAI Chat Completions ile Anthropic Messages ile uyumlu bir API sunar, böylece yukarıdaki kod temel URL'yi değiştirerek çalışır. CheapTokens ile ilk API isteğiniz yazısını izleyerek bakiyeyi yükleyin ve ilk isteğinizi gönderin.