2 puan yazan GN⁺ 2023-10-17 | 1 yorum | WhatsApp'ta paylaş
  • Letta, zaman içinde öğrenebilen ve kendini geliştirebilen gelişmiş bellek tabanlı yapay zeka oluşturmayı amaçlayan bir projedir
  • Kullanım biçimi, yerel terminalde ajan çalıştırmak için Letta Code ve ajanları uygulamalara entegre etmek için Letta API olarak ikiye ayrılır
  • CLI, Node.js 18+ gerektirir; npm install -g @letta-ai/letta-code ile kurulduktan sonra letta çalıştırılarak yerel bilgisayarda belleğe sahip bir ajan çalıştırılır
  • Letta Code ajanı; kodlama ve bilgisayarda yapılabilecek görevlerde yardımcı olur, skills ve subagents desteği sunar ve gelişmiş bellek ile sürekli öğrenme için önceden hazırlanmış skills/subagents paketleriyle gelir
  • Letta modelden bağımsızdır; README, en iyi performans için Opus 4.5 ve GPT-5.2'yi önerir ve sıralama için model leaderboard bağlantısını verir
  • Letta API, durum bilgisine sahip ajanları uygulamalara entegre etmek içindir; tam özellikli bir agents API ile Python ve TypeScript SDK'ları sunar
    • TypeScript/Node.js paketi: @letta-ai/letta-client
    • Python paketi: letta-client
    • Örneklerde LETTA_API_KEY ve Letta API key kullanılarak ajan oluşturma ve mesaj gönderme akışı gösterilir
  • Letta ve ilişkili Letta hizmetleri kullanıldığında privacy policy ve terms of service şartlarının kabul edildiği varsayılır

