Skip to main content

Installazione

Supportato: pydantic-ai-slim 2.0 to 3.0. La versione 2.0 ha rimosso Agent(instrument=...) e introdotto il protocollo di capacità su cui questo adapter è costruito, quindi la versione 1.x non può essere strumentata in questo modo.

Strumentazione

instrument() deve essere eseguito prima di costruire un Agent. La capacità viene aggiunta al momento della costruzione, quindi un agente costruito in precedenza non ne possiede nessuna e non registra nulla, senza errore perché nulla è andato storto. Questa è la causa più comune di una traccia vuota con questo adapter.
Gli agenti a livello di modulo sono dove questo diventa problematico:
Verifica che abbia funzionato:
Pydantic AI unisce l’elenco che passi in una singola root_capability, quindi non esiste un attributo agent.capabilities da leggere. Gli agenti costruiti mentre strumentati mantengono la capacità, quindi puoi uninstrument() e re-strumentare senza ricostruirli.

Cosa viene registrato

Non esiste una coppia di hook e nessuna coppia human-in-the-loop qui. Pydantic AI non ha un confine di nodo o passo da delimitare e nessuna pausa umana integrata, quindi non c’è nulla da mappare. Se ne costruisci uno, emetti gli eventi tu stesso — vedi Agenti personalizzati. output_type non fa differenza nella traccia. Un’esecuzione tipizzata e un’esecuzione di stringa producono gli stessi eventi.

Esempio

Nella traccia, restock_eta appare come un tool_result che contiene un errore, seguito da un’altra chiamata di modello dove l’agente lo aggira, e l’esecuzione termina comunque con success. Entrambi i fatti sono registrati.

Errori, retry e flusso di controllo

Pydantic AI genera eccezioni per tre cose diverse, e l’adapter le separa: ModelRetry è nel primo gruppo deliberatamente. Significa che un tentativo è veramente fallito e il modello è stato chiesto di riprovare, che è esattamente per cosa serve il campo errore di uno span di tool. Classificarlo come flusso di controllo nasconderebbe i veri fallimenti di tool dietro un’esecuzione verde.

Nomina i tuoi span

Lo span di esecuzione proprio di Pydantic AI è denominato agent. Avvolgi la chiamata per assegnargli un’etichetta che hai scelto:
Lo span del framework allora si annida sotto inventory, e è lì che gli eventi di modello e tool sono collegati. Mantieni agent_id a bassa cardinalità. È il facet principale su ogni superficie della dashboard, quindi usa un nome di ruolo, mai un UUID o una stringa per-esecuzione.

Controlla la sessione

Risolto in questo ordine, il primo corrispondente vince:
  1. instrument("pydantic_ai", session_id=...)
  2. Lo scope failproofai_sdk.session() che lo contiene
  3. conversation_id dell’esecuzione, poi il suo run_id
  4. Un uuid4().hex generato

Opzioni

Problemi comuni

L’Agent è stato costruito prima che instrument() fosse eseguito. Vedi l’avvertenza sopra e controlla agent.root_capability.capabilities.
Un raise semplice si propaga; è il design di Pydantic AI. Per consentire al modello di aggirarla, solleva ModelRetry con un messaggio su cui possa agire. Il fallimento è registrato comunque.
Quel figlio è lo span di esecuzione proprio di Pydantic AI, ed è dove gli eventi di modello e tool sono collegati. Elimina il tuo scope se vuoi un singolo span, al costo del nome personalizzato.
Lo stack del grafo asincrono di Pydantic AI è più lungo del limite del campo payload, e l’ultima riga di una traceback è l’eccezione stessa. Questo campo viene ritagliato dalla parte anteriore piuttosto che da quella posteriore, quindi la riga di cui hai bisogno sopravvive.

Prossimo

Come funziona

Coppie, id, ciclo di vita della sessione e consegna.

Leggi una traccia

Segui la causalità attraverso la sessione che hai appena catturato.

Altri framework

LangGraph, CrewAI, LlamaIndex e agenti personalizzati.