Pular para o conteúdo principal
Se o seu agente já emite traces de OpenTelemetry com os atributos gen_ai.*, ele pode escrever na Niadra sem chamada nova no caminho da conversa: aponte um exportador OTLP para a Niadra, e cada chamada ao modelo vira as mensagens da conversa, com quem falou e quando. É o jeito mais rápido de começar a construir memória a partir de um agente que você não quer mexer, e um caminho comum para capturar uma plataforma de fornecedor que exporta traces mas não tem integração com a Niadra. A leitura continua por context(), pelas ferramentas do histórico ou pelo MCP. O OpenTelemetry cobre o lado da escrita.

O endpoint

A Niadra recebe OTLP por HTTP, com o corpo em JSON (Content-Type: application/json) ou em protobuf (application/x-protobuf), com ou sem gzip:
Autentique com a chave da fonte em Authorization: Bearer, a mesma que o seu agente usaria no SDK, com o escopo track. A resposta é a do OTLP: cada mensagem recusada conta uma vez em partialSuccess.rejectedSpans, com a posição e o motivo em errorMessage.

Os níveis

O que os spans produzem depende do que eles levam. Com a funcionalidade turns ligada no espaço, cada turno dos spans vira também um registro de turno: Um registro bronze guarda os digests do que leu, não os valores: o modo dele é hash_only, a menos que a gravação do espaço diga outra coisa para a fonte. Um valor que o exportador cortou, por limite de tamanho de atributo ou por atributo descartado, marca a chamada truncated: true.

O que a Niadra lê de um span

As convenções semânticas gen_ai ainda mudam, e várias gerações de atributos convivem nas bibliotecas em uso hoje. A Niadra lê em cascata, então você não precisa travar a versão de biblioteca por nossa causa: De uma chamada de ferramenta (gen_ai.operation.name igual a execute_tool), a Niadra lê gen_ai.tool.name, gen_ai.tool.call.id (ou o id do span) e, quando a instrumentação captura conteúdo, os argumentos e o resultado, que viram uma chamada kind: tool do registro com a duração do span. De uma chamada de modelo, o modelo (gen_ai.response.model, ou gen_ai.request.model), gen_ai.usage.input_tokens e gen_ai.usage.output_tokens, a contagem de tokens em cache quando a instrumentação a reporta, e as mensagens de entrada e saída. Algumas coisas não têm atributo no OpenTelemetry, então você mesmo marca, no span ou no recurso: Um span ou um evento de span chamado niadra.exposure, emitido quando uma lista chega à pessoa (não quando a ferramenta a devolve), leva niadra.exposure.id, niadra.exposure.list, niadra.exposure.page, niadra.exposure.offset, niadra.exposure.visible_k e niadra.exposure.items (um JSON com pos, ref e shown), e vira uma interação presented dos sinais do cliente. Cada span repete a conversa até ali, então cada mensagem ganha a chave de idempotência da posição dela na conversa: um histórico exportado de novo é deduplicado, em vez de duplicado. Os spans de um turno podem chegar em mais de uma exportação: a Niadra os funde no mesmo registro (uma exportação posterior acrescenta as chamadas e as exposições que faltavam e alarga o começo e o fim), e uma exportação que não acrescenta nada conta como duplicata. O SDK pode copiar niadra.turn.id e niadra.pack.hash do baggage do OpenTelemetry para os spans do turno, para eles chegarem a spans que o seu código nunca toca; o baggage viaja nos cabeçalhos de toda chamada de saída, inclusive a terceiros, então só esses dois valores podem ir nele, nunca um handle, uma exposição ou qualquer valor que nomeie uma pessoa.
Atributos de span podem parar em todo destino para onde o seu coletor exporta. Prefira um id interno (app_user_id ou enduser.id) a um telefone ou e-mail, e mande os atributos da Niadra só no pipeline que vai para a Niadra. Dado pessoal nunca viaja na URL.

Passos

1. Aponte um exportador para a Niadra

Acrescente um exportador OTLP/HTTP ao lado do que você já tem, em JSON ou em protobuf: os exportadores de Node.js e de Python servem como estão, direto para a Niadra ou por um OpenTelemetry Collector, quando você prefere manter um pipeline só para ela.

2. Marque o canal e o cliente

Marque os atributos da Niadra no span que leva as mensagens, ou uma vez no recurso, para um processo que atende um canal só. Mantenha gen_ai.conversation.id estável durante a conversa inteira: ele vira o conversation_id.
Os atributos são lidos do próprio span e do recurso dele. Quando a instrumentação do cliente do modelo grava as mensagens num span filho, marque os atributos da Niadra no recurso, ou copie para aquele span com um processador de spans.

3. Ligue a captura de conteúdo

A maioria das instrumentações gen_ai deixa o conteúdo das mensagens de fora por padrão. A Niadra precisa dele para construir memória, então ligue a captura de conteúdo na instrumentação que você usa (em muitas instrumentações de Python, OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true). Se preferir manter o conteúdo fora dos seus outros destinos, rode um segundo pipeline só para a Niadra.

4. Confira se os eventos chegaram

Um span vira mensagens com as mesmas garantias de um lote: o conteúdo bruto é gravado antes da resposta e os eventos são ordenados pelo momento em que aconteceram. Confira na cobertura da fonte, na tela Sistemas do Console ou por GET /v1/sources/coverage, com uma pessoa do papel integration ou uma chave admin: o que chegou (received) e o que foi recusado (rejected), dia a dia.

Quando usar o SDK

O OpenTelemetry registra o que o modelo viu e disse. O SDK acrescenta o que os traces não levam: o contexto lido antes da resposta e o context_stamp de cada turno do agente, a verificação com verify(), a ligação entre handles com identify(), as ações de agente com closes, as transferências e o fim da conversa. É isso que alimenta a medição do aproveitamento do contexto. Um caminho comum é começar pelo OpenTelemetry para construir memória desde o primeiro dia e depois acrescentar context() e as escritas do SDK nos agentes que atendem o cliente.

Próximos passos

Eventos e o lote

o que é um evento e como ele é deduplicado.

Início rápido

ler o contexto com o SDK.

Receber traces OTLP

a referência do endpoint.

Webhooks dos seus sistemas

eventos de CRM, ERP e help desk.