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 dient als Kommunikationsschnittstelle, über die Client-Anwendungen mit Unterhaltungsagents, die mit Copilot Studio erstellt wurden, interagieren können. Die Direct Line API erleichtert die Übertragung von Nachrichten zwischen der Client-Anwendung und dem Agent entweder über WebSocket-Streams oder HTTP-Anforderungen. Für Leistungstests ermöglicht Direct Line Lasttest-Tools die Replikation des tatsächlichen Benutzerverhaltens, die Generierung von Last und die Messung von Antwortzeiten.
Kommunikation mit Direct Line über WebSockets
Sie können mit Copilot Studio erstellte Unterhaltungsagents für Webanwendungen entweder als eingebettete iFrames oder mithilfe einer benutzerdefinierten Canvas bereitstellen. Beide Bereitstellungsoptionen nutzen WebSocket-Kommunikation mit Direct Line. Wenn Sie Ihren Unterhaltungsagent mit einer dieser Methoden in einer App implementieren, sollte Ihr Performance-Test-Skript WebSocket-Kommunikation einsetzen, um eine Last zu simulieren, die dem realen Nutzerverhalten möglichst nahekommt, und die Performance mit hoher Zuverlässigkeit zu messen.
Client-Anwendungen, die Direct Line und WebSocket-Kommunikation nutzen, sollten diesem Ablauf folgen:
- Um eine Unterhaltung zu initiieren, muss eine Client-Anwendung zunächst ein Unterhaltungstoken erhalten. Wenn Ihr Agent mit einem Direct Line Geheimnis konfiguriert ist, erhalten Sie ein Token, indem Sie den regionalen Direct Line-Endpunkt aufrufen. Tokens für Agents, die keine Geheimnisse verwenden, können vom Token-Endpunkt bezogen werden.
- Die Clientanwendung startet eine Unterhaltung mit dem Token und erhält eine Unterhaltungs-ID sowie eine WebSocket-Stream-URL.
- Benutzernachrichten werden durch eine HTTP-POST-Anfrage mit der Unterhaltungs-ID übermittelt.
- Nachrichten vom Unterhaltungsagents werden über den WebSocket-Stream empfangen.
Kommunikation mit Direct Line über HTTP GET
Wenn Ihr Lasttest-Tool keine WebSocket-Kommunikation unterstützt oder Ihre Client-Anwendung keine WebSocket-Kommunikation verwendet, können Sie Aktivitäten stattdessen durch das Senden von HTTP GET empfangen. Wie im folgenden Diagramm gezeigt, bleibt der Ablauf der Unterhaltungsinitiierung unverändert.
Antwortzeiten messen
Um zu beurteilen, wie sich die Last auf die Nutzererfahrung auswirkt, stellen Sie sicher, dass Ihre Leistungstestskripte die Antwortzeiten für die folgenden Schritte erfassen und melden:
| Schritt | Auswirkung auf Benutzererfahrung |
|---|---|
| Generieren eines Tokens | Die Zeit, die benötigt wird, um eine neue Unterhaltung zu initiieren |
| Unterhaltung beginnen | Die Zeit, die benötigt wird, um eine neue Unterhaltung zu initiieren |
| Aktivität senden | Die Zeit, die benötigt wird, um eine neue Benutzernachricht zu senden (ohne die Antwort des Agents) |
| Aktivitäten empfangen/Aktivitäten abrufen | Die Zeit, die ein Agent benötigt, um zu antworten |
Das Nachverfolgen der Antwortzeiten für Token Erstellen, Unterhaltung Beginnen und Aktivität Senden ist für Lasttest-Tools unkompliziert, da diese Schritte Standard-HTTP-Anforderungen 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 über eine Aktivität Senden-Anfrage gesendet wird, ist die Antwort keine Nachricht vom Agent. Stattdessen bestätigt die Antwort lediglich, dass die Benutzernachricht erfolgreich gepostet wurde.
Je nach Design kann ein Konversationsagent als Antwort auf eine Benutzernachricht beliebig viele Nachrichten 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 Agentnachricht vergeht. Im folgenden Beispiel löst eine einzelne Benutzernachricht drei Agentnachrichten 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 Agents
Um die Zeit zu messen, die ein Agent benötigt, um seine Antworten vollständig zu liefern, muss Ihr Performance-Test-Skript:
- Die letzte Agentnachricht identifizieren, die auf eine Benutzernachricht folgt
- Berechnet den Zeitunterschied zwischen den beiden
Das zugrunde liegende Protokoll, das Copilot Studio verwendet, hat kein Konzept einer ‚letzten Antwort‘ da sowohl Agents als auch Nutzer jederzeit Nachrichten senden können. Daher muss Ihr Performance-Test-Skript davon ausgehen, dass, wenn der Agent keine Nachricht innerhalb eines bestimmten Zeitrahmens sendet, keine weiteren Nachrichten gesendet werden, bis die nächste Benutzernachricht gesendet wird. Die Umsetzung dieser Logik variiert je nachdem, wie Ihr Skript mit Direct Line kommuniziert.
Verwenden von 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. Dies kann durch einen Timeout beim Versuch, den nächsten Frame zu lesen, angezeigt werden, wobei das genaue Verhalten von der jeweiligen Implementierung abhängt. Für eine Referenzimplementierung, die WebSockets verwendet, sollten Sie HTTP GET verwenden.
Verwenden von HTTP GET
Leistungstestskripte, die HTTP GET anstelle von WebSockets verwenden, sollten den Aktivitäten-Endpunkt abfragen, um sämtliche Benutzer- und Agentnachrichten abzurufen. Beim Abfragen sollten Sie ausreichend Zeit für die Antwort Ihres Agents einplanen. Wenn Ihr Agent zum Beispiel eine Backend-API aufrufen muss, um auf eine Benutzeranfrage zu antworten und die API bis zu fünf Sekunden benötigt, sollte Ihr Skript den Aktivitäten-Endpunkt erst nach Ablauf dieser fünf Sekunden abfragen.
Die folgende vereinfachte Nutzlast stellt die Antwort dar, die vom Aktivitäten-Endpunkt zurückgeliefert wird:
[
{
"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"
}
]
Berücksichtigen Sie beim Analysieren der Nutzlast und beim Berechnen der Antwortzeiten die folgenden Richtlinien:
- Nachrichten vom Agent haben die Eigenschaft
role: bot, während Nachrichten vom Benutzer keinerole-Eigenschaft haben. - Agentnachrichten, die als Antwort auf Benutzernachrichten gesendet werden, haben die Eigenschaft
replyToId, deren Wert dem Wert deridEigenschaft der Benutzernachricht entspricht. - Die Antwortzeiten des Agents lassen sich als Zeitdifferenz zwischen der Benutzernachricht und der letzten Agentnachricht berechnen, die auf die Benutzernachricht antwortet.