Installazione
crewai dalla 1.13 alla 2.0. La 1.13 è la versione che ha aggiunto started_event_id e normalizzato l’utilizzo dei token, entrambi elementi su cui l’adapter si basa per abbinare gli eventi e segnalare i token.
Strumentazione
instrument() registra un listener sul bus degli eventi a livello di modulo di CrewAI e sottoscrive un gestore per ogni classe di evento. Nulla cambia nel tuo equipaggio, agenti, compiti o strumenti.
Cosa viene registrato
Un compito non emette nulla di proposito. Un compito CrewAI è un sottoinsieme dell’esecuzione dell’agente che lo esegue, quindi emettere entrambi comporterebbe il raddoppio di ogni riga e li renderebbe fratelli. L’id e il nome del compito viaggiano invece sugli eventi dell’agente stesso.
Le operazioni di memoria e conoscenza vengono registrate come strumenti, denominati dalla superficie che colpiscono, in modo che vengano visualizzate accanto ai tuoi veri strumenti dove puoi confrontare la loro latenza.
Su un equipaggio gerarchico, l’annidamento è ciò che rende la traccia leggibile:
delegate_work_to_coworker, non direttamente sul manager, quindi l’adapter segue quel collegamento. Senza di esso ogni agente risulta fratello di ogni altro e la struttura della delega viene persa.
Esempio
analyst si chiude, lo span writer si apre, e entrambi si trovano all’interno di uno span crew.
Nomina i tuoi span
agent_id proviene da Agent(role=...), che è quello che lo rende una sfaccettatura leggibile del dashboard.
agent_id è una colonna a bassa cardinalità. Un ruolo contenente un id di esecuzione o un timestamp lo degrada per ogni query che chiunque esegue. Se un ruolo sembra un id, l’adapter lo rifiuta e mette il valore reale in un campo del payload.
Controlla la sessione
Risolto in questo ordine, il primo risultato vince:instrument("crewai", session_id=...)- L’ambito
failproofai_sdk.session()che lo racchiude - Un
uuid4().hexgenerato, una volta per equipaggio o flusso
Opzioni
session_id è l’unica opzione che questo adapter legge. I prompt e i completamenti vengono sempre registrati, troncati al budget del payload.
Ciclo umano nel ciclo
CrewAI ha due superfici di ciclo umano nel ciclo, e entrambe vengono registrate come i medesimi quattro eventi.@human_feedback su un metodo di flusso passa attraverso il bus degli eventi di CrewAI: il runtime emette un evento prima di bloccarsi su una persona e un altro dopo la risposta.
Task(human_input=True) no. Chiama input() all’interno del provider di input di CrewAI e non emette alcun evento, quindi l’adapter avvolge quel provider direttamente — senza di esso l’intera attesa umana era invisibile e fatturata come tempo attivo dell’agente.
In entrambi i casi ottieni:
agent_pause a agent_resume è l’unica coppia che alimenta il tempo di pausa. Senza di essa, un’attesa umana di dieci minuti viene fatturata come dieci minuti di tempo attivo dell’agente.
CrewAI non imposta alcun id di correlazione su nessun evento di feedback umano, quindi l’adapter li abbina in base al nome del flusso e del metodo, tornando alla pausa aperta più di recente. Questo è valido perché un prompt della console blocca. Se costruisci un provider di feedback concorrente, imposta
request_id su entrambi gli eventi.Poiché il percorso
Task(human_input=True) è un wrapper attorno al provider di input di CrewAI piuttosto che una sottoscrizione di evento, viene ripristinato su uninstrument() e ri-genera qualsiasi cosa input() generi, KeyboardInterrupt incluso, invariato.Problemi comuni
Il filtro dell'agente ha migliaia di voci
Il filtro dell'agente ha migliaia di voci
Un
role contiene un UUID, un timestamp o un suffisso per esecuzione. Usa un ruolo umano stabile e metti l’id specifico dell’esecuzione nella descrizione del compito.Un test legge zero eventi, ma il dashboard li mostra
Un test legge zero eventi, ma il dashboard li mostra
Il bus degli eventi è asincrono e Questa è una proprietà di CrewAI, non dell’SDK.
kickoff() ritorna prima che gli ultimi gestori vengano eseguiti. Svuotalo prima:Una sessione viene mostrata come in corso per sempre
Una sessione viene mostrata come in corso per sempre
agent_end forza la chiusura delle pause aperte ma non degli strumenti o dei modelli, quindi un’esecuzione che muore dentro una chiamata di strumento lascia quello span aperto. Lo spegnimento normale chiude tutto ciò che è ancora aperto e lo contrassegna come incompleto. Solo un SIGKILL lo lascia in sospeso, perché nulla può essere eseguito.Nulla viene registrato
Nulla viene registrato
Verifica in questo ordine:
instrument() è stato eseguito prima di kickoff(); c’è un with failproofai_sdk.session(): attorno; crewai è versione 1.13 o più recente; FAILPROOFAI_SDK_STRICT=1 impostato, quindi un hook degradato genera un’eccezione anziché essere ingoiato.Avanti
Come funziona
Coppie, id, ciclo di vita della sessione e consegna.
Leggi una traccia
Segui la causalità attraverso la sessione che hai appena acquisito.
Altri framework
LangGraph, LlamaIndex, Pydantic AI e agenti personalizzati.

