Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'API Direct Line funge da interfaccia di comunicazione per consentire alle applicazioni client di interagire con gli agenti conversazionali creati con Copilot Studio. L'API Direct Line facilita la trasmissione di messaggi tra l'applicazione client e l'agente tramite flussi WebSocket o richieste HTTP. Per i test delle prestazioni, Direct Line consente agli strumenti di test di carico di replicare il comportamento effettivo dell'utente, generare il carico e misurare i tempi di risposta.
Comunicare con Direct Line tramite WebSocket
È possibile distribuire agenti di conversazione creati con Copilot Studio in applicazioni Web come iframe incorporati o usando un canvas personalizzato. Entrambe le opzioni di distribuzione usano la comunicazione WebSocket con Direct Line. Se distribuisci il tuo agente conversazionale su un'app utilizzando uno di questi metodi, il tuo script di test delle prestazioni dovrebbe utilizzare la comunicazione tramite WebSocket per generare un carico che somigli al comportamento reale dell'utente e misurare le prestazioni con un alto grado di sicurezza.
Le applicazioni client che usano la comunicazione Direct Line e WebSocket devono seguire questo flusso:
- Per avviare una conversazione, un'applicazione client deve prima ottenere un token di conversazione. Se l'agente è configurato con una chiave Direct Line, ottieni un token chiamando l'endpoint regionale Direct Line. I token per gli agenti che non utilizzano segreti possono essere ottenuti dall'endpoint del token.
- L'applicazione client avvia una conversazione utilizzando il token e riceve un ID della conversazione e un URL di flusso WebSocket.
- I messaggi utente vengono inviati inviando una richiesta HTTP POST con l'ID della conversazione.
- I messaggi dall'agente conversazionale vengono ricevuti tramite il flusso WebSocket.
Comunicare con Direct Line tramite HTTP GET
Se il tuo strumento di test di carico non può usare la comunicazione WebSocket, o se la tua applicazione rivolta al client non utilizza la comunicazione WebSocket, puoi ricevere attività inviando HTTP GET invece. Come mostrato nel diagramma seguente, il flusso di avvio della conversazione non cambia.
Misura i tempi di risposta
Per valutare come il carico influisce sull'esperienza utente, assicurati che i tuoi script di test delle prestazioni monitorino e riportino i tempi di risposta per i seguenti passaggi:
| Step | Impatto sull'esperienza utente |
|---|---|
| Genera token | Il tempo necessario per iniziare una nuova conversazione |
| Avvia la conversazione | Il tempo necessario per iniziare una nuova conversazione |
| Attività di invio | Il tempo necessario per inviare un messaggio a un nuovo utente (non include la risposta dell'agente) |
| Ricevi attività/Ottieni attività | Il tempo che impiega un agente a rispondere |
Tracciare i tempi di risposta per Genera Token, Avvia Conversazione e Invio Attività è semplice per gli strumenti di test di carico, poiché questi passaggi utilizzano richieste HTTP standard. Tuttavia, misurare il tempo che impiega un agente a rispondere ai messaggi degli utenti è più complesso, per i seguenti motivi:
L'invio e la ricezione di attività su Direct Line seguono un modello asincrono. Quando un messaggio utente viene inviato tramite una richiesta di Invio Attività, la risposta non è un messaggio dell'agente. Invece, conferma semplicemente che il messaggio utente è stato pubblicato con successo.
In base al suo design, un agente conversazionale può inviare un numero qualsiasi di messaggi in risposta a un messaggio utente. Pertanto, nella maggior parte dei casi, dovresti misurare il tempo che impiega un agente a rispondere come il tempo trascorso tra un messaggio utente e l'ultimo messaggio dell'agente. Nel seguente esempio, un singolo messaggio utente attiva tre messaggi agente, con chiamate API in esecuzione nel mezzo. Ogni messaggio impiega circa due secondi per arrivare; tuttavia, dal punto di vista dell'utente, l'agente impiega sei secondi per rispondere alla sua richiesta.
Identifica l'ultima risposta dell'agente
Per misurare il tempo che impiega un agente a completare le sue risposte, il tuo script di test delle prestazioni deve di:
- Identifica l'ultimo messaggio dell'agente che segue un messaggio utente
- Calcola la differenza di tempo tra i due
Il protocollo sottostante usato da Copilot Studio non ha un concetto di "ultima risposta", perché sia gli agenti che gli utenti possono inviare messaggi in qualsiasi momento. Pertanto, il tuo script di test delle prestazioni deve presumere che se l'agente non invia un messaggio entro un determinato intervallo di tempo, non vengano inviati altri messaggi fino all'invio del prossimo messaggio utente. L'implementazione di questa logica varia in base al modo in cui lo script comunica con Direct Line.
Usa WebSockets
Quando si comunica con Direct Line tramite WebSocket, si supponga che l'agente non invii più messaggi quando non è possibile leggere più frame dal WebSocket. Potresti vedere questo indicato da un timeout quando tenti di leggere il frame successivo, anche se il comportamento esatto dipende dalla tua implementazione. Per un'implementazione di riferimento che utilizza WebSocket, considera l'uso di HTTP GET.
Usa HTTP GET
Gli script di test delle prestazioni che usano HTTP GET invece di WebSockets dovrebbero interrogare l'endpoint Attività per ottenere l'intero insieme di messaggi utente e agente. Durante i sondaggi, assicurati di concedere abbastanza tempo al tuo agente per rispondere. Ad esempio, se il tuo agente deve chiamare un'API backend per rispondere a una query dell'utente e l'API impiega fino a cinque secondi per rispondere, il tuo script non dovrebbe sondare l'endpoint Attività fino a quando non sono passati cinque secondi.
Il seguente payload semplificato rappresenta la risposta proveniente dall'endpoint Attività.
[
{
"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"
}
]
Quando analizzi il carico utile e calcoli i tempi di risposta, considera le seguenti linee guida:
- I messaggi dell'agente hanno la proprietà
role: bot, mentre i messaggi dell'utente non hanno proprietàrole. - I messaggi dell'agente inviati in risposta ai messaggi utente hanno la proprietà
replyToId, che ha un valore pari allaidproprietà del messaggio utente. - Puoi calcolare i tempi di risposta dell'agente come la differenza di tempo tra il messaggio utente e l'ultimo messaggio dell'agente che risponde al messaggio utente.