İçeriğe geç

Araç bağlamı ve istem önbelleği

Yerleşik harness’ın yaptığı her istek için iki şey doğrudur: araç tanımları o istekteki en büyük sabit maliyettir ve neredeyse hiçbiri kullanılmayacaktır. Bu sayfa, Control Center’ın bu konuda ne yaptığını ve yanıtın neden basitçe “daha az araç gönder” olmadığını açıklar.

Control Center yaklaşık 126 araç kaydeder. Tamamı gönderildiğinde tanımları her istekte kabaca 23.000 token’a mal olur — hiçbir sıkıştırmanın dokunamayacağı bir maliyet, çünkü araç tanımları istekte konuşmadan ayrı bir bölümde yol alır.

Token faturası bariz şikâyettir ve istem önbelleğiyle birlikte aynı zamanda daha küçük olanıdır. Asıl maliyet seçim doğruluğudur. Yayımlanmış araç çağırma değerlendirmeleri, modellerin bağlamda 30–50 araç civarına kadar doğru aracı güvenilir biçimde seçtiği, bunun ötesinde giderek kötüleştiği konusunda hemfikirdir. Adı konulan neden token sayısı değil anlamsal örtüşmedir: bir katalogda açıklamaları birbirine benzeyen birkaç araç bulunduğunda, model bir yeteneği hatırlamak yerine benzer görünenler arasında seçim yapar.

126 araçta bir ajan, her turda bu bandın çok ötesindedir — yalnızca bir dosya okuması gereken birçok tur dahil.

Bu nedenle bir çalıştırmaya iki şey gösterilir:

  • yerleşik bir küme — her istekte tam şemalarıyla gönderilen, yaklaşık iki düzine araç;
  • geri kalan her şeyin bir ad dizini, “Biletler ve projeler” ya da “Bellek ve bilgi” gibi başlıklar altında gruplanmış ve tüm katalog için birkaç yüz tokene mal olan.

Güncel katalog üzerinde ölçüldüğünde bu, araç bloğunu ~23,1 bin tokendan ~5,0 bin tokene, yaklaşık %78 daha küçüğe indirir ve her zaman görünür kalan kümeyi, seçimin güvenilir olduğu bandın içine yerleştirir.

Yerleşik küme, bir çalıştırmanın çoğu çalıştırmada kullandığı araçlardır: dosya ve kabuk sözcük dağarcığı (read, write, edit, search, bash, …), keşif araçları, görev kontrol listesi, bellek araması ve geçerli modun çıktısını teslim etmek için çağırmak zorunda olduğu fiil. Bir modun kendi çıktı fiili her zaman yerleşiktir — bir çalıştırma, teslimatını üreten tek çağrıyı aramak zorunda kalmamalıdır.

İstek üzerine yüklenen araç, kullanılamaz demek değildir

Bölüm başlığı “İstek üzerine yüklenen araç, kullanılamaz demek değildir”

Tasarımı yalnızca ucuz değil güvenli kılan kısım burasıdır. İstek üzerine yüklenen bir araç ilk turdan itibaren çağrılabilir. Yalnızca şeması saklanır.

Ajan adı isteminde görür. Bu adı doğrudan çağırırsa, harness şemayı yükler ve aracı aynı adımda çalıştırır — hata yok, gidiş-dönüş yok. Modelin, aracın bir zamanlar “boşaltılmış” olduğunu bilmesine gerek yoktur.

Ajan görevi bilip adı bilmediğinde, search_tools düz dille bir açıklama alır (“bir bileti birine ata”), çalıştırmanın tüm yüzeyini sıralar ve eşleşmeleri şemaları zaten yüklenmiş olarak döndürür; böylece bir sonraki tur bunlardan birini çağırabilir. Bir arama hiçbir şey bulamazsa bunu açıkça söyler ve farklı bir ifade ya da daha geniş bir arama önerir — bu bilinçlidir, çünkü boş bir aramayı “bu yetenek yok” diye okuyan bir ajan yeniden bakmak yerine bir ikame uydurur.

search_tools yalnızca yerleşik harness’ta bulunur. Harici MCP istemcileri bunun yerine aynı dizini sıralayan ama yalnızca eşleşmeleri betimleyen search_tool_bm25’e sahiptir — o istemciler tüm şemaları zaten tools/list’ten almıştır, dolayısıyla yüklenecek bir şey yoktur.

İstek üzerine yükleme, modun araç filtresinden sonra uygulanır, asla onun yerine değil. Bir şemayı gizler; modun reddettiği bir aracı açığa çıkaramaz. Etkinleştirilen bir araç yine onay isteminden ve eylem korumalarından tıpkı yerleşik bir araç gibi geçer ve bir araç, başlangıçta çalıştırmanın yüzeyinde olmayan bir adı yükleyemez.

Harici istemcilerin gördüğü MCP yüzeyi etkilenmez. tools/list yine tam kataloğu döndürür. Bunu kırpmaya yönelik daha erken bir girişim ajanları tamamen bozdu: MCP istemcileri araç adlarını kendi önbelleğe alınmış listelerine göre doğrular ve sunucuya hiç sormadan listelenmemiş olan her şeyi reddeder; böylece “gizli ama çağrılabilir” bir araç basitçe erişilemezdi. İstek üzerine yükleme, bir aracı çalıştırma ortasında yüklemenin harness’ın gerçekten yapabildiği bir şey olduğu harness’ta yaşar.

