Agentes de IA

Siete lecciones de ingeniería para construir agentes de chat con IA en producción

Trigger.dev comparte conocimientos prácticos sobre latencia, conteo de tokens y resiliencia del streaming derivados de la construcción de su agente de chat para el panel de desarrolladores.

Illustration of split processing with fast initial response and complex background assembly
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

Los ingenieros de Trigger.dev han publicado una retrospectiva detallada sobre la creación de un agente de chat con IA de grado de producción para su panel de desarrolladores. Publicado en octubre de 2026, el artículo expone siete lecciones críticas aprendidas durante la implementación de funciones como depuración, generación de gráficos y búsqueda en la documentación. Los hallazgos se centran en decisiones arquitectónicas que mejoran la experiencia del usuario y la fiabilidad del sistema.

Qué ocurrió

El equipo construyó una herramienta interna para ayudar a los usuarios a interactuar con su plataforma mediante lenguaje natural. Este agente realiza tareas complejas como inspeccionar registros de ejecución, generar visualizaciones y consultar la documentación. Dado que estas operaciones implican procesos intensivos como la ejecución en sandbox y el acceso a archivos, los ingenieros enfrentaron desafíos específicos relacionados con la latencia y la gestión del estado.

Identificaron que los patrones estándar de solicitud-respuesta eran insuficientes para las tareas prolongadas del agente. Para abordar esto, implementaron una arquitectura dividida donde una respuesta inicial ligera se transmite inmediatamente mientras la lógica más pesada del agente se inicializa en segundo plano. Este enfoque garantiza que los usuarios reciban retroalimentación inmediata, como ver aparecer una llamada a una herramienta como get_run("abc123") dentro de un segundo, en lugar de quedarse mirando un indicador de carga estático.

El artículo también detalla cómo manejaron la compactación de conversaciones, la lógica de reintento y la durabilidad del streaming. Al compartir su código y ejemplos de configuración, ofrecen una guía para otros desarrolladores que enfrentan problemas similares al llevar prototipos de IA a entornos de producción donde la fiabilidad y el rendimiento percibido son primordiales.

Cómo funciona

El mecanismo central depende de desacoplar la interacción inicial del usuario de la ejecución completa del agente. Cuando llega un mensaje, una ruta estándar del servidor web maneja la primera llamada al modelo. Esta llamada transmite una respuesta al cliente instantáneamente, a menudo conteniendo un indicador de llamada a herramienta. Simultáneamente, el sistema inicia el entorno completo del agente. Una vez listo, el agente toma el control del contexto de la conversación, incluyendo las llamadas iniciales a herramientas, asegurando la continuidad sin duplicar mensajes ni cambiar el tono.

Para la integridad de los datos, el sistema utiliza streams duraderos respaldados por almacenamiento de objetos. A cada fragmento de la respuesta se le asigna un número de secuencia. Si un cliente se desconecta y reconecta, envía el último ID de secuencia recibido. El servidor luego reproduce cualquier fragmento perdido desde el almacenamiento antes de reanudar el stream en vivo. Esto evita la pérdida de datos y previene la incomodidad de reiniciar una generación larga desde cero.

El conteo de tokens para la gestión de la ventana de contexto se optimiza rastreando solo los tokens de entrada del paso más reciente. Dado que la salida de un paso se convierte en la entrada del siguiente, sumar la entrada de cada paso llevaría a un sobrecálculo masivo. Este método asegura que la compactación se active solo cuando sea necesario, preservando el contexto relevante sin resumir prematuramente.

Detalles clave

  • Inicialización dividida: La primera llamada al modelo se ejecuta en el manejador de solicitudes por velocidad, mientras que el agente pesado comienza en segundo plano, reduciendo a la mitad el tiempo hasta obtener una actualización útil.
  • Conteo preciso de tokens: La lógica de compactación utiliza solo el conteo de tokens de entrada del último paso para evitar contar repetidamente el historial de la conversación.
  • Límites de reintento: Las herramientas implementan contadores internos de reintentos con breves esperas progresivas ante fallos de red, limitando los fallos consecutivos para prevenir bucles infinitos.
  • Streaming duradero: Los fragmentos de respuesta se almacenan con IDs de secuencia en el almacenamiento de objetos, permitiendo a los clientes reanudar streams interrumpidos sin problemas.
  • Versionado de prompts: Los prompts se definen en código con control de versiones, lo que permite actualizaciones sin despliegue y pruebas A/B mediante un panel de control.
  • Evaluaciones en segundo plano: El diez por ciento de los turnos completados se envían a un modelo juez para puntuar la fundamentación, la calidad de la respuesta y la concisión.

Por qué importa

Para los ingenieros de software que construyen interfaces de IA, la latencia percibida es a menudo más crítica que el tiempo total real de ejecución. Los usuarios abandonan herramientas que parecen no responder, incluso si el backend está trabajando arduamente. El patrón de inicialización dividida descrito aquí ofrece una solución concreta a este problema de UX. Demuestra que no es necesario esperar a que toda la pila del agente esté lista para proporcionar valor al usuario. Mostrar pasos intermedios, como invocaciones de herramientas, genera confianza y mantiene al usuario comprometido durante operaciones más largas.

La fiabilidad en las conexiones de streaming es otro punto de dolor importante en aplicaciones del mundo real. La inestabilidad de la red es común, especialmente para usuarios móviles o aquellos con conexiones poco estables. Implementar streams duraderos con reanudación basada en secuencias transforma una conexión HTTP frágil en una sesión robusta. Esto reduce los tickets de soporte y mejora la calidad general de la interacción, haciendo que el agente se sienta como una parte nativa de la aplicación en lugar de un servicio externo inestable.

Finalmente, el énfasis en la observabilidad y las evaluaciones destaca el cambio de la IA experimental a sistemas ingenierizados. Sin evaluación estructurada y prompts versionados, iterar el comportamiento del agente se convierte en adivinanza. Al tratar los prompts como código y evaluar las salidas sistemáticamente, los equipos pueden realizar mejoras basadas en datos. Este rigor es esencial para mantener respuestas de alta calidad a medida que crece la complejidad de las herramientas y las consultas de los usuarios.

Qué puedes hacer

  • Implementa un manejador de respuestas de dos etapas donde la primera llamada transmita retroalimentación inmediata mientras el agente principal se inicializa en segundo plano.
  • Audita tu lógica de conteo de tokens para asegurar que no estás sumando entradas de cada paso histórico, lo cual lleva a una compactación prematura del contexto.
  • Añade IDs de secuencia a tus respuestas de streaming y almacena los fragmentos en almacenamiento duradero para permitir la reanudación en el lado del cliente tras desconexiones.
  • Define límites explícitos de reintento dentro de tus definiciones de herramientas para evitar que los agentes entren en bucle indefinidamente ante errores transitorios.
  • Versiona tus prompts en código y crea un mecanismo para cambiar versiones sin redesplegar toda la aplicación.
  • Configura trabajos de evaluación en segundo plano que puntúen una muestra de conversaciones utilizando un modelo juez.

Herramientas de la Tienda de Bytechap

$79

WorkBento

Suite de RR. HH. y gestión del entorno laboral impulsada por IA que puedes alojar tú mismo.

Demo en vivo

Seguir leyendo

Todos los artículos