Gespreksagents testen met Direct Line

De Direct Line API biedt een communicatie-interface waarmee clienttoepassingen kunnen interageren met gespreksagenten die zijn ontwikkeld met Copilot Studio. De Direct Line API faciliteert de verzending van berichten tussen de clienttoepassing en de agent via WebSocket-streams of HTTP-verzoeken. Voor prestatietests stelt Direct Line belastingstesttools in staat om echt gebruikersgedrag te simuleren, belasting te genereren en responstijden te meten.

Communiceer met Direct Line met behulp van WebSockets

U kunt gespreksagenten die zijn gemaakt met Copilot Studio, implementeren in webtoepassingen als ingesloten iFrames of door gebruik te maken van een aangepast canvas. Beide implementatieopties maken gebruik van WebSocket-communicatie met Direct Line. Als u uw conversationele agent in een app implementeert met een van deze methoden, moet uw prestatietestscript WebSocket-communicatie gebruiken om belasting te genereren die echt gebruikersgedrag nabootst, en de prestaties met grote betrouwbaarheid meten.

Clienttoepassingen die Direct Line en WebSocket-communicatie gebruiken, moeten deze stroom volgen:

  1. Om een gesprek te starten, moet een clienttoepassing eerst een gesprekstoken verkrijgen. Als uw agent is geconfigureerd met een Direct Line-geheim, moet u een token verkrijgen door het regionale Direct Line-eindpunt aan te roepen. Tokens voor agenten zonder geheimen kunnen worden verkregen van het tokeneindpunt.
  2. De clienttoepassing start een gesprek met behulp van het token en ontvangt een gespreks-id en een WebSocket-stream-URL.
  3. Gebruikersberichten worden verzonden door een HTTP POST-verzoek met de gespreks-id te sturen.
  4. Berichten van de gespreksagent worden ontvangen via de WebSocket-stream.

Schermopname die het communicatieverloop van Direct Line via WebSockets toont.

Communiceren met Direct Line via HTTP GET

Als uw belastingstesttool geen WebSocket-communicatie ondersteunt, of als uw clienttoepassing geen WebSocket-communicatie gebruikt, kunt u activiteiten ontvangen door een HTTP GET te sturen. Zoals te zien is in het volgende diagram, verandert de startstroom van het gesprek niet.

Schermopname die het communicatieverloop van Direct Line via HTTP GET toont.

Responstijden meten

Om te beoordelen hoe belasting de gebruikerservaring beïnvloedt, zorgt u ervoor dat uw prestatietestscripts de responstijden van de volgende stappen bijhouden en rapporteren:

Stap Invloed op gebruikerservaring
Token genereren De tijd die nodig is om een nieuw gesprek te initiëren
Gesprek starten De tijd die nodig is om een nieuw gesprek te initiëren
Activiteit verzenden De tijd die het kost om een nieuw gebruikersbericht te verzenden (zonder de respons van de agent)
Activiteiten ontvangen/activiteiten ophalen De tijd die het kost voordat een agent reageert

Het bijhouden van responstijden voor Token genereren, Gesprek starten en Activiteit verzenden is eenvoudig voor belastingstesttools, omdat deze stappen via standaard HTTP-verzoeken verlopen. Het bepalen van de reactietijd van een agent op gebruikersberichten is echter ingewikkelder, om de volgende redenen:

  • Het verzenden en ontvangen van activiteiten via Direct Line verloopt asynchroon. Wanneer een gebruikersbericht wordt verzonden via een Activiteit verzenden-verzoek, is de respons geen bericht van de agent. In plaats daarvan bevestigt het alleen dat het gebruikersbericht succesvol is geplaatst.

  • Op basis van het ontwerp kan een gespreksagent een willekeurig aantal berichten terugsturen als respons op een gebruikersbericht. Daarom moet u in de meeste gevallen de reactietijd van een agent meten als de tijd die verstrijkt tussen een gebruikersbericht en het laatste bericht van de agent. In het volgende voorbeeld leidt één enkel gebruikersbericht tot drie berichten van de agent, waarbij API-aanroepen ertussen plaatsvinden. Elk bericht komt na ongeveer twee seconden terug; vanuit het perspectief van de gebruiker duurt het echter zes seconden voordat de agent op het verzoek van de gebruiker reageert.

    Schermopname die de responstijd tussen berichten toont.

Identificeer de laatste respons van de agent

Om de tijd te meten die een agent nodig heeft om de respons te voltooien, moet uw prestatietestscript het volgende doen:

  • Het laatste agentbericht identificeren dat volgt op een gebruikersbericht
  • Het tijdsverschil berekenen tussen de twee

Het onderliggende protocol dat Copilot Studio gebruikt, kent geen concept van een 'laatste respons', omdat zowel de agent als de gebruiker op elk moment berichten kunnen verzenden. Daarom moet uw script voor prestatietests ervan uitgaan dat, als de agent binnen een bepaalde periode geen bericht verstuurt, er geen verdere berichten worden verzonden totdat de volgende gebruikersboodschap wordt verstuurd. De implementatie van deze logica varieert afhankelijk van hoe uw script communiceert met Direct Line.

WebSockets gebruiken

Bij communicatie met Direct Line via WebSockets gaat u ervan uit dat de agent geen berichten meer stuurt wanneer er geen frames meer van de WebSocket kunnen worden gelezen. Dit kan worden aangegeven door een time-out wanneer u probeert het volgende frame te lezen, hoewel het exacte gedrag afhangt van uw implementatie. Voor een referentie-implementatie die WebSockets gebruikt, kunt u overwegen HTTP GET te gebruiken.

HTTP GET gebruiken

Prestatietestscripts die HTTP GET gebruiken in plaats van WebSockets, moeten het eindpunt Activiteiten pollen om de volledige set gebruikers- en agentberichten op te halen. Zorg er bij het pollen voor dat uw agent voldoende tijd krijgt om te reageren. Als uw agent bijvoorbeeld een backend-API moet aanroepen om te reageren op een gebruikersquery, en de API heeft tot vijf seconden nodig om te reageren, dan mag u het eindpunt Activiteiten pas pollen nadat vijf seconden zijn verstreken.

De volgende vereenvoudigde payload geeft de respons weer die terugkomt vanaf het eindpunt Activiteiten:

[
  {
    "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"
  }
]

Wanneer u de payload ontleedt en responstijden berekent, houd dan rekening met de volgende richtlijnen:

  • Berichten van de agent hebben de eigenschap role: bot, terwijl berichten van de gebruiker geen role-eigenschap hebben.
  • Agentberichten die als respons op gebruikersberichten worden verzonden, hebben de eigenschap replyToId, die een waarde heeft van de id-eigenschap van het gebruikersbericht.
  • U kunt de responstijden van de agent berekenen als het tijdsverschil tussen het gebruikersbericht en het laatste agentbericht dat op het gebruikersbericht reageert.