Ultimamente ho pensato un po' all'apprendimento continuo, specialmente in relazione agli agenti a lungo termine (e ho eseguito alcuni esperimenti semplici con MLX). Lo stato attuale della compattazione dei prompt unito agli agenti sub-ricorsivi è in realtà notevolmente efficace. Sembra che possiamo arrivare piuttosto lontano con questo. (Compattazione dei prompt = quando la finestra di contesto si avvicina al completo, il modello genera un riassunto più breve, poi si ricomincia da zero usando il riassunto. Agenti sub-ricorsivi = decomporre i compiti in compiti più piccoli per gestire finestre di contesto finite) Gli agenti sub-ricorsivi saranno probabilmente sempre utili. Ma la compattazione dei prompt sembra un po' un hack inefficiente (anche se altamente efficace). Ci sono altre due alternative che conosco: 1. fine-tuning online e 2. tecniche basate sulla memoria. Fine-tuning online: addestrare alcuni adattatori LoRA sui dati che il modello incontra durante il deployment. In generale, sono meno ottimista su questo. A parte le sfide ingegneristiche di implementare modelli/adattatori personalizzati per ogni caso d'uso/utente, ci sono alcuni problemi fondamentali: - Il fine-tuning online è intrinsecamente instabile. Se ti alleni su dati nel dominio target, puoi distruggere catastroficamente capacità che non stai mirando. Un modo per aggirare questo è mantenere un dataset misto con i nuovi e i vecchi dati. Ma questo diventa piuttosto complicato rapidamente. - Come sono fatti i dati per il fine-tuning online? Generi coppie Q/A basate sul dominio target per addestrare il modello? Hai anche il problema di dare priorità alle informazioni nella miscela di dati date le capacità finite. Tecniche basate sulla memoria: fondamentalmente una politica per mantenere in giro la memoria utile e scartare ciò che non è necessario. Questo sembra molto più simile a come gli esseri umani trattengono le informazioni: "usalo o perdilo". Hai bisogno solo di alcune cose affinché questo funzioni: - Una politica di espulsione/ritenzione. Qualcosa come "mantieni una memoria se è stata accessibile almeno una volta negli ultimi 10k token". - La politica deve essere computabile in modo efficiente. - Un posto per il modello per memorizzare e accedere alla memoria a lungo termine. Forse una cache KV a accesso sparso sarebbe sufficiente. Ma per un accesso efficiente a una grande memoria, una struttura dati gerarchica potrebbe essere migliore.