Compartilhar via


Teste agentes conversacionais usando Linha Direta

A API Direct Line atua como uma interface de comunicação para que aplicações clientes interajam com agentes conversacionais construídos com o Copilot Studio. A API Direct Line facilita a transmissão de mensagens entre a aplicação 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 Linha Direta usando WebSockets

Agentes conversacionais construídos com o Copilot Studio são implantados em aplicações web seja como iframes incorporados ou usando uma tela personalizada. Ambas as opções de implantação utilizam comunicação WebSocket com Direct Line. Se seu agente conversacional for implantado 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 alto grau de confiança.

Aplicações clientes que usam comunicação por linha direta e WebSocket devem seguir este fluxo:

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

Captura de tela mostrando o fluxo da comunicação por linha direta usando WebSockets.

Comunique-se com a Linha Direta usando HTTP GET

Se sua ferramenta de teste de carga não puder usar comunicação WebSocket, ou se sua aplicação voltada para clientes não usar comunicação WebSocket, você pode receber atividades enviando HTTP GET em vez disso. Como mostrado no diagrama a seguir, o fluxo de iniciação de conversa não muda.

Captura de tela mostrando o fluxo da comunicação por linha direta usando HTTP GET.

Mede os tempos de resposta

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

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

Rastrear os tempos de resposta para Gerar Token, Iniciar Conversa e Enviar Atividade é simples para ferramentas de teste de carga, pois essas etapas usam requisiçõ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:

  • Atividades de envio e recebimento via Linha Direta seguem um padrão assíncrono. Quando uma mensagem de usuário é enviada usando uma requisição de Atividade de Envio, a resposta não é uma mensagem do agente. Em vez disso, ele apenas confirma que a mensagem do usuário foi postada com sucesso.

  • Com base em seu design, um agente conversacional 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 um agente leva para responder como o tempo que passa entre uma mensagem de usuário e a última mensagem do agente. No exemplo a seguir, uma única mensagem de usuário dispara três mensagens agente, com chamadas de API rodando entre elas. Cada mensagem leva cerca de dois segundos para responder; no entanto, do ponto de vista do usuário, o agente leva seis segundos para responder ao pedido do usuário.

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

Identifique a última resposta do agente

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

  • Identifique a última mensagem do agente que segue uma mensagem de usuário
  • Calcule a diferença de tempo entre os dois

O protocolo subjacente que o Copilot Studio usa não possui o conceito de 'última resposta', já que 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 de acordo com a forma como seu script se comunica com a Linha Direta.

Use WebSockets

Ao se comunicar com a Direct Line via WebSockets, assuma que o agente não envia mais mensagens quando nenhum outro quadro pode ser lido do WebSocket. Você pode ver isso indicado por um tempo ao tentar ler o próximo frame, embora o comportamento exato dependa da sua implementação. Para uma implementação de referência que utiliza WebSockets, considere usar HTTP GET.

Use HTTP GET

Scripts de teste de desempenho que usam HTTP GET em vez de WebSockets devem consultar o endpoint Atividades para obter o conjunto completo de mensagens de usuário e agente. Ao fazer uma pesquisa, certifique-se de fornecer tempo suficiente para que seu corretor responda. Por exemplo, se seu agente precisar chamar uma API backend para responder a uma consulta de usuário, e a API demorar até 5 segundos para responder, seu script não deve consultar o endpoint Atividades até que 5 segundos tenham se passado.

A seguinte carga útil simplificada representa a resposta retornada do endpoint 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 a carga útil e calcular os tempos de resposta, considere as seguintes diretrizes:

  • Mensagens do agente possuem a propriedade role: bot, enquanto as mensagens do usuário não role possuem propriedade.
  • Mensagens de agente enviadas em resposta a mensagens de usuário têm a propriedade replyToId, que possui um valor da id propriedade 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.