Testar agentes de conversa usando o Direct Line

A Direct Line API funciona como uma interface de comunicação para aplicativos cliente interagirem com agentes de conversa desenvolvidos no Copilot Studio. A API Direct Line facilita a troca de mensagens entre o aplicativo cliente e o agente por meio de fluxos WebSocket ou requisições HTTP. Para testes de desempenho, o Direct Line permite que ferramentas de teste de carga repliquem o comportamento real do usuário, gerem carga e meçam tempos de resposta.

Comunique-se com o Direct Line usando WebSockets

Você pode implantar agentes de conversação criados com o Copilot Studio em aplicativos Web como iframes incorporados ou usando uma tela personalizada. Ambas as opções de implantação usam comunicação WebSocket com o Direct Line. Se você implantar seu agente de conversa em um aplicativo usando um desses métodos, seu script de teste de desempenho deve usar comunicação WebSocket para gerar carga que se assemelhe ao comportamento real do usuário e medir o desempenho com um alto grau de confiança.

As aplicações clientes que utilizam Direct Line com comunicação WebSocket devem seguir este fluxo:

  1. Para iniciar uma conversa, um aplicativo cliente deve primeiro obter um token de conversa. Se o agente estiver configurado com um segredo do Direct Line, obtenha um token chamando o ponto de extremidade regional do Direct Line. Tokens para agentes que não usem segredos podem ser obtidos pelo ponto de extremidade do token.
  2. O aplicativo cliente inicia uma conversa usando o token e recebe um ID da Conversa e uma URL do fluxo WebSocket.
  3. As mensagens do usuário são enviadas por uma requisição HTTP POST com o ID da Conversa.
  4. As mensagens do agente de conversa são recebidas pelo fluxo WebSocket.

Captura de tela mostrando o fluxo de comunicação do Direct Line usando WebSockets.

Comunicação com o Direct Line usando HTTP GET

Se sua ferramenta de teste de carga não puder usar comunicação WebSocket, ou se seu aplicativo voltado para clientes não usar comunicação WebSocket, você pode receber atividades enviando HTTP GET. Como mostrado no diagrama a seguir, o fluxo de início de conversa não muda.

Captura de tela mostrando o fluxo da comunicação do Direct Line usando HTTP GET.

Medição dos tempos de resposta

Para avaliar como a carga afeta a experiência do usuário, certifique-se de que seus scripts de teste de desempenho acompanhem e reportem o tempo de resposta para as seguintes etapas:

Etapa Impacto na experiência do usuário
Gerar Token O tempo que leva para iniciar uma nova conversa
Iniciar Conversa O tempo que leva para iniciar uma nova conversa
Enviar Atividade O tempo que leva para enviar uma nova mensagem de usuário (não inclui a resposta do agente)
Receber atividades/Obter atividades O tempo que um agente leva para responder

Monitorar os tempos de resposta para Gerar Token, Iniciar Conversa e Enviar Atividade é simples para ferramentas de teste de carga, já que essas etapas usam solicitações HTTP padrão. No entanto, medir o tempo que um agente leva para responder às mensagens do usuário é mais complexo, devido aos seguintes motivos:

  • O envio e recebimento de atividades pelo Direct Line seguem um padrão assíncrono. Quando uma mensagem do usuário é enviada por meio de uma solicitação de Enviar Atividade, a resposta não é uma mensagem do agente. Em vez disso, apenas confirma que a mensagem do usuário foi postada com sucesso.

  • Com base em seu design, um agente de conversa pode enviar qualquer número de mensagens de volta em resposta a uma mensagem do usuário. Portanto, na maioria dos casos, você deve medir o tempo que passa entre uma mensagem de usuário e a última mensagem do agente. No exemplo a seguir, uma única mensagem do usuário aciona três mensagens do agente, com chamadas de API sendo executadas entre elas. Cada mensagem leva cerca de dois segundos para chegar; no entanto, sob a perspectiva do usuário, o agente leva seis segundos para responder à solicitação do usuário.

    Captura de tela mostrando o tempo de resposta entre as mensagens.

