Partilhar via


Testar agentes conversacionais usando Linha Direta

A API Direct Line atua como uma interface de comunicação para aplicações clientes interagirem 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 através de fluxos WebSocket ou pedidos HTTP. Para testes de desempenho, o Direct Line permite que ferramentas de teste de carga repliquem o comportamento real do utilizador, gerem carga e medam tempos de resposta.

Comunicar com Linha Direta usando WebSockets

Agentes conversacionais construídos com o Copilot Studio são implementados em aplicações web, seja como iframes incorporados ou utilizando uma tela personalizada. Ambas as opções de implementação utilizam comunicação WebSocket com Linha Direta. Se o seu agente conversacional for implementado numa aplicação usando um destes métodos, o seu script de teste de desempenho deve usar comunicação WebSocket para gerar carga que se assemelhe ao comportamento real do utilizador e medir o desempenho com um elevado grau de confiança.

As aplicações cliente que utilizam comunicação por Linha Direta e WebSocket devem seguir este fluxo:

  1. Para iniciar uma conversa, uma aplicação cliente deve primeiro obter um token de conversação. Se o seu agente estiver configurado com um segredo Direct Line, obtenha um token ligando para o endpoint regional Direct Line. Tokens para agentes que não usam segredos podem ser obtidos a partir do endpoint do token.
  2. A aplicação cliente inicia uma conversa usando o token e recebe um ID de Conversa e um URL de fluxo WebSocket.
  3. As mensagens do utilizador são enviadas através de um pedido HTTP POST com o ID de Conversa.
  4. As mensagens do agente conversacional são recebidas através do fluxo WebSocket.

Captura de ecrã que mostra o fluxo da comunicação por Linha Direta usando WebSockets.

Comunicar com Linha Direta usando HTTP GET

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

Captura de ecrã que mostra o fluxo da comunicação por Linha Direta usando HTTP GET.

Medir tempos de resposta

Para avaliar como a carga afeta a experiência do utilizador, certifique-se de que os scripts de teste de desempenho acompanham e reportam o tempo de resposta para os seguintes passos:

Step Impacto na experiência do utilizador
Gerar Token O tempo que demora a iniciar uma nova conversa
Iniciar Conversa O tempo que demora a iniciar uma nova conversa
Atividade de envio O tempo que demora a enviar uma nova mensagem de utilizador (não inclui a resposta do agente)
Receber Atividades/Receber Atividades O tempo que um agente demora a responder

Rastrear os tempos de resposta para Gerar Token, Iniciar Conversa e Enviar Atividade é simples para ferramentas de teste de carga, pois estes passos usam pedidos HTTP padrão. No entanto, medir o tempo que um agente demora a responder às mensagens do utilizador é mais complexo, devido às seguintes razões:

  • As atividades de envio e receção através da Linha Direta seguem um padrão assíncrono. Quando uma mensagem de utilizador é enviada usando um pedido de Atividade de Envio, a resposta não é uma mensagem do agente. Em vez disso, apenas confirma que a mensagem do utilizador foi publicada com sucesso.

  • Com base no seu design, um agente conversacional pode enviar qualquer número de mensagens de volta em resposta a uma mensagem do utilizador. Portanto, na maioria dos casos, deve medir o tempo que um agente demora a responder como o tempo que passa entre uma mensagem de utilizador e a última mensagem do agente. No exemplo seguinte, uma única mensagem de utilizador desencadeia três mensagens de agente, com chamadas de API a correr pelo meio. Cada mensagem demora cerca de dois segundos a responder; no entanto, do ponto de vista do utilizador, o agente demora seis segundos a responder ao pedido do utilizador.

    Captura de ecrã que mostra o tempo de resposta entre mensagens.

Identificar a última resposta do agente

Para medir o tempo que um agente demora a completar as suas respostas, o seu script de teste de desempenho precisa:

  • Identificar a última mensagem do agente que segue uma mensagem de utilizador
  • Calcule a diferença de tempo entre os dois

O protocolo subjacente que o Copilot Studio utiliza não tem o conceito de 'última resposta', pois tanto agentes como utilizadores podem enviar mensagens a qualquer momento. Portanto, o seu script de testes de desempenho deve assumir que, se o agente não enviar uma mensagem dentro de um determinado período de tempo, não serão enviadas mais mensagens até que a próxima mensagem do utilizador seja enviada. A implementação desta lógica varia consoante a forma como o seu script comunica com a Linha Direta.

Use WebSockets

Ao comunicar com a Direct Line via WebSockets, assuma que o agente não envia mais mensagens quando não é possível ler mais frames a partir do WebSocket. Pode ver isto indicado por um timeout 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.

Usar HTTP GET

Scripts de teste de desempenho que usam HTTP GET em vez de WebSockets devem sondar o endpoint Atividades para obter o conjunto completo de mensagens do utilizador e agente. Ao fazer uma sondagem, certifique-se de dar tempo suficiente para que o seu agente responda. Por exemplo, se o seu agente precisar de chamar uma API backend para responder a uma consulta do utilizador, e a API demorar até 5 segundos a responder, o seu script não deve sondar o endpoint Atividades até terem passado 5 segundos.

A seguinte carga útil simplificada representa a resposta que recebe 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 orientações:

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