Adım bütçesi ve gecikme yönetimi
Ajan döngüsünde maliyetin neden adım sayısıyla birlikte hızla büyüdüğünü, belirtiden kaldıraca nasıl gideceğinizi ve bütçenin istemde değil kodda nasıl zorlanacağını öğretir.
Önkoşul: Function Calling, Evaluation
BU DERSİN SONUNDA
- Döngü maliyetinin adım sayısıyla nasıl büyüdüğünü kendi varsayımlarınızla hesaplamak
- Maliyet ve gecikme kaldıraçlarını gözlenen belirtiye göre seçmek
- Adım, token ve süre bütçesini döngü kodunda zorlamak
- Birim maliyeti tamamlanmış görev başına raporlamak
- 1
Teori
Kavramın çalışma mantığı
- 2
Örnek
Gerçek bir senaryo üzerinde gösterim
- 3
Lab
Uygulamalı alıştırma
- 4
Test
Kısa ölçüm
- 5
Proje
Rotadaki projeye katkı
Kısa cevap
Ajan maliyeti çağrı başına değil, tamamlanmış görev başına ölçülür; çünkü döngünün her adımı o ana kadar birikmiş bütün izi yeniden gönderir. Adım sayısı arttıkça gönderilen token toplamı doğrusal değil, yaklaşık karesel büyür. Kaldıraçlar da buradan çıkar: döngüyü kısaltmak, her adımın girdisini küçültmek ve sabit öneki yeniden kullanmak.
Teori: aynı metni kaç kez gönderiyorsunuz#
Model çağrıları durum tutmaz. Her adımda sistem istemi, araç şemaları ve o ana kadarki bütün ara adımlar baştan gönderilir. Dolayısıyla onuncu adımın girdisi birinci adımın girdisinden çok büyüktür ve fatura, son izin boyutu değil bütün adımların girdilerinin toplamıdır. Maliyet tartışmasının çoğu bu ayrımı atladığı için sonuçsuz kalır.
Varsayalım: sabit önek (sistem istemi ve araç şemaları) 2.000 token, her adım ize ortalama 500 token ekliyor. Onuncu adımın girdisi 2.000 + 9 × 500 = 6.500 token. Ama on adımın girdi toplamı 10 × 2.000 + 500 × (0 + 1 + … + 9) = 20.000 + 22.500 = 42.500 token; yani son izin yaklaşık altı buçuk katı. Bu sayılar bir ölçüm değil, yukarıdaki iki varsayımdan çıkan aritmetik; kendi önek ve adım büyüklüğünüzü yerine koyup tekrar hesaplayın.
Gecikme ayrı bir eksendir. Token maliyeti toplanır, gecikme ise zorunlu sıralı zincirin uzunluğuna bağlıdır. Bağımsız iki araç çağrısı paralel koşabilir; bir sonraki kararı besleyen çağrı koşamaz. Bu yüzden gecikmenin bir tabanı vardır ve o taban adım sayısıdır: daha hızlı bir kurulum bu tabanı kaldırmaz, yalnızca her adımı biraz kısaltır.
Uygulamada: belirtiden kaldıraca#
| Belirti | Olası neden | Kaldıraç | Bedeli |
|---|---|---|---|
| Görev başına adım sayısı yüksek | Bitirme ölçütü belirsiz, araç yanıtları eksik bilgi veriyor | Bitirme koşulunu tanımla; araç yanıtını modelin tek adımda kullanabileceği biçimde döndür | Araç yanıtı tasarımı ek geliştirme işi |
| Her adımın girdisi büyük | Ham araç çıktısı bağlama olduğu gibi giriyor | Yanıtı gerekli alanlara indir, uzun metni özete çevir, sayfalama uygula | Yanlış alan atılırsa bilgi kaybı ve gizli hata |
| Sabit önek büyük | Çok sayıda araç şeması ve uzun sistem istemi | Araç setini daralt, şema açıklamalarını kısalt, alt görevi ayrı ajana ver | Bölme devir maliyeti ve ek gecikme getirir |
| Aynı önek her adımda yeniden işleniyor | Önek kararsız: değişken alanlar veya zaman damgası başta | Değişkenleri sona al, öneki birebir sabit tut ve önek önbelleklemesinden yararlan | Önbellek yalnızca birebir aynı önekte çalışır |
| Tek koşu çok uzun sürüyor | Zorunlu sıralı zincir uzun | Bağımsız çağrıları paralel koştur, ilk yararlı çıktıyı akışla göster | Paralellik kısmi sonuç ve yarış durumu yönetimi gerektirir |
| Basit görevler pahalı | Her görev en ağır kurulumda koşuyor | Girişte zorluk sınıflandır, kolay yolu kısa kurulumla çöz | Yanlış sınıflandırma yeniden koşma maliyeti yaratır |
Bütçeyi kodda zorlamak#
İsteme "gereksiz araç çağırma" yazmak bütçe değil, ricadır. Bütçe döngüyü yürüten kodda durur: adım sınırı, token sınırı, süre sınırı ve sınıra gelindiğinde ne yapılacağı. Sınıra çarpan koşu sessizce kesilmemeli; kısmi sonucu ve nedenini taşıyan ayrı bir durumla bitmeli. Değerlendirmenin ve kullanıcının "bütçe doldu" ile "yapamadı" ayrımına ihtiyacı var.
def dongu_calistir(gorev, arac_kosucu, sinirlar):
"""Adim, token ve sure sinirlarini dongunun kendisinde zorlar."""
adim = 0
token_toplam = 0
baslangic = simdi()
iz = []
while True:
adim += 1
if adim > sinirlar['azami_adim']:
return sonuc('butce-adim', iz)
if token_toplam > sinirlar['azami_token']:
return sonuc('butce-token', iz)
if simdi() - baslangic > sinirlar['azami_sure']:
return sonuc('butce-sure', iz)
karar = model_cagir(gorev, iz)
token_toplam += karar.girdi_token + karar.cikti_token
if karar.bitti:
return sonuc('tamam', iz)
cikti, atilan = kirp(
arac_kosucu(karar.arac, karar.argumanlar),
sinirlar['azami_arac_yaniti'],
)
iz.append({'karar': karar, 'cikti': cikti, 'kirpilan_alanlar': atilan})Karar: hangi kaldıracı önce çekmeli#
- 1Birimi düzelt
Maliyeti tamamlanmış görev başına token, süre ve para olarak ölçün. Başarısız koşuların maliyeti bölene değil paya yazılır; yoksa ucuz görünen kurulum aslında pahalıdır.
- 2Dağılımı çıkar
Toplam girdi tokeninin ne kadarı sabit önek, ne kadarı araç yanıtları, ne kadarı model üretimi? En büyük dilim hangi kaldıraca bakacağınızı söyler.
- 3Tek kaldıraç çek
Bir değişiklik uygulayın, görev setini tekrar koşturun ve tamamlama oranının düşüp düşmediğine bakın.
- 4Kabul et ya da geri al
Birim maliyet düştü ama tamamlama da düştüyse kazanç yoktur. Kararı iki sayıyı birlikte yazarak verin.
Sık yapılan hata#
En yaygın hata ucuz kurulumu ucuz sanmak: daha küçük bir kurulum adım başına az öder ama görevi tamamlayamaz, tekrar denenir ve insan müdahalesi üretir; tamamlanmış görev başına toplam maliyet artabilir. İkinci hata ortalama gecikmeye bakmak. Kullanıcı deneyimini belirleyen, yavaş koşuların ne kadar yavaş olduğudur; ortalama bunu saklar, o yüzden rapora en yavaş dilim de yazılır.
LAB · UYGULAMALI ALIŞTIRMA
Token bütçesinin dağılımını çıkarın
- 1Görev setinizden on koşunun izini alın ve her adımın girdi tokenini üç kovaya ayırın: sabit önek, araç yanıtları, model üretimi.
- 2Görev başına toplam girdi tokenini ve adım sayısını tabloya yazın; en pahalı iki görevi işaretleyip neden pahalı olduklarını bir cümleyle not edin.
- 3En büyük kovaya karşılık gelen tek bir kaldıracı uygulayın: araç setini daraltmak, araç yanıtını gerekli alanlara indirmek veya öneki sabitleyip değişkenleri sona almak.
- 4Döngüye adım ve token sınırı ekleyin; sınıra çarpan koşuların ayrı bir bitiş durumuyla ve kısmi sonuçla dönmesini sağlayın.
- 5Seti tekrar koşturun ve üç sayıyı birlikte raporlayın: tamamlanmış görev başına token, görev başına adım sayısı ve en yavaş koşunun süresi.
Beklenen çıktı
Görev başına token dağılımı tablosu, uygulanan tek kaldıracın önce/sonra etkisi ve döngüye eklenmiş sert adım, token ve süre sınırları.
Sık sorulan sorular
Önek önbelleklemesi neden bazen hiç devreye girmiyor?
Önbellek birebir aynı öneki gerektirir. Öneke tarih, oturum kimliği, kullanıcı adı veya sıralaması değişen bir araç listesi koyduğunuzda her koşu farklı bir önek üretir ve yeniden işlenir. Değişken alanları önekten sonraya taşımak, önbellekten yararlanmanın ön koşuludur.
Adım sınırına çarpan koşu başarısız mı sayılır?
Değerlendirmede ayrı bir kategori olmalı. "Bütçe doldu" ile "yanlış yaptı" aynı kovaya girerse iki farklı düzeltme karışır: birincisi bütçe ve döngü tasarımı sorunudur, ikincisi araç şeması veya istem sorunu. Aynı kovada tutulduğunda ikisi de yanlış yerde aranır.
Paralel araç çağrısı her zaman kazanç mı?
Yalnızca çağrılar gerçekten bağımsızsa. Sonraki çağrının argümanı önceki sonuca bağlıysa paralellik ya işe yaramaz ya da boşa harcanan çağrı üretir. Yazma yapan çağrıları paralel koşturmak ayrıca yarış durumu ve geri alması zor yan etkiler doğurur.
LEARN
AI Agent Developer rotasına devam et
Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.
