Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La API Direct Line actúa como interfaz de comunicación para que las aplicaciones cliente interactúen con agentes conversacionales creados con Copilot Studio. La API Direct Line facilita la transmisión de mensajes entre la aplicación cliente y el agente a través de secuencias WebSocket o solicitudes HTTP. Para las pruebas de rendimiento, Direct Line permite que las herramientas de pruebas de carga repliquen el comportamiento real del usuario, generen carga y midan los tiempos de respuesta.
Comunicación con Direct Line mediante WebSockets
Puede implementar agentes conversacionales creados con Copilot Studio en aplicaciones web como iFrame embebidos o mediante un lienzo personalizado. Ambas opciones de despliegue utilizan comunicación WebSocket con Direct Line. Si despliega su agente conversacional en una aplicación utilizando uno de estos métodos, el script de prueba de rendimiento debe emplear comunicación WebSocket para generar una carga que se asemeje al comportamiento real del usuario y medir el rendimiento con un alto grado de confianza.
Las aplicaciones cliente que usan Direct Line y comunicación por WebSocket deben seguir este flujo:
- Para iniciar una conversación, una aplicación cliente debe primero obtener un token de conversación. Si el agente está configurado con un secreto Direct Line, obtenga un token llamando al punto de conexión regional Direct Line. Los tokens para agentes que no utilizan secretos se pueden obtener desde el punto de conexión del token.
- La aplicación cliente inicia una conversación utilizando el token y recibe un ID de conversación y una URL de flujo WebSocket.
- Los mensajes de usuario se envían mediante una solicitud HTTP POST con el ID de conversación.
- Los mensajes del agente conversacional se reciben a través del flujo WebSocket de Direct Line.
Comunicarse con Direct Line usando HTTP GET
Si tu herramienta de pruebas de carga no puede usar comunicación WebSocket, o si tu aplicación cliente no utiliza comunicación WebSocket, puedes recibir actividades mediante enviando HTTP GET en su lugar. Como se muestra en el siguiente diagrama, el flujo de inicio de conversación no cambia.
Medir los tiempos de respuesta
Para evaluar cómo la carga afecta la experiencia del usuario, asegúrese de que sus scripts de prueba de rendimiento rastreen e informen el tiempo de respuesta para los siguientes pasos:
| Paso | Impacto sobre la experiencia de usuario |
|---|---|
| Generar token | El tiempo que tarda en iniciar una nueva conversación |
| Iniciar conversación | El tiempo que tarda en iniciar una nueva conversación |
| Enviar actividad | El tiempo que tarda en enviar un mensaje de usuario nuevo (no incluye la respuesta del agente) |
| Recibir actividades/Obtener actividades | El tiempo que tarda un agente en responder |
Rastrear los tiempos de respuesta para Generate Token, Start Conversation y Send Activity es sencillo para las herramientas de prueba de carga, ya que estos pasos utilizan solicitudes HTTP estándar. Sin embargo, medir el tiempo que tarda un agente en responder a los mensajes de usuario es más complejo, debido a las siguientes razones:
El envío y la recepción de actividades a través de Direct Line siguen un patrón asincrónico. Cuando se envía un mensaje de usuario mediante una solicitud de Enviar Actividad, la respuesta no es un mensaje del agente. En cambio, simplemente confirma que el mensaje del usuario ha sido publicado correctamente.
Según su diseño, un agente conversacional podría enviar cualquier cantidad de mensajes en respuesta a un mensaje del usuario. Por lo tanto, en la mayoría de los casos, deberías medir el tiempo que tarda un agente en responder como el tiempo que transcurre desde un mensaje de usuario hasta el último mensaje del agente. En el siguiente ejemplo, un solo mensaje de usuario activa tres mensajes de agente, con llamadas a la API ejecutándose entre ellos. Cada mensaje tarda aproximadamente dos segundos en llegar; sin embargo, desde la perspectiva del usuario, el agente tarda seis segundos en responder a la solicitud del usuario.
Identifica la última respuesta del agente
Para medir el tiempo que tarda el agente en completar sus respuestas, tu script de pruebas de rendimiento necesita:
- Identifica el último mensaje del agente que sigue a un mensaje de usuario
- Calcule la diferencia de tiempo entre las dos
El protocolo subyacente que utiliza Copilot Studio no tiene un concepto de 'última respuesta', ya que tanto agentes como usuarios pueden enviar mensajes en cualquier momento. Por lo tanto, tu script de pruebas de rendimiento debe asumir que si el agente no envía un mensaje dentro de un plazo determinado, no se envían más mensajes hasta que se envíe el siguiente mensaje de usuario. La implementación de esta lógica varía según cómo tu script se comunique con Direct Line.
Utilizar WebSockets
Al comunicarse con Direct Line sobre WebSockets, supongamos que el agente no envía más mensajes cuando no se pueden leer más marcos desde WebSocket. Puede que esto se indique con un tiempo de espera al intentar leer el siguiente marco, aunque el comportamiento exacto depende de su implementación. Para una implementación de referencia que utilice WebSockets, considera utilizar HTTP GET.
Usar HTTP GET
Los scripts de pruebas de rendimiento que utilizan HTTP GET en lugar de WebSockets deben consultar el punto de conexión Actividades para obtener el conjunto completo de mensajes de usuario y agente. Al hacer polling, asegúrate de proporcionar suficiente tiempo para que tu agente responda. Por ejemplo, si tu agente debe llamar a una API de backend para responder a una consulta del usuario y la API puede tardar hasta cinco segundos en responder, tu script no debe consultar el punto de conexión de Actividades hasta que hayan transcurrido cinco segundos.
La siguiente carga útil simplificada representa la respuesta que recibe el punto de conexión de Actividades:
[
{
"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"
}
]
Al analizar la carga útil y calcular los tiempos de respuesta, ten en cuenta las siguientes pautas:
- Los mensajes del agente tienen la propiedad
role: bot, mientras que los mensajes del usuario no tienen ninguna propiedadrole. - Los mensajes del agente enviados en respuesta a mensajes del usuario tienen la propiedad
replyToId, que toma el valor de la propiedadiddel mensaje de usuario. - Puedes calcular los tiempos de respuesta del agente como la diferencia entre el momento en que se envió el mensaje del usuario y el momento en que se envió el último mensaje del agente que responde a ese mensaje.