Identificar a última resposta do agente

Para medir o tempo que o agente leva para completar suas respostas, seu script de teste de desempenho precisa:

  • Identificar a última mensagem enviada pelo agente após uma mensagem do usuário
  • Calcula a diferença de tempo entre duas

O protocolo de comunicação subjacente usado pelo Copilot Studio não possui o conceito de 'última resposta', pois tanto agentes quanto usuários podem enviar mensagens a qualquer momento. Portanto, seu script de teste de desempenho precisa assumir que, se o agente não enviar uma mensagem dentro de um determinado período, nenhuma outra mensagem será enviada até que a próxima mensagem do usuário seja enviada. A implementação dessa lógica varia conforme a forma como seu script se comunica com o Direct Line.

Use WebSockets

Ao se comunicar com o Direct Line por WebSockets, considere que o agente não enviará mais mensagens quando nenhum quadro adicional pode ser lido do WebSocket. Isso pode ser indicado por um tempo limite ao tentar ler o próximo quadro, embora o comportamento exato dependa da sua implementação. Para obter uma implementação de referência que usa WebSockets, use HTTP GET.

Usar o HTTP GET

Scripts de teste de desempenho que usam HTTP GET em vez de WebSockets devem consultar o ponto de extremidade de Atividades para obter o conjunto completo de mensagens de usuário e agente. Ao consultar, certifique-se de fornecer tempo suficiente para que seu agente responda. Por exemplo, se o seu agente precisar chamar uma API de backend para responder a uma consulta do usuário, e essa API levar até cinco segundos para responder, seu script não deve consultar o ponto de extremidade de Atividades até que cinco segundos tenham decorrido.

O seguinte conteúdo simplificado representa a resposta vinda do ponto de extremidade Atividades:

[
  {
    "type": "message",
    "id": "98SryQaHr2rGthOGpChPK2-us|0000012",
    "timestamp": "2025-01-07T09:12:22.0329242Z",
    "from": {
      "id": "a688eb7d-092a-42a8-8ef5-73123b9c2aaa",
      "name": ""
    },
    "conversation": {
      "id": "98SryQaHr2rGthOGpChPK2-us"
    },
    "text": "I also want to set up a new account",
  },
  {
    "type": "message",
    "id": "98SryQaHr2rGthOGpChPK2-us|0000017",
    "timestamp": "2025-01-07T09:12:24.5478686Z",
    "from": {
      "id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
      "name": "Load Testing",
      "role": "bot"
    },
    "conversation": {
      "id": "98SryQaHr2rGthOGpChPK2-us"
    },
    "text": "Sure, please bear with me as I set up your new account",
    "replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
  },
  {
    "type": "message",
    "id": "98SryQaHr2rGthOGpChPK2-us|0000018",
    "timestamp": "2025-01-07T09:12:33.1960413Z",
    "from": {
      "id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
      "name": "Load Testing",
      "role": "bot"
    },
    "conversation": {
      "id": "98SryQaHr2rGthOGpChPK2-us"
    },
    "text": "Almost done! Thank you for your patience",
    "replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
  },
  {
    "type": "message",
    "id": "98SryQaHr2rGthOGpChPK2-us|0000019",
    "timestamp": "2025-01-07T09:12:41.9166159Z",
    "from": {
      "id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
      "name": "Load Testing",
      "role": "bot"
    },
    "conversation": {
      "id": "98SryQaHr2rGthOGpChPK2-us"
    },
    "text": "All done! Your new account is now active.",
    "inputHint": "acceptingInput",
    "replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012"
  }
]

Ao analisar o conteúdo e calcular os tempos de resposta, considere as seguintes diretrizes:

  • As mensagens do agente têm a propriedade role: bot, e as mensagens do usuário não têm nenhuma propriedade role.
  • Mensagens de agente enviadas em resposta a mensagens de usuário têm a propriedade replyToId, que tem um valor da propriedade id da mensagem do usuário.
  • Você pode calcular os tempos de resposta do agente como a diferença de tempo entre a mensagem do usuário e a última mensagem do agente que responde à mensagem do usuário.