1 yorum

 
GN⁺ 2023-10-17
Hacker News görüşleri
  • MemGPT'nin yazarlarıyız. Uygulama ile ilgili sorularınız varsa yanıtlayabiliriz.
    Kendiniz denemek isterseniz, MemGPT Discord sunucusundaki Discord botunda (https://discord.gg/9GEQrxmVyE) bellek düzenlemenin nasıl çalıştığını görebilirsiniz. Botla konuştuğunuzda, MemGPT'nin kullanıcı ve kendisi hakkındaki profilleri güncellemek için belleği değiştirme sürecini görürsünüz.
    Tamamı açık kaynak; https://github.com/cpacker/MemGPT koduyla yerelde de çalıştırabilirsiniz. Depoda, LlamaIndex API belgeleri hakkında MemGPT ile sohbet edilen belge odaklı bir örnek de var.

  • Her şeyi neden tek bir bağlam penceresi içinde ele aldığınızı merak ediyorum. Birkaç ay önce benzer bir şeyle deney yaptığımda, ön işleme/son işleme aşamalarında birden fazla ajanla paralelleştirmiştim.
    Örneğin ana bağlam penceresi, belleğin oluşturulduğunu ya da arandığını bilmiyordu; son işleyici konuşmadan otomatik olarak bellekler oluşturup saklıyor, tüm konuşmayı da bir vektör veritabanına kaydediyordu. Ön işleyici ise konuşmaya uygun ilgili bellekleri ve bağlamı otomatik olarak enjekte ediyor, hatta geçmişi yeniden yazarak ana bağlam penceresi açısından o bellekler baştan beri varmış gibi görünmesini sağlıyordu.
    Böylece ana bağlam penceresinde gereksiz sistem prompt'ları vb. için harcanan alandan epey tasarruf edilebiliyordu.

    • Güzel noktalar. Chatbot bağlamında bellek yönetimini kime bırakacağınız bir tasarım tercihi ve bence kabaca iki yaklaşım var: örtük bellek yönetimi ve açık bellek yönetimi.
      Örtük yaklaşımda “ana LLM”, sohbetlerde ise “konuşma iş parçacığı”, arka plandaki bellek yönetiminden haberdar değildir. Bu yönetimi bir “bellek LLM'i”, kural tabanlı bir script, küçük bir sinir ağı vb. üstlenebilir.
      Açık yaklaşım MemGPT'ye karşılık geliyor; tek bir LLM her şeyi ele alıyor. Çok oturumlu/uzun menzilli sohbetle ilgili mevcut çalışmalar genellikle ayrı bir bellek oluşturma süreci bulunan örtük yaklaşımlar ve tüketici chatbot'larındaki bellek depolarının da büyük olasılıkla çoğu örtüktür.
      Açık bellek yönetimi karmaşık talimat izlemeyi gerektirdiği için, bunun mevcut açık LLM'lerin çoğuyla zor olduğunu düşünüyorum. Açık modelleri ince ayar yapmak gibi yöntemlerle çözmenin yollarını inceliyoruz.
      Ödünleşim dediğiniz gibi. Örtük yaklaşımda bellek yönetimi talimatlarının tamamını LLM'in ön prompt'una koymanız gerekmez. MemGPT'nin tüm sistem mesajı yaklaşık 1 bin token. Buna karşılık açık bellek yönetiminde, LLM düzgün çalıştığında tüm sistem çok daha basitleşir; paralel iş parçacıklarında birden fazla LLM modelini yönetme ek yükü ortadan kalkar.
    • İlginç bir yaklaşım. Ben de benzer bir şey geliştiriyorum; geri bildirim döngüsünün bir parçası olarak işlem verilerini bağlam penceresine koyup geçmişi yeniden yazan bir yöntem.
      LLM'lerin ve doğal dil işlemenin yapılandırılmış veriler için daha uygulanabilir bir arayüz olabileceğini düşünüyorum. Belirli bir iş bağlamında veri üretildiğinde verileri çıkarıyor, embedding'ler oluşturuyor ve bir vektör veritabanı kuruyoruz.
      Son işlemede, ana model yanıt verdikten sonra son işleyici konuşmaya dayanarak otomatik olarak bellek oluşturup saklıyor. Önemli bağlamı kaydederken ana modele bu işin yükünü bindirmiyor. İsteğin bir parçası olarak ilgili iş mantığını da çalıştırıp yeniden sisteme geri besliyor.
      Ön işlemede, yeni girdiyi ana modele göndermeden önce saklanan bellekleri kontrol ediyor, ilgili bağlamı enjekte ediyor ve mantığı da çalıştırıyor. Ön işleyici, ana modele önceki konuşmaya dair bir “tekrar” sunarak daha tutarlı ve bilgi bakımından zengin bir yanıt hazırlamasını sağlıyor.
    • Çok ajanlı yaklaşımlarda epey potansiyel var. Ajan yanıtlarında bir miktar entropi olduğu için denemeye daha da değer olduğunu düşünüyorum.
  • Sınırlamalar bölümünde yazılanlarla ilgili olarak, Llama 2 70B türevleri fonksiyon çağırma için ince ayarlanmış olsa bile yanlış fonksiyon çağrıları oluşturuyor veya sağlanan şemanın dışındaki fonksiyonları halüsinasyon olarak üretiyorsa gramer tabanlı örnekleme kullanılabilir.
    En azından fonksiyon çağrısının sözdizimsel olarak doğru olmasını garanti edebilirsiniz.
    [0] https://github.com/ggerganov/llama.cpp/tree/master/grammars

    • Gramer tabanlı örnekleme iyi bir fikir ve MemGPT gibi bir şeye çok uygun. MemGPT'yi gpt-4 dışındaki modellerle denediğimizde performansı en çok etkileyen sorunlar fonksiyon argümanlarının yanlış kullanılması ve fonksiyon halüsinasyonlarıydı.
      Örneğin fonksiyon çağırma verileriyle ince ayarlanmış büyük bir model (https://huggingface.co/jondurbin/airoboros-l2-70b-2.1#agentf...) genel olarak parse edilebilir JSON üretiyordu, ama argümanlar ya da fonksiyon adları yanlıştı.
      Veri yazmaya çalışırken, ön prompt'ta belirtilen doğru working_context.append çağrısı yerine, hiç tanımlanmamış bir personal_diary.add çağrısı çıktısı vermesi gibi.
  • Sadece başlığa bakınca, LLM'in sinir ağı belleğini, yani bağlamı değil ağırlık düzeyi belleğini konuşma sırasında değiştiren bir bellek düzenleme tekniği; örneğin ROME [1] gibi bir yaklaşım sandım.
    Aslında harika bir RAG çalışması olduğunu görmek sevindiriciydi; yakında kendi MemEditGPT sürümümü yapacağım.
    [1] https://arxiv.org/abs/2202.05262

    • Katkıda bulunmak isterseniz depoda issue veya PR açabilirsiniz. Tamamı açık kaynak ve Apache 2.0 lisanslı; CLI'a genel iş akışlarını entegre etmeyi aktif olarak inceliyoruz.
      Doğru anladığınız gibi MemGPT, ROME gibi LLM ağırlıklarını düzenlemiyor. MemGPT'de “bellek” dediğimiz şey ağırlık düzeyinde değil, metin/token düzeyinde.
      Temel fikir, LLM'e bağlam içinde tutulan bir çalışma belleği scratchpad'ini düzenleme ve fonksiyonlar aracılığıyla dış bağlamı okuma/yazma yeteneği vermek. Önemli ayrıntı, sonlu bağlam sınırını yönetmek için okumanın her zaman sayfa düzeyinde, yani chunk düzeyinde yapılması.
      MemGPT tek bir kullanıcı girdisinde fonksiyonları zincirleyerek birçok kez tekrarlı biçimde okuyup yazabilir. Bu yüzden README'deki LlamaIndex API belgeleri örneğinde olduğu gibi büyük bir belge veritabanında arama yapabilir, birden fazla kaynaktan bilgi toplayıp yanıt döndürebilir.
  • Bir süre ChatGPT web sürümünün (chat.openai.com, API değil) sohbet içinde bu şekilde davrandığından şüphelenmiştim. Çok uzun sohbet geçmişlerinde bile her şeyi bir anda unutmasından çok kalitenin kademeli olarak düştüğü hissi vardı
    Elbette bağlam içinde düşündüğümden daha fazla ipucu bulunuyor olabilir
    Her hâlükârda bu tür bir fikrin ileride tüm sohbet botlarının varsayılan özelliği hâline gelme olasılığının yüksek olduğunu düşünüyorum

    • Özyinelemeli özetleme, sonsuz bağlam yanılsaması vermenin basit ve popüler bir yolu. Yer açmak gerektiğinde en eski N mesajı tek bir özet mesajına sıkıştırmak yeterli
      Kayıplı bir yöntemdir ve önemli bilgileri eninde sonunda kaybedersiniz; ama performans görece yumuşak biçimde düşebilir. MemGPT’de tüm açık bellek yönetiminin üstünde örtük özyinelemeli özetleme de kullanılıyor
    • Sanılandan çok daha fazla ipucu geride kalıyor. Üstelik bağlam penceresi standart İngilizce metin ölçütüne göre yaklaşık 12 sayfa kadar ve sistem prompt’u yüzünden boşa giden alan da çok değil
      Azıcık bile ilginç bir iş yaptıysanız çıktı, prompt’a güçlü biçimde eğilimli olur. Önceki çıktı/geçmiş şeklinde tek bir örnek olduğundan, pürüzsüz bir olasılık dağılımı yerine bazı bilgileri kaybedersiniz; birden çok girdi aynı çıktıya eşlenebildiği için de yine bazı bilgileri kaybedersiniz
      Ama gerçek dünyadaki prompt’lar çoğu zaman istenen sonucu almak için akla gelen en kolay ve en kısa ifadedir. Bu yüzden LLM o prompt’u tahmin ederse, eksik bağlama dair yorumu büyük ölçüde doğru olma ihtimali taşır. Yani kaybolmuş gibi görünen pek çok bilgi LLM çıktısı içinde korunur ve eski bağlam dışarı itildiğinde bir anda kaybedilen bilgi miktarı o kadar büyük olmaz
    • ChatGPT’nin performans düşüşü göstermesinin nedeni, belleği bağlam uzunluğunun ötesine genişletmek için özel bir şey yapmaması
      Kayıplı bellek uygulamanın pek çok basit tekniği var. Örneğin sentence transformers’ın kullandığı gibi token’ları average pooling’den geçirme yöntemi var. Çok fazla bağlamı prompt’a sıkıştırmak için bu yöntemin neden nadiren kullanıldığını pek bilmiyorum. Fiilen orta vadeli bellek işlevi görüyor
    • Kapalı modellerin gerçekte ne yaptığı bilinmiyor; ama bazı prompt saldırılarına bakınca, bu başlıkta bahsedilenlerin dışında özyinelemeli özetleme de kullanıyor gibi görünüyor
    • Benim hissime göre token sınırının altında kalmak için konuşmadaki en eski token’ları yalnızca gereken minimum miktarda kesip atıyor. Sohbet orta vadeli belleğe sahipmiş gibi bozulmuyor
  • Adını hatırlamıyorum ama komutları kararsız biçimde çalıştıran ezoterik bir programlama dili zaten var. Programı dikkatle tasarlarsanız komut dizisinin %99, %99,9 gibi güvenilirlikle çalışmasını sağlayabiliyorsunuz

    • Muhtemelen Java2000’di
      20 yıl sonra aynı yaklaşım altyapı alanında “kaos mühendisliği” adıyla, ironisiz biçimde popülerleşti
    • Malbolge’a biraz benziyor ama tam olarak aynı değil gibi. https://en.m.wikipedia.org/wiki/Malbolge
  • Güncelleme: MemGPT üzerinde uyguladığımız kalıcı Discord sohbet botunu az önce yayımladık. Buradan deneyebilirsiniz: https://discord.gg/9GEQrxmVyE
    GitHub koduyla sohbet botu demosunu ve API dokümantasyonu hakkında MemGPT’ye soru sorabileceğiniz doküman soru-cevap botu demosunu yerelde de çalıştırabilirsiniz

  • LLM’lerin en büyük sınırının bağlam penceresi olduğunu düşünüyorum. Üstün akıl yürütme yetenekleri bile gerçek kullanım senaryolarında sık sık bağlam penceresi sınırına takılıyor

    • Evet. Burada tanıtılan tekniklerle kalıcı sohbet botları tasarlama yönünü düşünebilmenizi umuyorum
  • Özyinelemeli özetlemenin taşan bağlam penceresiyle başa çıkmanın basit bir yolu olduğu, ancak doğası gereği kayıplı olduğu ve sonunda sistem belleğinde büyük delikler açtığı açıklamasına katılıyorum
    Ama MemGPT de aynı şeyi yapıyor ve aynı soruna sahip. Her şeyi özyinelemeli olarak özetlemek yerine, geçmişi seçici biçimde arayıp her istek için oluşturması sadece biraz farklı. Fikir güzel
    Ancak şüpheciyim. Bu yaklaşım temelde mevcut bağlamın düşük entropili biçimde özetlenebilir bir bağlam olduğu ve sorgunun geçmişin yalnızca bir kısmına bağlı olduğu varsayımlarına dayanıyor
    Sohbet ya da “devasa bir belge kümesinden soruları yanıtlamak” gibi durumlarda bu doğru olabilir. Ama kod üretimi gibi bağlamın belirli API tanımları türünden atılamaz bilgilerle yoğun olduğu ve çok sayıda API tanımı gibi geniş bağlama ihtiyaç duyulan durumlarda iki varsayım da yanlış
    Yapı ve uygulama ilginç, demo da güzel; ancak özetleme konulu makalelerin bu yaklaşımın temel sınırlarını kabul etmemesi üzücü

    • Makaleye baktığın için teşekkürler. Yanlış anlaşılma olmasın diye netleştireyim: özyinelemeli özetleme MemGPT’nin bellek yönetiminin yalnızca bir parçası
      Söylediğin gibi MemGPT’nin konuşma kuyruğu, önceki çalışmalar veya birçok sohbet botu uygulamasında olduğu gibi özyinelemeli özetlemeyle yönetiliyor. Ama özyinelemeli özetlemeden bağımsız, okunup yazılabilen “sabit” bir LLM belleği alanı da var; makalede buna “çalışma bağlamı” diyoruz
      Dolayısıyla MemGPT hem otomatik üretilen özyinelemeli özete hem de MemGPT’nin aktif biçimde güncel tuttuğu çalışma bağlamına erişebiliyor
      Bu ikisi, fonksiyon çağrılarıyla konuşma kuyruğuna getirilen MemGPT’nin dış bağlamından da ayrı. Tüm örneklerde dış bağlam okumaları sıkıştırılmadan, özetlenmeden sayfa sayfa yapılıyor
      Kuyruk özetleme tetiklendiğinde MemGPT bir sistem bildirimi alıyor; bu nedenle konuşma kuyruğundaki belirli ayrıntıları koruması gerekiyorsa, silinmeden veya özetlenmeden önce bunları çalışma bağlamına yazabiliyor
      Etkileşimli ajan örneğinde çalışma bağlamı, tutarlı bir konuşma sürdürmek için kullanıcı ve ajan hakkındaki temel gerçekleri saklamakta kullanılıyor. Çalışma bağlamını LLM her zaman gördüğü için ayrıca aramaya gerek yok
      Doküman soru-cevapta çalışma bağlamı, mevcut görevi/soruyu ve ilerleyişini izlemek için kullanılabiliyor. Karmaşık sorgularda MemGPT’nin önceki aramaları, önceki sayfa istekleri gibi ayrıntıları takip etmesine yardımcı oluyor