Skip to main content

Instalação

Compatível com: pydantic-ai-slim 2.0 a 3.0. A versão 2.0 removeu Agent(instrument=...) e introduziu o protocolo de capacidade no qual este adaptador é construído, portanto a versão 1.x não pode ser instrumentada dessa forma.

Instrumentar

instrument() deve ser executado antes de você construir um Agent. A capacidade é adicionada no momento da construção, portanto um agente criado anteriormente não terá nenhuma e não registrará nada, sem emitir erros porque nada deu errado. Esta é a causa mais comum de um trace vazio com este adaptador.
Agentes com escopo de módulo são onde isso ocorre com mais frequência:
Confirme se funcionou:
O Pydantic AI mescla a lista passada em um único root_capability, portanto não existe um atributo agent.capabilities para ser lido. Agentes construídos enquanto a instrumentação estava ativa mantêm a capacidade, então você pode chamar uninstrument() e reinstrumentar sem precisar recriá-los.

O que é registrado

Não há par de hooks nem par de interação humana aqui. O Pydantic AI não possui limite de nó ou etapa para delimitar e nem pausa humana integrada, portanto não há nada a mapear. Se você implementar qualquer um desses recursos, emita os eventos manualmente — veja Custom agents. output_type não faz diferença no trace. Uma execução tipada e uma execução com string produzem os mesmos eventos.

Exemplo

No trace, restock_eta aparece como um tool_result contendo um erro, seguido de outra chamada ao modelo onde o agente contorna o problema, e a execução ainda termina com success. Ambas as informações são preservadas.

Erros, retentativas e fluxo de controle

O Pydantic AI lança exceções para três situações distintas, e o adaptador as separa: ModelRetry está no primeiro grupo intencionalmente. Significa que uma tentativa genuinamente falhou e o modelo foi solicitado a tentar novamente, que é exatamente para isso que serve o campo de erro de um span de ferramenta. Classificá-lo como fluxo de controle ocultaria falhas reais de ferramentas por trás de uma execução bem-sucedida.

Nomeie seus spans

O próprio span de execução do Pydantic AI é chamado de agent. Envolva a chamada para atribuir um rótulo de sua escolha:
O span do framework então fica aninhado sob inventory, e é lá que os eventos de modelo e ferramenta ficam pendurados. Mantenha agent_id com baixa cardinalidade. Ele é a faceta principal em todas as superfícies do dashboard, portanto use um nome de função, nunca um UUID ou uma string específica por execução.

Controle a sessão

Resolvido nesta ordem, com o primeiro match vencendo:
  1. instrument("pydantic_ai", session_id=...)
  2. O escopo failproofai_sdk.session() envolvente
  3. O conversation_id da execução, depois seu run_id
  4. Um uuid4().hex gerado automaticamente

Opções

Problemas comuns

O Agent foi construído antes de instrument() ser executado. Veja o aviso acima e verifique agent.root_capability.capabilities.
Um raise sem tratamento se propaga; esse é o design do Pydantic AI. Para permitir que o modelo contorne o problema, levante ModelRetry com uma mensagem que ele possa usar. A falha é registrada de qualquer forma.
Esse filho é o próprio span de execução do Pydantic AI, e é onde os eventos de modelo e ferramenta ficam. Remova seu próprio escopo se quiser um único span, ao custo do nome personalizado.
O stack do grafo assíncrono do Pydantic AI é mais longo do que o limite do campo de payload, e a última linha de um traceback é a própria exceção. Este campo é cortado a partir do início, e não do final, para que a linha que você precisa seja preservada.

Próximos passos

Como funciona

Pares, ids, ciclo de vida da sessão e entrega.

Leia um trace

Siga a causalidade através da sessão que você acabou de capturar.

Outros frameworks

LangGraph, CrewAI, LlamaIndex e agentes personalizados.