Blog

Novidades do Dcision: modo sombra, motores lado a lado e GPT-Live

5 min de leitura

Na semana passada o Dcision passou a rodar três motores de decisão: Jev, Laya e OpenAI Decisions. Também passou a aceitar imagem, voz e documentos como entrada. A pergunta seguinte veio rápido: qual motor eu uso nesta decisão, e como sei que trocar não piora nada?

As novidades desta versão respondem isso e fecham algumas pontas que ficaram abertas.

Resumo

NovidadeO que resolveOnde fica
Comparar motoresVer a mesma entrada respondida pelos três motores, lado a ladoPlayground
Modo sombraMedir em produção quanto um segundo motor concorda com o principal, sem mudar a respostaConfigurações da decisão e Visão geral
GPT-LiveUsar as perguntas e políticas da decisão numa sessão de voz da OpenAIAPI pública
Recusa como motivo próprioSaber quando o motor se recusou a responder, e cair no fallbackaction_reason
Custo dos arquivosVer quanto custou transcrever áudio e ler documentosmetrics da resposta
Webhook com arquivosEnviar formulários com anexos direto para o gatilho por webhook/v1/hooks
Quatro templates novosNotas fiscais, áudios, imagens e guardrail de LLM prontos para usarTemplates

Comparar motores no Playground

O Playground ganhou o botão Comparar motores. Ele roda o mesmo estado, com o mesmo rascunho, no Jev, no Laya e no OpenAI Decisions ao mesmo tempo. O resultado aparece numa tabela: a resposta de cada pergunta com a confiança, a ação final, a latência e o custo estimado de cada motor. As linhas em que os motores discordam ficam destacadas.

Cada motor conta como uma execução do Playground, e os destinos não são entregues. Se um motor não estiver configurado no workspace, a coluna dele mostra o código do erro, e o resto da comparação continua.

Modo sombra em produção

Comparar alguns exemplos no Playground ajuda, mas o tráfego real é outra coisa. No modo sombra, você escolhe um motor sombra e uma porcentagem das execuções de produção (de 1% a 100%, padrão 10%). Essas execuções também rodam no motor sombra, em segundo plano, com exatamente a mesma entrada que o motor principal recebeu.

O que não muda:

  • A resposta vem sempre do motor principal. O motor sombra nunca altera a ação, os destinos ou a latência de quem chamou.
  • Execuções sombra não consomem créditos do Dcision. Com a chave do próprio workspace, o provedor cobra na sua conta.
  • O Playground nunca roda sombra. Só versões publicadas, chamadas pela API, pelo webhook ou pelo MCP.

Na aba Visão geral, um cartão mostra a concordância geral e por pergunta, quantas execuções sombra rodaram, quantas falharam e a latência p50 do motor sombra. Concordar quer dizer escolher a mesma opção, dar o mesmo nível de nota ou ficar do mesmo lado de 50% numa pergunta de sim ou não. Com isso, a troca de motor vira uma decisão com dados.

GPT-Live: as perguntas da decisão na sessão de voz

A OpenAI integrou o Decisions ao GPT-Live: a sessão de voz delega perguntas ao Decisions enquanto a pessoa ainda está falando. Até aqui, quem queria isso precisava escrever as perguntas de novo no código da sessão, e as políticas, os registros e as ações ficavam de fora.

Agora são dois endpoints:

  • GET /v1/decisions/{slug}/openai-live devolve a versão publicada da decisão como o objeto delegation da sessão (type: "decisions"), com as perguntas já no formato da OpenAI.
  • POST /v1/decisions/{slug}/openai-live/answers recebe as answers de cada evento decision.completed. O Dcision aplica as políticas, trata recusas, entrega aos destinos e registra a execução, como numa chamada normal da API.

O motor não é chamado de novo e o custo de motor é zero, porque a OpenAI já cobrou a sessão Live. A execução conta como uma decisão no seu plano.

Recusa vira motivo próprio

O OpenAI Decisions pode se recusar a responder uma pergunta. Antes, isso virava erro de motor. Agora a execução responde 200, a pergunta recusada fica fora de result e a decisão toma a ação de fallback com action_reason.type = "refusal" e o nome da pergunta. A ordem de avaliação ficou assim: políticas, recusa, opção other, confiança mínima e, por fim, continue.

Quanto custou ler os arquivos

Quando o estado traz arquivos, a resposta agora informa metrics.input_files, metrics.input_processing_ms e metrics.input_cost_usd. Documentos lidos localmente (PDF, Office, planilhas) custam zero. Áudio transcrito, imagem descrita para motores só de texto e arquivos lidos pela OpenAI entram no custo, e estimated_cost_usd já soma tudo.

Webhook com arquivos

O gatilho por webhook passou a aceitar multipart/form-data. Campos de texto viram textos do estado, arquivos viram entradas dos campos de imagem, áudio ou arquivo, e um campo state opcional com JSON serve de base. O corpo agora pode ter até 32 MB, e a assinatura HMAC continua valendo sobre os bytes brutos. Um formulário com anexo chega direto à decisão, sem servidor no meio.

Quatro templates novos

  • Triagem de notas fiscais: lê o documento e decide entre pagar, revisar ou rejeitar, com escalonamento quando o vencimento está perto.
  • Roteamento de áudios: transcreve a mensagem de voz e decide a intenção, a urgência e o sentimento.
  • Moderação de imagens: avalia se a foto de um anúncio é segura e combina com a legenda.
  • Guardrail de saída de LLM: confere a resposta de um LLM ou agente antes de ela chegar ao usuário. Tem um artigo só sobre ele.

Como começar

Abra uma decisão, vá ao Playground e clique em Comparar motores. Se a concordância for boa, ligue o modo sombra em Configurações e acompanhe a Visão geral por alguns dias antes de trocar o motor principal. A documentação em docs.dcision.io traz o passo a passo de cada novidade, nos cinco idiomas.