Esecuzione
L'esecuzione dell'albero avviene come una sequenza di interazioni. Ogni interazione inizia quando l'untente invia un messaggio, e si conclude quando l'agente invia una risposta. Tra un'interazione e la successiva vengono memorizzate delle informazioni che includono la conversazione salvata dentro la history ed il session_state.
Tra le informazioni conservate ed associate alla sessione è presente l'id dell'ultimo nodo eseguito. Infatti, nonostante l'agente sia un grafo composto da una moltitudine di nodi, l'esecuzione dell'albero avviene sempre per mezzo di un singolo nodo alla volta, quindi, per garantire un comportamento coerente tra intarazioni consecutive, in fase di avvio viene ripristinato lo stato della sessione precedente e rispresa l'esecuzione dall'ultimo nodo.
La sessione rappresenta un flusso di interazioni gestite per un singolo utente finale. Grazie alla sessione è possibile mantenere delle conversazioni private per ogni utente e memorizzare delle informazioni nel session_state.
Esecuzione generale
Ad alto livello l'esecuzione di un'interazione avviene seguendo questi macro passaggi:
- Viene recuperato il
session_statee la history associati alla sessione corrente; - Viene recuperato il messaggio dell'utente e prodotto un oggetto
TreeAgentInput; - Vengono istanziati il File Agent ed il Memory Agent;
- Se l'opzione del root node
Smart extended messageè abilitata, il Memory Agent, tramite un LLM, contestualizza l'ultimo messaggio dell'utente ed aggiorna ilTreeAgentInput.extended; - Viene eseguita la callback chiamata
before_run; - Viene eseguito il flusso dell'albero che produce un output di tipo
AgentOutput; - Viene eseguita la callback chiamata
after_run; - Viene restituito l'output all'utente. Inoltre, per l'interazione successiva, sono aggiornati i dati relativi alla sessione: il
session_statee la history.
Il TreeAgentInput.extended è l'ultimo messaggio inviato dall'utente ed esteso tramite un apposito LLM all'interno del Memory Agent. Il vantaggio di questo messaggio è che contiene gli eventuali riferimenti impliciti derivanti dai messaggi precedentemente scambiati. Per aiutare il Memory Agent a ricavare un buon extended_message bisogna impostare le relative proprietà Conversation goal e Topics inserite dentro il root node.
Esecuzione del run
A basso livello, il flusso di esecuzione dell'albero avviene seguendo i seguenti passaggi:
- L'utente scrive il primo messaggio della sessione;
- Step explore: Viene individuato il nodo da eseguire. A seguito del primo messaggio, se non diversamente specificato tramite la callback
before_run, la ricerca parte dall'agent node con proprietàis_primary = True(agent node con icona ☆ attiva); - Step before: Viene eseguita la callback
beforedel nodo individuato; - Step execute: Viene prodotta la risposta dell'agente a partire dal nodo individuato;
- Viene inviata all'utente la risposta dell'agente e l'utente scrive un nuovo messaggio;
- Step after: Viene eseguita la callback
afterdel nodo individuato; - In base alla proprietà
node_targetrestituita nella callbackafterposso:- muovermi nel nodo indicato;
- restare nel nodo corrente se la proprietà è vuota;
- In base alla proprietà
steprestituita nella callbackafterposso:Step.EXPLORE: eseguire tutto a partire dal punto 2;Step.BEFORE: eseguire tutto a partire dal punto 3;Step.AFTER: eseguire tutto a partire dal punto 6;
I 4 step: explore, before, execute e after si alternano continuamente durante l'esecuzione del Tree Agent. Tramite la callback after l'ordine di questi passaggi può essere modificato.
A regime, come illustrato nell'immagine, il flusso parte dalla fase 6. (quando l'utente riponde ad un messaggio) e si conclude alla fase 4 (quando viene inviata una risposta all'utente).
Se il nodo eseguito ha proprietà is_mute = True, allora la fase 5 viene saltata.