--tool-deferral=off (veya CC_SERVER_TOOL_DEFERRAL=off) kabul edilen her aracı yeniden yerleşik yapar ve sunucunun istek üzerine yükleme var olmadan önce yaptığı isteklerin aynısını üretir. cc_server CLI başvurusuna bakın.

Ajan iş yükleri dengesizdir: turdan tura, her seferinde aynı önekle, çok büyük istemler gönderip küçük yanıtlar alırlar. Sağlayıcılar o öneki önbelleğe alır ve bir önbellek okuması taze bir okumanın yaklaşık onda birine mal olur. Dolayısıyla önbellek isabet oranı, harness’ın bir optimizasyonu değil birinci sınıf bir özelliğidir — ve Anthropic’te ayrıca verim kazandırır, çünkü önbelleğe alınmış token’lar dakikalık girdi sınırına sayılmaz.

Önbelleğe alma tam bir önek eşleşmesi üzerinde çalışır ve bu da tek bir yönetici kural doğurur.

Değişen her bayt, önbelleği o noktadan itibaren geçersiz kılar. Bu yüzden harness yalnızca ekler: yeni iletileri sona, yeni etkinleştirilen araç şemalarını da önbelleğe alınmış araç bloğunun ardına, ona karıştırmak yerine. Bu sıralama, etkinleştirmenin ucuz olmasının nedenidir — önbelleğe alınmış önek aynı kalır ve çalıştırma yalnızca az önce yüklediği şemalar için ödeme yapar.

Döngü ayrıca bağlamı geri kazanmak için eski turlardan bayat araç çıktısını kırpar. Yeniden yazmaya değecek kadar geri kazanılacak şey birikene kadar bekler; böylece bir kırpma, sürekli bir önbellek ıskası yerine nadir bir derin yeniden yazma olur.

Bir sağlayıcı sınırlı sayıda önbellek işaretçisine izin verir ve Control Center bunları bilinçli harcar:

İşaretçi Kapsadığı Ömür
Son yerleşik araç Araç bloğu 1 saat
Son sistem bloğu Araçlar + sistem istemi 1 saat
Önceki turun kuyruğu Son isteğe kadarki geçmiş 5 dk
Geçerli turun kuyruğu Geçmişin tamamı 5 dk

Son ikisi yuvarlanan bir çifttir ve bu çiftin nedeni incedir: bir önbellek araması, daha önceki bir isteğin sakladığı bir şeyi geriye dönük olarak sınırlı sayıda blok tarar. Paralel olarak birçok araç çalıştıran tek bir tur, o pencereden daha fazla blok üretebilir; bu noktada bir kuyruk işaretçisi sessizce ıskalar ve istek, yanıtta bunu söyleyen hiçbir şey olmadan tam fiyatı öder. Önceki isteğin durduğu tam noktayı işaretlemek, isabeti bir yarış yerine yapısal hale getirir.

Araçlar-ve-sistem öneki uzun ömrü alır çünkü tüm çalıştırma boyunca sabittir, aynı biçime sahip her çalıştırma ve alt ajan tarafından paylaşılır ve saat bir istek başladığında işlemeye başlar — birkaç dakika boyunca akış yapan bir tur, bir sonraki istek oluşmadan önce kısa bir pencerenin çoğunu çoktan harcamıştır.

Aynı türden alt ajanlar bayt düzeyinde özdeş istem önekleri üretir, dolayısıyla her biri kendi girdisini yazmak yerine tek bir önbellek girdisini okumalıdır. Ancak bir girdi, ancak onu yazan istek yanıt vermeye başladığında okunabilir hale gelir; bu yüzden tek seferde başlatılan bir yayılımda her alt ajan, hepsinin paylaştığı bir önek için primi öder.

Harness, belirli bir biçimdeki ilk alt ajanın başlamasına izin verir, sonra o akış yapmaya başlar başlamaz kardeşlerini serbest bırakır. Bekleme sınırlıdır: yavaş bir ilk alt ajan bir önbellek isabetine mal olur, asla yayılımın kendisine değil. Aynı nedenle, her alt ajan profilinden bağımsız olarak aynı yerleşik araç kümesini alır — bunu profile göre değiştirmek, paylaşılan öneki hiçbir kazanç olmadan parçalara ayırırdı, çünkü profil zaten alt ajanın neyi çağırabileceğine karar vermiştir.

Her iki yarı da varsayılmak yerine gözlemlenebilir:

  • Bir konuşmadaki bağlam gezgini, yerleşik araçları, istek üzerine yüklenen dizini ve saklanan her şemanın maliyetinin ne olacağını, gerçek bir çalıştırmanın kullandığı aynı kod yolundan derleyerek bildirir.
  • Her çalıştırma, hangi istek üzerine yüklenen araçları yüklediğini ve buna neyin yol açtığını kaydeder; böylece hiçbir şey bulamayan bir arama, sessizce başka bir şey yapan bir ajanın içinde kaybolmak yerine bir erişim ıskası olarak görünür.
  • Gözlemlenebilirlik, Önbellek oranı’nı önbellek yazımları dahil işlenen tüm istem token’larına oranla önbellek okumaları olarak bildirir — öneki sürekli yeniden inşa eden bir çalıştırma, hiç önbelleğe ihtiyaç duymamış gibi puanlamak yerine düşük puan alır.