Componenti
Il Tree Agent è un grafo composto da nodi di varie tipologie, tra cui quelli di tipo component. I nodi component unitamente a quelli head e tail permettono di definire dei gruppi di nodi. Le 3 regole che specificano il comportamento dei componenti sono:
- l'unico nodo figlio del nodo
headè come se fosse direttamente collegato al genitore del nodocomponent; - gli eventuali nodi figli del nodo
componentè come se fosse collegati direttamente al nodo genitore del nodotail. Di conseguenza, se il nodotailnon viene collegato ad alcun nodo dentro il componente, allora quel componente non potrà avere alcun figlio; - dentro il componente, il
selfviene mantenuto isolato da quello dei nodi esterni, di conseguenza, dentro il nodoheadè possibile definire un metodo__init__()specifico del componente;
I metodi init nella root e nei nodi head viene eseguita su solo se durante un'interazione si passa per almeno un nodo contenuto nel relativo componente o a livello di root.
Grazie ai componenti è possibile definire dei gruppi di nodi specializzati in operazioni ben definite, e riutilizzarli più volte senza doverli riscrivere da zero. Ad esempio, il componente knowledge permette di:
- immagazzinare dei chunk tramite un nodo di tipo
querye di estrarli in base alla richiesta dell'utente; - verificare tramite un nodo
llmconis_mute = Truese i chunk identificati contengono le informazioni utili per rispondere; - solo in caso positivo si risponde all'utente attraverso un nodo di tipo
llm, altrimenti si restituisce comeoutcomeunOutcomeType.FAILURE.
Quando si utilizza un componente dentro un Tree Agent, questo viene clonato dentro il progetto con tutti i suoi nodi. Questo fa sì che una volta che si importa un componente, è possibile modificarlo a piacimento. Tuttavia, se si aggiorna una componente, il cambiamento non si propagherà ai Tree Agent che ne fanno uso.
Quando si progetta un componente, si sconsiglia fortemente di far uso del session_state e di limitarsi ad usare il self per condividere informazioni tra nodi. Infatti, il fatto che il session_state è comune in tutto il tree, rischia di portare ad "interferenze", ovvero a più nodi che leggono e scrivono la stessa porzione di memoria. Nel caso in cui fosse indispensabile, per esempio per memorizzare informazioni tra interazioni successive, si prega di verificare che non ci siano conflitti di questo tipo.