Salta al contenuto principale

LATS: Language Agent Tree Search — Integrazione di Ragionamento, Azione e Pianificazione in un unico Framework

6 minuti di letturaMike ThriftMike Thrift
LATS: Language Agent Tree Search — Integrazione di Ragionamento, Azione e Pianificazione in un unico Framework

Vi siete mai chiesti cosa viene dopo Tree of Thoughts? Se possiamo cercare tra i passaggi di ragionamento, perché non possiamo cercare anche tra le azioni? Questo è esattamente ciò che fa LATS (Language Agent Tree Search), ed è per questo che sto leggendo questo articolo ora. L'articolo di Andy Zhou, Kai Yan, Michal Shlapentokh-Rothman, Haohan Wang e Yu-Xiong Wang (ICML 2024, arXiv:2310.04406) è la sintesi più chiara di ragionamento, azione e pianificazione in un unico framework ad agente singolo, e i risultati sono davvero difficili da ignorare.

Riepilogo dell'Articolo

Il problema centrale che LATS risolve è un divario strutturale nella ricerca esistente sugli agenti. ReAct contrappone ragionamento e azione, ma non ha alcun meccanismo per tornare indietro e provare un percorso diverso quando la traiettoria è sbagliata. Tree of Thoughts consente la ramificazione per i passaggi di ragionamento, ma si basa esclusivamente sulla conoscenza interna del LM; in altre parole, durante l'esplorazione non può chiamare strumenti o ricevere feedback esterni. Reflexion aggiunge un'autocorrezione linguistica, ma a causa della sua natura di ciclo di ripetizione lineare, si impegna in una nuova traiettoria senza esplorare alternative. LATS fonde queste tre idee con un'adeguata spina dorsale di Monte Carlo Tree Search (MCTS), consentendo a un agente LLM di esplorare più rami, ricevere feedback dall'ambiente reale e tornare indietro (backtracking) se un percorso fallisce.

Il meccanismo tecnico consiste in un ciclo MCTS a 6 fasi: Selezione (Selection, scegliere il nodo successivo da esplorare tramite la formula UCT), Espansione (Expansion, campionare n azioni candidate dal LM), Valutazione (Evaluation, assegnare un punteggio a ciascun nodo con una funzione ibrida di valore), Simulazione (Simulation, eseguire fino a uno stato terminale), Retropropagazione (Backpropagation, aggiornare il valore dei nodi antenati) e Riflessione (Reflection, generare un riepilogo linguistico di ciò che è andato storto in caso di fallimento e salvarlo come contesto). La funzione di valore è degna di nota: V(s) = λ·LM(s) + (1−λ)·SC(s). Qui LM(s) è la stima del LM stesso della qualità della traiettoria dopo aver ricevuto feedback dall'ambiente, e SC(s) è un punteggio di auto-coerenza basato sulla frequenza con cui quella specifica azione viene campionata tra i nodi fratelli. Non si tratta di un modello di ricompensa addestrato, ma di una funzione di valore che opera interamente tramite prompt.

Idee Chiave

  • Su HumanEval, GPT-4 + LATS raggiunge il 92,7% di pass@1, rispetto al 91,0% di GPT-4 + Reflexion e al 56,9% di GPT-3.5 + ReAct da solo. GPT-3.5 + LATS sale all'83,8%.
  • Su HotPotQA, LATS (CoT + ReAct) ottiene un Exact Match di 0,71, più del doppio della precisione della baseline ReAct di 0,32.
  • Su WebShop (navigazione web e acquisti), LATS ottiene un punteggio di 75,9 (tasso di successo del 38,0%), superando il 64,2 (35,0%) di Reflexion. Questa è una differenza significativa per le attività che richiedono la gestione dello stato su più pagine.
  • Su Game of 24 (puzzle di puro ragionamento), LATS raggiunge un tasso di successo di 0,44, superiore allo 0,20 di ToT, utilizzando lo stesso backend GPT-4.
  • Sorprendentemente, LATS su HotPotQA (k=50) espande meno nodi (66,65 in media contro 84,05) e utilizza meno token (173.290 contro 210.215) rispetto a ToT per trovare una soluzione, nonostante in teoria sembri più costoso.

Successi e Limitazioni

