Instalação
llama-index-core 0.14.23 a 0.15. A versão 0.14.23 é onde o stream do workflow passou a incluir os eventos de agente tipados que este adaptador lê. Em versões anteriores, os nomes dos modelos e a estrutura dos agentes ficam ausentes.
Instrumentação
async with quanto com with e produzem eventos idênticos.
instrument() adiciona um handler de eventos e um handler de spans ao dispatcher global do LlamaIndex. Juntos, eles tornam o loop do agente visível, não apenas as chamadas ao modelo.
Contagem de tokens
FunctionAgent chama astream_chat, e o llama-index-llms-openai não envia stream_options={"include_usage": True} ao fazer streaming. O provedor, portanto, nunca envia o chunk de uso, e não há nada para qualquer instrumentação ler.
Esse é um comportamento do próprio LlamaIndex. Ative no seu LLM:
Chamadas sem streaming (
llm.chat, llm.achat) reportam o uso sem configuração adicional. Apenas o caminho de streaming, que é o caminho padrão do agente, precisa disso.
O que é registrado
agent_id é o FunctionAgent.name quando você define um, e o nome da classe do workflow caso contrário. Em um AgentWorkflow, cada agente que assume o controle recebe seu próprio span aninhado sob o workflow, então uma transferência aparece como dois agentes em vez de um.
A saída da recuperação é resumida em vez de despejada integralmente. Um retriever retorna documentos, e armazená-los no payload colocaria seu corpus no store de eventos a cada consulta. Em vez disso, são mantidos a contagem, o intervalo de scores e trechos truncados.
Exemplo
init_run, setup_agent, run_agent_step, parse_agent_output, call_tool e aggregate_tool_results. Eles fazem parte do próprio loop do framework, por isso são hooks em vez de agentes, o que mantém o agent_id com significado claro.
Nomeie seus spans
agent_id é o FunctionAgent.name quando você define um, e o nome da classe do workflow caso contrário.
AgentWorkflow, esse nome também é usado para registrar cada transferência:
agent_id indica qual agente realizou o trabalho e parent_id indica a qual workflow ele pertencia. Um agente que devolve o controle posteriormente abre um segundo turno em vez de reabrir o primeiro.
Envolva a execução para sobrescrever isso, ou para agrupar vários agentes sob um mesmo pai:
agent_id com baixa cardinalidade. Ele é a faceta primária em todas as superfícies do dashboard, portanto use um papel ou nome de workflow, nunca um UUID ou string por execução.
Controle a sessão
Este adaptador não aceita a opçãosession_id. A sessão vem do escopo envolvente e, caso contrário, é gerado um uuid4().hex por execução do workflow:
Opções
Human in the loop
Capturado quando a espera acontece dentro de uma ferramenta:ctx.wait_for_event em um step comum de workflow não é capturado. O runtime intercepta o drop antes que ele chegue ao dispatcher, então o step sai e é executado novamente mais tarde sem sinal para identificar uma pausa. O padrão FunctionAgent, que o LlamaIndex documenta, aguarda dentro de uma ferramenta e é capturado por completo.
Problemas comuns
Toda contagem de tokens é nula
Toda contagem de tokens é nula
Adicione
additional_kwargs={"stream_options": {"include_usage": True}} ao seu LLM. Veja Contagem de tokens.O uso está preenchido, mas as colunas de tokens estão vazias
O uso está preenchido, mas as colunas de tokens estão vazias
O LlamaIndex não possui um campo de uso padronizado. O adaptador tenta várias estruturas conhecidas, e uma integração que nomeia seus contadores de forma diferente não vai corresponder a nenhuma delas.O dict bruto sempre é enviado, então verifique
usage no payload para ver como seu provedor os nomeou.Um usage preenchido junto com colunas de tokens vazias é intencional — é melhor do que um número errado exibido com confiança.O timeline está cheio de setup_agent e parse_agent_output
O timeline está cheio de setup_agent e parse_agent_output
Esse é o loop do FunctionAgent, um conjunto por iteração. Filtre pelo nome do hook no dashboard. Esses tempos de step costumam ser o principal motivo para usar este adaptador em vez de um focado apenas no modelo.
Nada é registrado
Nada é registrado
Verifique nesta ordem:
instrument() foi chamado antes da execução; há um async with failproofai_sdk.session(): em torno do await; o llama-index-core é 0.14.23 ou mais recente; FAILPROOFAI_SDK_STRICT=1 está definido, para que um hook degradado lance exceção em vez de ser suprimido.Próximos passos
Como funciona
Pares, ids, ciclo de vida da sessão e entrega.
Leia um trace
Siga a causalidade pela sessão que você acabou de capturar.
Outros frameworks
LangGraph, CrewAI, Pydantic AI e agentes personalizados.

