Keskusteluagenttien testaaminen Direct Linen avulla

Direct Line -ohjelmointirajapinta toimii viestintärajapintana, jonka kautta asiakassovellukset voivat olla vuorovaikutuksessa Copilot Studiolla luotujen keskusteluagenttien kanssa. Direct Line -ohjelmointirajapinta mahdollistaa viestien siirron asiakassovelluksen ja agentin välillä joko WebSocket-viestivirtojen tai HTTP-pyyntöjen kautta. Suorituskyvyn testauksessa Direct Line antaa kuormitustestaustyökalujen jäljitellä käyttäjien todellista toimintaa, tuottaa kuormitusta ja mitata vastausaikoja.

Viestintä Direct Linen kanssa WebSockets-protokollan avulla

Voit ottaa Copilot Studiolla luodut keskusteluagentit käyttöön verkkosovelluksissa joko upotettuina iFrame-elementteinä tai käyttämällä mukautettua kaaviota. Molemmat käyttöönottovaihtoehdot käyttävät WebSocket-viestintää Direct Linen kanssa. Jos otat keskusteluagentin käyttöön sovelluksessa käyttämällä jotakin näistä menetelmistä, suorituskykytestin komentosarjan tulee käyttää WebSocket-viestintää luodessaan kuormitusta, joka muistuttaa käyttäjien todellista toimintaa, ja mitata suorituskykyä erittäin varmasti.

Direct Line- ja WebSocket-yhteyttä käyttävien asiakasohjelmien tulee edetä seuraavasti tässä työnkulussa:

  1. Jotta keskustelu voidaan aloittaa, asiakassovelluksen on ensin hankittava keskustelun tunnus. Jos agentti on määritetty Direct Linen salaisella koodilla, hanki tunnus kutsumalla Direct Linen alueellista päätepistettä. Niiden agenttien, jotka eivät käytä salaisia koodeja, tunnuksen haetaan tunnuksen päätepisteestä.
  2. Asiakasohjelma aloittaa keskustelun käyttämällä tunnusta, ja vastaanottaa keskustelun tunnuksen sekä WebSocket-viestivirran URL-osoitteen.
  3. Käyttäjän viestit lähetetään lähettämällä HTTP POST -pyyntö, jossa mukana on keskustelun tunnus.
  4. Keskusteluagentin viestit vastaanotetaan WebSocket-viestivirran kautta.

Näyttökuva, jossa on Direct Line -viestinnän työnkulku WebSockets-protokollan kautta.

Viestintä Direct Linen kanssa HTTP GET -pyynnön avulla

Jos kuormitustestityökalu ei tue WebSocket-viestintää tai jos asiakassovellus ei käytä WebSocket-viestintää, voit vastaanottaa aktiviteetteja lähettämällä HTTP GET -pyynnön sen sijaan. Kuten seuraavassa kaaviossa näkyy, keskustelun aloitustyönkulku ei muutu.

Näyttökuva, jossa näytetään Direct Line -viestinnän eteneminen HTTP GET -pyynnön avulla.

Vastausaikojen mittaus

Jos haluat arvioida, miten kuormitus vaikuttaa käyttäjäkokemukseen, varmista, että suorituskykytestin komentosarjat seuraavat ja raportoivat vastausaikoja seuraavien vaiheiden osalta:

Vaihe Vaikutus käyttäjäkokemukseen
Luo tunnus Aika, joka kuluu uuden keskustelun aloittamiseen
Aloita keskustelu Aika, joka kuluu uuden keskustelun aloittamiseen
Lähetä toiminta Aika, joka kuluu uuden käyttäjän viestin lähettämiseen (ei sisällä agentin vastausta)
Vastaanota aktiviteetteja / Hanki aktiviteetteja Aika, joka agentilla kuluu vastaamiseen