I valori dei benchmark sono sostanziali e il framework è concettualmente pulito. La formula UCT fornisce un bilanciamento esplorazione-sfruttamento (exploration-exploitation) di principio che non esiste nelle BFS/DFS ad hoc di ToT. Integrare il feedback ambientale esterno nella funzione di valore, piuttosto che fare affidamento esclusivamente sull'introspezione del LM, è la direzione giusta e i risultati lo dimostrano.

Tuttavia, c'è un presupposto critico, riconosciuto dagli autori ma non sufficientemente enfatizzato: LATS richiede la capacità di riportare l'ambiente allo stato precedente (state reversion). Senza una funzionalità di checkpoint, non è possibile ramificare l'albero, perché una volta che un'azione è stata intrapresa, non può essere annullata. Gli autori menzionano che per le attività LM questo può essere gestito tramite "copia e incolla del testo di input passato", ma in ambienti reali con azioni (database, filesystem, API con effetti collaterali), questo rappresenta un requisito rigoroso che molti sistemi di produzione faticano a soddisfare. Sebbene i risultati di WebShop siano migliori delle baseline, in ambienti complessi l'autoriflessione tende a diventare generica piuttosto che specifica. L'agente può ripetere errori strutturalmente identici, sebbene superficialmente diversi, rimanendo bloccato. L'articolo lo menziona ma non propone soluzioni.

Inoltre, manca uno studio di ablazione che separi il contributo della struttura MCTS dalla progettazione della funzione di valore. È probabile che un approccio di ramificazione più semplice, utilizzando la stessa funzione ibrida di valore, ridurrebbe significativamente il divario, ma gli autori non lo testano direttamente.

Perché è Importante per l'AI Finanziaria

Le contabilità Beancount rappresentano un ambiente quasi ideale per la ricerca ad albero di tipo LATS per una ragione fondamentale: ogni contabilità è gestita come un repository Git. Il requisito di 'ripristino dello stato' che rende LATS poco pratico in ambienti reali viene soddisfatto con estrema facilità tramite git checkout o git stash. Un agente con permessi di scrittura può proporre voci contabili candidate su più rami, valutarle rispetto a vincoli di bilancio (funzione di valore) e committare solo i percorsi con il punteggio più alto. Ai rami falliti verrebbe fornita una riflessione linguistica come "La classificazione del tipo di conto è errata e viola l'identità Attività = Passività + Patrimonio Netto".

Anche la progettazione della funzione ibrida di valore è direttamente applicabile. Per un agente contabile, LM(s) assegnerebbe un punteggio alle voci proposte in base all'idoneità semantica (sembra la categoria corretta?), mentre SC(s) fungerebbe da controllo di auto-coerenza basato sulla cronologia della contabilità stessa, tracciando la coerenza con cui l'agente classifica transazioni passate simili.

Tuttavia, quando si fa un'analogia finanziaria per il presupposto del ripristino dello stato, è necessario prestare attenzione. Le contabilità reali hanno spesso effetti a valle. Una voce registrata potrebbe emettere una fattura, che a sua volta potrebbe attivare un flusso di lavoro di pagamento. In questi casi, il presupposto di LATS viene meno. Il presupposto è valido solo per Beancount, dove la contabilità è un file di testo semplice sotto controllo Git e le modifiche vengono apportate localmente prima di qualsiasi attivazione a valle; questa è un vincolo progettuale che deve essere mantenuto esplicitamente.

Prossime Letture

  • Pianificazione basata su MCTS senza modello ambientale: "Reasoning with Language Model is Planning with World Model" (Hao et al., 2023, arXiv:2305.14992) — La ricerca RAP su cui LATS si basa e migliora direttamente.
  • Quanto bene generalizzano le funzioni di valore dei LM? "Let's Verify Step by Step" (Lightman et al., 2023, arXiv:2305.20050) — Modelli di ricompensa di processo (PRM) come alternativa alle funzioni di valore basate su prompt.
  • Pianificazione multi-step sicura in situazioni irreversibili: "Decision-Making with Language Models via Successive Prompting" (Creswell et al., 2023) — Un approccio di pianificazione più semplice che evita il requisito del ripristino dello stato.

Condividi questo articolo