Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Direct Line API fungiert als Kommunikationsschnittstelle für Client-Anwendungen, um mit konversationellen Agenten zu interagieren, die mit Copilot Studio entwickelt wurden. Die Direct Line API erleichtert die Übertragung von Nachrichten zwischen der Client-Anwendung und dem Agenten entweder über WebSocket-Streams oder HTTP-Anfragen. Für Leistungstests ermöglicht Direct Line Lasttest-Tools, um tatsächliches Benutzerverhalten zu replizieren, Lasten zu generieren und Antwortzeiten zu messen.
Kommunikation mit der Direktleitung über WebSockets
Konversationsagenten, die mit Copilot Studio entwickelt wurden, werden entweder als eingebettete iframes oder über eine benutzerdefinierte Leinwand in Webanwendungen bereitgestellt. Beide Bereitstellungsoptionen nutzen WebSocket-Kommunikation mit Direct Line. Wenn Ihr Conversational Agent mit einer dieser Methoden auf eine Anwendung eingesetzt wird, sollte Ihr Performance-Test-Skript WebSocket-Kommunikation nutzen, um eine Last zu erzeugen, die dem echten Nutzerverhalten ähnelt, und die Leistung mit hoher Sicherheit zu messen.
Client-Anwendungen, die Direct Line und WebSocket-Kommunikation nutzen, sollten diesem Ablauf folgen:
- Um eine Konversation zu initiieren, muss eine Client-Anwendung zunächst ein Konversationstoken erhalten. Wenn Ihr Agent mit einem Direct Line Secret konfiguriert ist, erhalten Sie ein Token, indem Sie den Direct Line regionalen Endpunkt aufrufen. Token für Agenten, die keine Geheimnisse verwenden, können vom Token-Endpunkt bezogen werden.
- Die Client-Anwendung startet eine Konserverung mit dem Token und erhält eine Konversations-ID sowie eine WebSocket-Stream-URL.
- Benutzernachrichten werden gesendet, indem eine HTTP-POST-Anfrage mit der Conversation-ID gesendet wird.
- Nachrichten des konversationellen Agenten werden über den WebSocket-Stream empfangen.
Kommunizieren Sie mit der Direktleitung über HTTP GET
Wenn Ihr Lasttest-Tool keine WebSocket-Kommunikation nutzen kann oder Ihre klientorientierte Anwendung keine WebSocket-Kommunikation nutzt, können Sie Aktivitäten erhalten, indem Sie stattdessen HTTP GET senden . Wie im folgenden Diagramm gezeigt, ändert sich der Ablauf der Gesprächsinitiierung nicht.
Messen Sie die Reaktionszeiten
Um zu bewerten, wie sich die Belastung auf die Nutzererfahrung auswirkt, stellen Sie sicher, dass Performance-Testskripte die Antwortzeit für die folgenden Schritte verfolgen und berichten:
| Schritt | Auswirkungen auf die Nutzererfahrung |
|---|---|
| Token generieren | Die Zeit, die es dauert, ein neues Gespräch zu beginnen |
| Starte ein Gespräch | Die Zeit, die es dauert, ein neues Gespräch zu beginnen |
| Aktivität senden | Die Zeit, die es dauert, eine Nachricht für einen neuen Nutzer zu senden (ohne die Antwort des Agenten) |
| Aktivitäten erhalten/Aktivitäten erhalten | Die Zeit, die ein Agent braucht, um zu antworten |
Die Nachverfolgung der Antwortzeiten für Token generieren, Konversation starten und Senden ist für Lasttest-Tools unkompliziert, da diese Schritte Standard-HTTP-Anfragen verwenden. Die Messung der Zeit, die ein Agent benötigt, um auf Nutzernachrichten zu reagieren, ist jedoch aus folgenden Gründen komplexer:
Das Senden und Empfangen von Aktivitäten über Direct Line folgt einem asynchronen Muster. Wenn eine Benutzernachricht mit einer Aktivität senden-Anfrage gesendet wird, ist die Antwort keine Nachricht vom Agenten. Stattdessen bestätigt es lediglich, dass die Nutzernachricht erfolgreich gepostet wurde.
Basierend auf seinem Design könnte ein Konversationsagent beliebig viele Nachrichten als Antwort auf eine Benutzernachricht zurücksenden. Daher sollten Sie in den meisten Fällen die Zeit, die ein Agent benötigt, um zu antworten, als die Zeit messen, die zwischen einer Benutzernachricht und der letzten Agentennachricht vergeht. Im folgenden Beispiel löst eine einzelne Benutzernachricht drei Agenten-Nachrichten aus, wobei API-Aufrufe dazwischen laufen. Jede Nachricht benötigt etwa zwei Sekunden, um zurückzukommen; Aus Sicht des Nutzers benötigt der Agent jedoch sechs Sekunden, um auf die Anfrage des Nutzers zu reagieren.
Identifizieren Sie die letzte Reaktion des Agenten
Um die Zeit zu messen, die ein Agent benötigt, um seine Antworten abzuschließen, muss Ihr Performance-Test-Skript:
- Identifizieren Sie die letzte Agentennachricht, die auf eine Benutzernachricht folgt
- Berechnen Sie den Zeitunterschied zwischen den beiden
Das zugrundeliegende Protokoll, das Copilot Studio verwendet, hat kein Konzept einer "letzten Antwort", da sowohl Agenten als auch Nutzer jederzeit Nachrichten senden können. Daher muss dein Performance-Test-Skript davon ausgehen, dass, wenn der Agent innerhalb eines bestimmten Zeitrahmens keine Nachricht sendet, keine weiteren Nachrichten gesendet werden, bis die nächste Benutzernachricht gesendet wird. Die Umsetzung dieser Logik variiert je nachdem, wie dein Skript mit Direct Line kommuniziert.
Verwenden Sie WebSockets
Bei der Kommunikation mit Direct Line über WebSockets wird davon ausgegangen, dass der Agent keine weiteren Nachrichten sendet, wenn keine weiteren Frames vom WebSocket gelesen werden können. Man kann sehen, dass dies durch eine Auszeit angezeigt wird, wenn man versucht, den nächsten Frame zu lesen, wobei das genaue Verhalten jedoch von deiner Implementierung abhängt. Für eine Referenzimplementierung, die WebSockets verwendet, sollten Sie HTTP GET verwenden.
Verwende HTTP GET
Leistungstestskripte, die HTTP GET statt WebSockets verwenden, sollten den Activitys-Endpunkt abfragen, um die gesamte Menge an Benutzer- und Agentennachrichten zu erhalten. Stellen Sie bei der Umfrage sicher, dass Ihr Makler genügend Zeit zur Antwort einräumt. Wenn Ihr Agent zum Beispiel eine Backend-API aufrufen muss, um auf eine Benutzeranfrage zu antworten, und die API bis zu 5 Sekunden benötigt, sollte Ihr Skript den Activitys-Endpunkt erst nach 5 Sekunden abfragen.
Die folgende vereinfachte Nutzlast stellt die Antwort dar, die vom Aktivitäten-Endpunkt zurückkommt:
[
{
"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"
}
]
Wenn Sie die Nutzlast analysieren und die Antwortzeiten berechnen, beachten Sie die folgenden Richtlinien:
- Nachrichten vom Agenten haben die Eigenschaft
role: bot, während Nachrichten vom Benutzer keine Eigenschaftrolebesitzen. - Agentennachrichten, die als Antwort auf Benutzernachrichten gesendet werden, besitzen die Eigenschaft
replyToId, die einen Wert deridEigenschaft der Benutzernachricht hat. - Du kannst die Antwortzeiten des Agenten als Zeitunterschied zwischen der Benutzernachricht und der letzten Agentennachricht berechnen, die auf die Benutzernachricht antwortet.