Blog

Uzun Agent Turlarını Bağlam Penceresi İçinde Tutmak

Bir model aynı anda yalnızca belirli miktarda metni okuyabilir: bağlam penceresi. Mythex’in agenti uzun işler yapar: çok sayıda dosya okur, komutlar çalıştırır ve sınırlı işleri alt agentlere devreder. Uzun işlerin bozulmasının üç yolunu bulduk: alt agentler modelin her isteği reddetmeye başlayana kadar büyüdü, bir alt agent yerinin kalmadığını sanıp erken durdu ve Rusça, Çince ve Japonca metinlerde token sayımız ciddi şekilde yanlıştı. İşte değiştirdiklerimiz.

Önce birkaç terim

  • Token, bir modelin okuduğu parçalardır. Limitler ve maliyetler karakter ya da kelime yerine token üzerinden sayılır.
  • Bağlam penceresi, bir modelin tek bir istekte okuyabileceği en fazla miktardır. Ayrıca maliyet ve hızı makul tutmak için her istek için kendi daha düşük bütçemizi belirleriz.
  • Araç sonuçları, agentin araçlarından geri aldığı şeylerdir: okunan bir dosyanın içeriği, çalıştırılan bir komutun çıktısı. Uzun işlerde gönderilenlerin çoğunluğu bunlardır.
  • Alt agent, ana agentin kendi içinde bağımsız bir görev için başlattığı bir yardımcıdır; örneğin “bu bölümleri notlarla karşılaştır”. Tek bir talimat alır ve sonra kendi başına birçok araç çağrısıyla çalışır.

Sorun 1: alt agentler modelin reddedeceği kadar büyüdü

Her adımda agent, modele o ana kadarki konuşmayı gönderir. Bu büyüdüğünde kodumuz onu kırpıyordu; ama yalnızca bir kullanıcı mesajının başında, böylece bir araç çağrısı ve sonucu asla ayrılmıyordu. İlk mesajı tutuyor, önceki konuşmanın kırpıldığını belirten bir not ekliyor ve sığabilen en yeni tam turları tutuyordu.

Bir alt agentin tam olarak bir kullanıcı mesajı vardır: talimatı. Kesecek bir yer yoktu. Bu yüzden her adımda tüm geçmişini gönderiyordu ve her seferinde büyüyerek modelin kabul edebildiğinden çok daha büyük, yaklaşık bir milyon token olana kadar gidiyordu. Bu tür 8 alt agentle yapılan bir testte, 8’i de reddedildi.

Çözüm: önce eski araç sonuçlarını temizle

İstekler artık üç adımda bütçeye uydurulur; her adım yalnızca bir öncekinin yetmediği durumda denenir:

  1. En eski araç sonuçlarını temizle. İçerikleri, sonucun modelin bağlam sınırı içinde tutulmak için temizlendiğini ve gerekirse aracın yeniden çalıştırılabileceğini söyleyen kısa bir notla değiştirilir. Bir saat önce okunmuş bir dosya genellikle isteğin en büyük ve en az faydalı parçasıdır, ama dosya hâlâ yeniden okunabilir. En yeni sonuçlar olduğu gibi kalır.
  2. Tam kullanıcı turlarını tut. Daha önce olduğu gibi: ilk mesaj, bir not ve sığan en yeni tam turlar.
  3. Tam araç turlarını tut. Tek bir uzun turun içinde — bir alt agentin sahip olduğu tek tür — ilk mesajı, bir notu ve “bir araç çağır, sonucunu al” şeklindeki en yeni tam turları tut.

Bu yalnızca gönderilenleri şekillendirir. Agentin kaydedilmiş geçmişi her şeyi tutmaya devam eder. Aynı testte, 8 alt agentten 0’ı reddedildi ve hepsi tamamlandı.

Temizlemeyi toplu yap, böylece önbellek çalışmaya devam etsin

Model sağlayıcıları, bir isteğin başını, son isteğiyle aynıysa yeniden kullanabilir — bu bir önek önbelleğidir. Her çağrıda bir sonuç daha temizlersek, isteğin başı her çağrıda değişir ve önbellek hiç yardımcı olmazdı.

Bu yüzden en eski sonuçlar tek tek değil, dörder dörder temizlenir. Temizlenen kısım birkaç çağrı boyunca aynı kalır. Notun boyutundan çok fazla büyük olmayan bir sonuç dokunulmadan bırakılır: temizlemek neredeyse hiçbir şey kazandırmaz ve yine de isteğin başını değiştirir. Ne kadarının tam kalacağı sayıyla değil boyutla belirlenir: bütçenin dörtte biri içine sığan en yeni sonuçlar kalır ve her zaman en az biri. Önceki bir sürüm sabit olarak altı tanesini tam tutuyordu; bu kısa komut çıktılarında doğruydu, ama uzun dosya okumalarında bütçenin çoğunu eski sonuçlara bırakıyordu.

