Ich habe in letzter Zeit ein wenig über kontinuierliches Lernen nachgedacht, insbesondere in Bezug auf langlaufende Agenten (und ein paar Spielereien mit MLX gemacht). Der Status quo der Prompt-Kompaktierung in Verbindung mit rekursiven Unteragenten ist tatsächlich bemerkenswert effektiv. Es scheint, als könnten wir damit ziemlich weit kommen. (Prompt-Kompaktierung = wenn das Kontextfenster fast voll ist, generiert das Modell eine kürzere Zusammenfassung und beginnt dann von vorne mit der Zusammenfassung. Rekursive Unteragenten = Aufgaben in kleinere Aufgaben zerlegen, um mit endlichen Kontextfenstern umzugehen) Rekursive Unteragenten werden wahrscheinlich immer nützlich sein. Aber die Prompt-Kompaktierung scheint ein wenig eine ineffiziente (obwohl hoch effektive) Lösung zu sein. Es gibt zwei andere Alternativen, die ich kenne: 1. Online-Fine-Tuning und 2. speicherbasierte Techniken. Online-Fine-Tuning: einige LoRA-Adapter auf Daten trainieren, die das Modell während des Einsatzes begegnet. Ich bin im Allgemeinen weniger optimistisch in Bezug auf dies. Abgesehen von den technischen Herausforderungen, benutzerdefinierte Modelle/Adapter für jeden Anwendungsfall/Jeder Benutzer bereitzustellen, gibt es einige grundlegende Probleme: - Online-Fine-Tuning ist von Natur aus instabil. Wenn Sie auf Daten im Zielbereich trainieren, können Sie katastrophal Fähigkeiten zerstören, die Sie nicht anvisieren. Ein Weg, dies zu umgehen, besteht darin, einen gemischten Datensatz mit neuen und alten Daten zu behalten. Aber das wird ziemlich schnell kompliziert. - Wie sehen die Daten für das Online-Fine-Tuning überhaupt aus? Generieren Sie Q/A-Paare basierend auf dem Zielbereich, um das Modell zu trainieren? Sie haben auch das Problem, Informationen in der Datenmischung angesichts der begrenzten Kapazität zu priorisieren. Speicherbasierte Techniken: im Grunde eine Richtlinie, um nützlichen Speicher zu behalten und das, was nicht benötigt wird, zu verwerfen. Das fühlt sich viel mehr so an, wie Menschen Informationen behalten: "benutze es oder verliere es". Sie benötigen nur ein paar Dinge, damit dies funktioniert: - Eine Eviktions-/Beibehaltungspolitik. Etwas wie "behalte einen Speicher, wenn er in den letzten 10k Tokens mindestens einmal aufgerufen wurde". - Die Politik muss effizient berechenbar sein. - Ein Ort, an dem das Modell langfristigen Speicher speichern und darauf zugreifen kann. Vielleicht wäre ein spärlich zugänglicher KV-Cache ausreichend. Aber für den effizienten Zugriff auf einen großen Speicher könnte eine hierarchische Datenstruktur besser sein.