Volver al blog
Implementación2 de septiembre de 2026Lectura de 7 minActualizado 5 de septiembre de 2026

Construir un streaming de chatbot de IA robusto: reconexión, respuestas parciales y mensajes de estado accesibles

Cómo los chatbots de sitios web manejan con fiabilidad respuestas transmitidas durante interrupciones de red, reintentos y lectores de pantalla, sin repetir ni dejar mensajes a medias.

Una técnica conecta módulos de luz numerados en un banco de trabajo para formar una cadena de señal continua
Un streaming robusto hace que cada sección sea rastreable y pueda reanudarse de forma segura tras una interrupción.

El streaming hace que un chatbot de IA parezca más rápido porque las primeras palabras aparecen antes de que se haya calculado la respuesta completa. Sin embargo, técnicamente esto crea un proceso distribuido: el servidor, el proveedor del modelo, el proxy, el navegador y la interfaz de usuario mantienen el estado conjuntamente durante segundos o minutos. La red móvil cambia de cobertura, una pestaña pasa al fondo, un proxy cierra una conexión inactiva o un usuario vuelve a enviar por error. Sin un protocolo claro, los fragmentos de texto se duplican, las declaraciones incompletas se marcan como finalizadas o se desencadena dos veces la misma acción de una herramienta.

Por eso, un chatbot de sitio web robusto trata el streaming como una máquina de estados y no como una animación. Esta guía muestra cómo interactúan las ID de eventos, la reanudación, la finalización atómica y los avisos discretos para lectores de pantalla.

Un mensaje necesita una identidad permanente

Asigne una ID de solicitud en el cliente al enviar y una ID de mensaje inmutable en el servidor. Además, agregue un número de secuencia correlativo a cada sección del flujo. Si llega la misma solicitud tras un error de conexión, el servidor no debe iniciar una segunda ejecución independiente, sino devolver el estado existente o continuar de forma segura.

Las identidades cumplen funciones distintas: la ID de solicitud garantiza la idempotencia de la escritura, la ID de mensaje identifica el resultado y el número de secuencia ordena los fragmentos. Una marca de tiempo por sí sola no basta, ya que las solicitudes paralelas pueden colisionar o llegar con retraso.

Separar el transporte del estado de negocio

El ciclo de vida del proceso de negocio no cambia según se utilicen Server-Sent Events, Fetch streams o WebSockets. Modele al menos los estados aceptado, en ejecución, completado, cancelado y fallido. Solo un evento explícito de finalización hace que una respuesta sea vinculante. En cambio, el fin de una conexión TCP no significa automáticamente que se haya completado con éxito.

En el caso de los Server-Sent Events, el estándar HTML especifica las reconexiones y el envío de la última ID de evento. Este mecanismo es útil, pero no sustituye un historial en el servidor. El servidor debe saber qué fragmentos pertenecen a un mensaje y si una nueva consulta puede omitir secuencias ya emitidas.

Reconexión sin duplicar texto

Guarde un búfer de eventos limitado para cada mensaje en curso. Al reconectarse, el cliente envía la última secuencia confirmada. El servidor solo entrega eventos posteriores. Si el búfer ha caducado, no responde con fragmentos deducidos, sino con una instantánea del texto completo actual y una nueva secuencia base.

El cliente procesa los eventos de forma idempotente: se ignoran las secuencias menores o iguales al último valor aplicado. Las brechas mayores activan la recuperación de una instantánea. Así, la pantalla se mantiene correcta aunque un proxy repita datos o el navegador vuelva a estar en línea tras un breve periodo de desconexión.

Las respuestas parciales no deben activar acciones

El texto transmitido en tiempo real es provisional. Los enlaces pueden estar incompletos, una aclaración crucial puede aparecer recién en la siguiente frase y los argumentos estructurados de las herramientas son sintácticamente inválidos hasta el final. Renderice el texto progresivamente, pero active acciones de riesgo solo tras la finalización y previa validación independiente.

Esto aplica especialmente a pedidos, reservas de citas, modificaciones de datos de clientes o envío de correos electrónicos. La ejecución de una herramienta requiere su propia ID de acción idempotente, verificación de permisos y, si procede, una confirmación visible. Una reconexión nunca debe volver a ejecutar el mismo efecto.

Tratar la cancelación como un evento real del protocolo

Un botón de detención no debe limitarse a pausar la interfaz. El cliente envía una solicitud de cancelación con la ID del mensaje; el servidor marca el proceso y, si es posible, interrumpe el trabajo del modelo y de la herramienta. Los fragmentos que lleguen con posterioridad se descartan. En la interfaz queda claro que la respuesta fue cancelada.

Si la cancelación no llega al servidor, es posible que el proceso continúe allí. Por ello, el servidor también comprueba el estado periódicamente. Las métricas de costes y latencia deben contabilizar las ejecuciones canceladas por separado; de lo contrario, aparecerán como errores normales o desaparecerán del análisis.