Reddedilmeler artık bunu söylüyor

Model tarafından geçersiz diye reddedilen bir istek artık yeniden denenmez; aynı isteği tekrar göndermek aynı yanıtı alır. Konuşma modelin tek seferde okuyabileceğinden uzunsa, kişi şunu görür: “Bu konuşma modelin tek seferde okuyabileceği kadar uzadı. Bir sonraki adım için yeni bir sohbet başlatın — şimdiye kadar oluşturulan her şey kalır.” Bu, kişinin harekete geçmesi gereken bir durumdur, bir kesinti değil; bu yüzden bize alarm da göndermez.

Sorun 2: agent “yer açmak” için durdu

Bir alt agent 40 uzun bölümü okumakla görevlendirildi, ama 2 tanesinden sonra “yer açmak istediği” için durdu. 400.000 tokenlık bütçenin yaklaşık 100.000’ini kullanmıştı.

Eski sonuçların artık onun için temizleneceğini bilmenin bir yolu yoktu. Bu yüzden ona söyledik. Agentin talimatları artık şunu söylüyor: konuşma modelin kaldırabileceğinden büyüdüğünde en eski araç sonuçları temizlenir ve en yeniler tam kalır. Bu yüzden uzun bir görevi yer açmak için durdurmayın; devam edin ve temizlenen bir şeye ihtiyacınız olursa dosyayı yeniden okuyun.

Modelin göremediği bir düzeltme, modelin bakış açısından bir düzeltme değildir. Mekanizma yalnızca agent ona güvenirse işe yarar.

Sorun 3: token sayarken her şeyin İngilizce olduğunu varsaymak

Token sayısını bir tokenleştirici çalıştırmadan, karakter sayısının dörde bölümü olarak tahmin ediyorduk. Bu İngilizce için makul bir pratik kuraldır. Diğer yazı sistemleri için değildir: Rusça yaklaşık 2,2 karakteri bir token eder, Çince ve Japonca yaklaşık bir karakteri.

Bu yüzden Rusça bölümler okuyan bir alt agent, tahminimize göre 400.000 bütçenin altında olmasına rağmen yaklaşık 640.000 tokenlık bir istek gönderdi. Tahminimiz, isteği modelin sert sınırının da üzerine itebilirdi.

Tahmin artık yazı sistemine göre sayılır: düz ASCII dört karakter bir token, Çince, Japonca ve Korece bir karakter bir token, geri kalan her şey — Kiril, Yunan, Arapça, aksanlı harfler, emoji — iki karakter bir token. Hatanın yüksek tarafa olması amaçlanır. Bir Rusça bölümde şimdi yaklaşık 44.600 token ölçülürken 43.423 tahmin ediyor; öncesinde 25.023 diyordu. Bir mesaj yazıldıktan sonra değişmediği için tahmini bir kez hesaplanıp saklanır; her adımda yeniden hesaplanmaz.

Bundan çıkardıklarımız

  • Kesmeyi gerçek boyutun olduğu yerde yapın. Agent işinde bu, kullanıcı mesajları değil araç sonuçlarıdır.
  • Agente kendi güvenlik ağlarını anlatın. Aksi halde artık geçerli olmayan limitlere göre plan yapar.
  • “Karakter ÷ 4” İngilizce bir varsayımdır. Çok dilli kullanıcılar için token sayan her şeyin yazı sistemine göre saymaya ya da gerçek bir tokenleştiriciye ihtiyacı var.
  • Önbelleğe dikkat edin. Her çağrıda başı değişen bir istek daha pahalıya ve daha yavaş çalışır.

Kendi uygulamanıza yapay zekâ özellikleri ekliyorsanız, bir LLM nedir ve LLM API’leri nasıl kullanılır rehberleri bağlam pencerelerini ve tokenleri baştan anlatır. Mythex’te alt agentlerin nasıl çalıştığı hakkında daha fazlası alt agent dokümanlarında.

Mythex · Pricing · Yapay zekayla her şeyi yapın · Web sitesi ve uygulama şablonları · Mythex karşılaştırmaları · Yapay zekayla uygulama geliştirme sözlüğü · Yapay zekayla uygulama geliştirme için ücretsiz araçlar · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)