Luo tunnus-, Aloita keskustelu- ja Lähetä aktiviteetti -toimintojen vastauksen ajan seuranta on suoraviivaista kuormitustestaustyökaluissa, koska nämä vaiheet käyttävät tavallisia HTTP-pyyntöjä. Kuitenkin ajan mittaaminen, joka agentilla kestää vastata käyttäjän viesteihin, on monimutkaisempaa seuraavista syistä:

  • Aktiviteettien lähettäminen ja vastaanottaminen Direct Linen kautta noudattaa asynkronista mallia. Kun käyttäjän viesti lähetetään Lähetä aktiviteetti -pyynnön avulla, vastauksena ei tule agentin viestiä. Sen sijaan saadaan vain vahvistus siitä, että käyttäjän viesti on lähetetty onnistuneesti.

  • Agentin suunnittelusta riippuen keskusteluagentti saattaa lähettää minkä tahansa määrän viestejä vastauksena käyttäjän viestiin. Siksi useimmissa tapauksissa agentin vastausaika tulisi mitata käyttäjän viestin ja viimeisen agentin lähettämän viestin välisenä aikana. Seuraavassa esimerkissä yksi käyttäjän viesti käynnistää kolme agentin viestiä, joiden välissä suoritetaan ohjelmointirajapintakutsuja. Jokaisen viestin saapumiseen kuluu aikaa noin kaksi sekuntia. Käyttäjän näkökulmasta agentilta kuitenkin kestää kuusi sekuntia vastata käyttäjän pyyntöön.

    Näyttökuva, jossa on vastausaika viestien välillä.

Agentin viimeisen vastauksen tunnistaminen

Jotta voit mitata ajan, joka agentilta kestää vastauksen antamiseen, suorituskykytestauksen komentosarjan on

  • tunnistettava viimeinen agentin viesti, joka seuraa käyttäjän viestiä
  • laskettava kahden viestin välinen aikaero.

Copilot Studion taustalla oleva protokolla ei tunne käsitettä viimeinen vastaus, koska sekä agentit että käyttäjät voivat lähettää viestejä milloin tahansa. Siksi suorituskykytestauksen komentosarjan tulee olettaa, että jos agentti ei lähetä viestiä määrätyssä ajassa, uusia viestejä ei lähetetä ennen seuraavaa käyttäjän viestiä. Tämän logiikan toteutus vaihtelee sen mukaan, miten suorituskykytestauksen komentosarja viestii Direct Linen kanssa.

Käytä WebSockets-protokollaa

Kun Direct Linen kanssa viestitään WebSockets-protokollan kautta, oletetaan, että agentti ei enää lähetä viestejä, kun WebSocketista ei voi enää lukea kehyksiä. Tämä voi ilmetä aikakatkaisuna, kun yritetään lukea seuraavaa kehystä. Tarkka käyttäytyminen tosin riippuu toteutuksesta. Jos haluat käyttää WebSockets-protokollaa käyttävää viitetoteutusta, voit käyttää HTTP GET -pyyntöä.

HTTP GET -pyynnön käyttäminen

Suorituskykytestauksen komentosarjojen, jotka käyttävät HTTP GET -pyyntöä WebSockets-protokollan sijaan, tulee tehdä kysely Aktiviteetit-päätepisteessä, jotta käyttäjän ja agentin viestien koko joukko voidaan hakea. Varmista, että agentilla on riittävästi aikaa vastata. Jos esimerkiksi agentin on kutsuttava taustalla olevaa ohjelmointirajapintaa vastatakseen käyttäjän kyselyyn ja ohjelmointirajapinnan vastaaminen kestää jopa viisi sekuntia, komentosarjan ei tule tehdä kyselyä Aktiviteetit-päätepisteestä ennen kuin viisi sekuntia on kulunut.

Seuraavat yksinkertaistetut tiedot kuvaavat Aktiviteetit-päätepisteestä palautuvaa vastausta:

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

Kun jäsennät tietoja ja lasket vastausaikoja, ota huomioon seuraavat ohjeet:

  • Agentin viesteillä on role: bot-ominaisuus, kun taas käyttäjän viesteillä ei ole role-ominaisuutta.
  • Agentin viestit, jotka lähetetään vastauksena käyttäjän viesteihin, sisältävät replyToId-ominaisuuden, jonka arvo on käyttäjän viestin id-ominaisuuden arvo.
  • Voit laskea agentin vastausajat käyttäjän viestin ja siihen vastaavan viimeisen agentin viestin aikaerona.