Skip to main content

Instalación

Compatible con: pydantic-ai-slim 2.0 a 3.0. La versión 2.0 eliminó Agent(instrument=...) e introdujo el protocolo de capacidades en el que se basa este adaptador, por lo que la versión 1.x no puede instrumentarse de esta manera.

Instrumentar

instrument() debe ejecutarse antes de construir un Agent. La capacidad se agrega en el momento de la construcción, por lo que un agente creado antes no tendrá ninguna y no registrará nada, sin producir ningún error. Esta es la causa más común de una traza vacía con este adaptador.
Los agentes de alcance de módulo son donde esto puede causar problemas:
Verifica que se aplicó correctamente:
Pydantic AI combina la lista que proporcionas en un único root_capability, por lo que no existe un atributo agent.capabilities que puedas leer directamente. Los agentes construidos mientras está activa la instrumentación conservan la capacidad, así que puedes ejecutar uninstrument() y volver a instrumentar sin necesidad de reconstruirlos.

Qué se registra

No hay par de hooks ni par de intervención humana. Pydantic AI no tiene un límite de nodo o paso que delimitar ni una pausa humana integrada, por lo que no hay nada que mapear. Si construyes alguno de estos, emite los eventos manualmente — consulta Agentes personalizados. El output_type no afecta la traza. Una ejecución tipada y una ejecución de cadena producen los mismos eventos.

Ejemplo

En la traza, restock_eta aparece como un tool_result con un error, seguido de otra llamada al modelo donde el agente lo resuelve, y la ejecución termina igualmente con success. Ambos hechos quedan registrados.

Errores, reintentos y flujo de control

Pydantic AI lanza excepciones por tres motivos diferentes, y el adaptador los distingue: ModelRetry pertenece deliberadamente al primer grupo. Significa que un intento falló genuinamente y se pidió al modelo que lo intentara de nuevo, que es exactamente para lo que sirve el campo de error de un span de herramienta. Clasificarlo como flujo de control ocultaría fallos reales de herramientas detrás de una ejecución exitosa.

Nombra tus spans

El span de ejecución propio de Pydantic AI se llama agent. Envuelve la llamada para asignarle una etiqueta personalizada:
El span del framework queda entonces anidado bajo inventory, y ahí es donde se ubican los eventos del modelo y las herramientas. Mantén agent_id con baja cardinalidad. Es la faceta principal en todas las vistas del panel, así que usa un nombre de rol, nunca un UUID ni una cadena por ejecución.

Controla la sesión

Se resuelve en este orden, ganando la primera coincidencia:
  1. instrument("pydantic_ai", session_id=...)
  2. El alcance del failproofai_sdk.session() envolvente
  3. El conversation_id de la ejecución, luego su run_id
  4. Un uuid4().hex generado automáticamente

Opciones

Problemas comunes

El Agent fue construido antes de que se ejecutara instrument(). Consulta la advertencia anterior y verifica agent.root_capability.capabilities.
Un raise sin más se propaga; así está diseñado Pydantic AI. Para que el modelo pueda resolverlo, lanza ModelRetry con un mensaje que pueda procesar. El fallo queda registrado en cualquier caso.
Ese hijo es el span de ejecución propio de Pydantic AI, y es donde se ubican los eventos del modelo y las herramientas. Elimina tu propio alcance si quieres un único span, a cambio de perder el nombre personalizado.
La pila del grafo asíncrono de Pydantic AI es más larga que el límite del campo de payload, y la última línea de un traceback es la excepción en sí. Este campo se recorta desde el principio en lugar del final, por lo que la línea que necesitas se conserva.

Siguiente

Cómo funciona

Pares, identificadores, ciclo de vida de la sesión y entrega.

Leer una traza

Sigue la causalidad a través de la sesión que acabas de capturar.

Otros frameworks

LangGraph, CrewAI, LlamaIndex y agentes personalizados.