Hacer que los errores sean comprensibles y repetibles

Diferencie al menos entre interrupción de red, tiempo de espera agotado, error del proveedor, bloqueo de seguridad y validación de negocio. El mensaje para el usuario no necesita revelar detalles técnicos internos, pero debe indicar el siguiente paso seguro. «Conexión interrumpida: se reanuda la respuesta» es distinto de «Esta acción no se ha ejecutado».

Un botón de reintento solo reutiliza la ID de solicitud original si se desea continuar la misma ejecución. Para una regeneración real, se crea una nueva ID y la interfaz no muestra ambas versiones como un único resultado.

No saturar a los lectores de pantalla con cada token

El contenido dinámico debe ser perceptible para las tecnologías de asistencia. WAI-ARIA define Live Regions con distintos niveles de urgencia. Sin embargo, una región actualizada token por token con aria-live puede generar cientos de interrupciones. Es preferible un indicador visual de streaming junto con un canal de estado separado y moderado.

Notifique, por ejemplo, «Generando respuesta», luego, en intervalos razonables, una frase o párrafo completado, y al final «Respuesta completa». Utilice aria-live="polite" para progresos normales; assertive se reserva exclusivamente para errores realmente urgentes. El foco debe permanecer en el campo de entrada o en la posición elegida por el usuario, sin saltar con cada fragmento.

Establezca aria-busy="true" en la zona de respuesta mientras el contenido esté incompleto, y quítelo en el momento de la finalización atómica. El botón de detención requiere una etiqueta clara y debe ser accesible por teclado. Compruebe también la adaptación a movimiento reducido, el zoom y las vistas en pantallas móviles pequeñas.

Probar la máquina de estados de forma sistemática

Una prueba del flujo ideal no es suficiente. Automatice al menos estos casos:

  • Desconectar la red tras varios fragmentos y reanudar sin duplicar texto.
  • Entregar el mismo evento dos veces y aplicarlo solo una.
  • Omitir una secuencia y solicitar una instantánea.
  • Pausar la pestaña, cambiar de red y mostrar el cierre correcto después.
  • Cancelar durante la preparación de una herramienta sin ejecutar ningún efecto.
  • Marcar como incompleta la respuesta parcial tras un tiempo de espera agotado.
  • Verificar la frecuencia adecuada de las lecturas y el foco en lectores de pantalla.

Mida el tiempo hasta el primer fragmento visible, el tiempo hasta la finalización completa, la tasa de reconexión, las secuencias duplicadas o descartadas y el éxito de las cancelaciones. El tiempo hasta el primer token puede ser excelente, aunque muchas respuestas nunca se completen de manera fiable.

Un plan de implantación por fases

  1. Definir los estados de mensaje y de eventos en el servidor.
  2. Implementar ID idempotentes y secuencias antes de las animaciones en la interfaz.
  3. Añadir la reconexión con búfer y la instantánea de respaldo.
  4. Separar estrictamente las acciones de herramientas del texto provisional.
  5. Comprobar los avisos de estado con teclado y lector de pantalla.
  6. Probar situaciones de error bajo conexiones limitadas e inestables.
  7. Solo entonces, activar progresivamente el streaming en producción.

Conclusión: Rápido a la vista, inequívocamente completado

Un buen streaming combina la velocidad percibida con un modelo de estado preciso. Las ID permanentes, los eventos ordenados, la finalización atómica y la reconexión segura evitan respuestas duplicadas o incompletas. Una Live Region moderada hace accesible el proceso sin interrumpir constantemente a los usuarios de lectores de pantalla.

A continuación, pruebe un chat real con una red móvil inestable. Si tras una cancelación y reconexión no queda del todo claro qué mensaje está completo y qué acción se ha ejecutado realmente, es el protocolo lo que necesita corregirse primero, no la animación de carga.

Fuentes

Convierta las visitas en mejores conversaciones

Reduzca la carga de soporte manteniendo respuestas coherentes

Ofrezca soporte instantáneo en el sitio, derive casos complejos a su equipo y mantenga cada respuesta alineada con su base de conocimiento aprobada.

Artículos relacionados

Seguir leyendo

Dos técnicos comprueban una llave de autorización y una tarjeta de permisos antes de encender una instalación
Implementación13 de agosto de 2026Lectura de 10 min

Asegurar las llamadas a herramientas en chatbots de IA: permisos, confirmación y mecanismos de reversión

Las llamadas a herramientas hacen que un chatbot para sitios web sea capaz de actuar, pero también más riesgoso. Esta guía práctica muestra cómo interactúan el principio de menor privilegio, la verificación en el servidor, las confirmaciones concretas, la idempotencia y las rutas de reversión.

Leer artículo