Unidad 3 / 11

Streaming y respuestas largas

Ganancias:

  • Puede explicar qué es el streaming, tipos de eventos y por qué es necesario.
  • max_tokens capta el tiempo de espera y la relación de salida de 128K de longitud
  • Puede tomar la decisión correcta entre solicitudes de transmisión y no transmisión según la carga de trabajo.

Es posible que hayas notado que en una interfaz de chat, la respuesta se "escribe" palabra por palabra. Esto no es una floritura visual; Es el resultado de una técnica llamada streaming y, a menudo, es obligatorio para la integración de un LLM con calidad de producción. En esta unidad, aprenderá qué es el flujo, en qué eventos consiste, su relación con la salida larga y el tiempo de espera, y cuándo usar el flujo y cuándo no. Cubriremos el tema a través de las tareas reales de un profesional: asistente en vivo, generación de informes extensos, procesamiento por lotes.

¿Qué es el flujo?

Con una solicitud sin transmisión (síncrona), se espera hasta que el modelo produzca la respuesta completa; Cuando la respuesta está lista, llega entera. En una solicitud de transmisión, el servidor envía la respuesta pieza por pieza a medida que se genera el modelo. Técnicamente, esto se hace con eventos enviados por el servidor (SSE – Server-Sent Events, un método en el que el servidor envía pequeños eventos sucesivamente a través de una conexión abierta).

La diferencia se hace evidente en la experiencia del usuario: en una respuesta que tarda 8 segundos, el usuario que no está en la transmisión mira fijamente una pantalla en blanco durante 8 segundos; El usuario de streaming ve las primeras palabras en aproximadamente 0,5 segundos y el texto comienza a fluir. La latencia percibida (la espera que siente el usuario) se reduce considerablemente, mientras que el tiempo total permanece sin cambios.

Tipos de flujo de eventos

El flujo es una secuencia de eventos. Conceptualmente, un flujo típico es el siguiente:

incidente

Significado

inicio_mensaje

La respuesta comenzó; Ha llegado información de encabezado como modelo e identificación.

contenido_bloque_inicio

Se inició un bloque de contenido (por ejemplo, texto)

contenido_bloque_delta

Llegó un pequeño fragmento de texto (delta); tu recoges estos

contenido_bloque_parada

bloque completado

mensaje_delta

Información final actualizada, como stop_reason y uso.

parada_mensaje

Responder más

Su código combina secuencialmente fragmentos de texto en eventos content_block_delta; terminas con exactamente el mismo texto que la respuesta no transmitida. El uso (números simbólicos) suele quedar claro al final del flujo: usted realiza un seguimiento de los costos una vez que finaliza el flujo.

Consejo: La mayoría de los SDK oficiales (kit de desarrollo de software, biblioteca lista para usar del proveedor) proporcionan un asistente que recopila la transmisión por usted (por ejemplo, stream.get_final_message()). No es necesario que administre todas las pistas manualmente; Utilice esta ayuda si desea el texto completo, procese eventos individuales pero para impresión en vivo.

Respuestas largas, max_tokens y tiempo de espera

La segunda causa, y más técnica, del streaming es el tiempo de espera. Si una solicitud HTTP no se completa dentro de un cierto período de tiempo, el cliente interrumpe la conexión. Cuando solicita una salida grande del modelo (por ejemplo, un informe de 40 000 tokens), la llamada sin flujo puede exceder este límite y expirar: la solicitud fallará y tendrá que pagar por los tokens generados.

Los modelos modernos pueden generar hasta 128.000 tokens en una sola solicitud. Pero la regla general es clara: utilice transmisiones si el valor de `max_tokens` es alto (aproximadamente por encima de 16 000). La transmisión mantiene viva la conexión y evita tiempos de espera; También verás el progreso al instante.

  • `max_tokens`: tokens de salida máximos que el modelo puede producir; un techo duro. Si se produce una interrupción, se devuelve stop_reason max_tokens.
  • Ventana de contexto: La ventana en la que debe caber la suma de entrada + salida. max_tokens es el límite máximo de salida; No mezcles los dos.
Precaución: Lanzar solicitudes que no son de flujo con max_tokens grandes es un error clásico en producción. Sin una respuesta, la conexión se interrumpe, el usuario ve un error y el costo del token se desperdicia. Salida larga = flujo.

¿Cuándo fluir y cuándo no?

Estado

preferencia

¿Por qué?

Chat en vivo / asistente

fluir

La latencia percibida cae, el usuario ve el progreso

Informe largo/producción de documentos

fluir

Evita el tiempo de espera y transporta grandes volúmenes de producción de forma segura

Clasificación corta (por ejemplo, etiqueta de una sola palabra)

sin flujo

La producción ya es pequeña; complejidad adicional innecesaria

Procesamiento por lotes

sin flujo/por lotes

Los resultados no se muestran instantáneamente; Ver unidad 7

Paso de automatización (en segundo plano)

Generalmente no hay flujo

Pasas el resultado al siguiente paso, no hay visualización en vivo

Avisos/plantillas copiables

La secuencia en sí no es una indicación, pero las indicaciones son fundamentales para gestionar el resultado producido por la secuencia. En producciones largas y fluidas, imponer la estructura desde el frente aumenta tanto la calidad como la trazabilidad.

# Divida el informe largo en secciones (para que el progreso sea visible en el flujo). Escriba el informe con los siguientes títulos, en este orden exacto. Comience cada encabezado con '## ':## Resumen## Hallazgos## Recomendaciones## Próximos pasos

# Proporcione la longitud objetivo para evitar el truncamiento en producción larga. El texto total será de aproximadamente 800 palabras. Mantenga las porciones equilibradas; No dejes media frase al final.

# Dé la primera oración inmediatamente para el asistente de transmisión. Primero dé una respuesta directa de una oración y luego entre en detalles. Entonces el usuario ve un resultado inmediato mientras espera.

# Mantenga la salida larga estructurada (para que pueda analizarse más adelante) Genere la salida en estas secciones y marque cada sección con un encabezado '### ' independiente para poder analizarla mediante programación: ### INTRODUCCIÓN ### CUERPO ### FUENTES

Aviso débil / Aviso fuerte (producción larga)

# DÉBILEscriba un informe extenso y detallado sobre este tema.

# FUERTEEscribe un informe de aproximadamente 900 palabras sobre este tema. Encabezados: ## Resumen, ## Análisis, ## Riesgos, ## Recomendaciones. Cada título debe tener un máximo de 3 párrafos. No dejes media frase al final.

Versión potente; Determina de antemano la longitud, la estructura y la calidad del acabado. A medida que las secciones van fluyendo, el usuario ve el progreso claramente y gestiona él mismo la longitud contra el riesgo de interrupción del modelo.

Tres mini estuches

Caso 1: queja de pantalla en blanco. El asistente de clientes de un equipo de consultoría respondía sin fluidez; la respuesta promedio demora 7 segundos, los usuarios preguntan "¿se congela?" se quejó. Una vez que entré en el flujo, la primera palabra apareció en ~0,6 segundos; El tiempo total siguió siendo el mismo, pero las quejas "lentas" casi desaparecieron.

Caso 2: Informe desactualizado. Un equipo de finanzas estaba preparando un informe trimestral de 30 páginas; Con max_tokens: 30000, la solicitud sin flujo se atascaría en un tiempo de espera de 60 segundos del cliente, la solicitud fallaría y los tokens generados se escribirían en la factura. Se dejaron llevar por la corriente; la conexión permaneció activa, el informe se entregó en su totalidad y se eliminaron los costos desperdiciados.

Caso 3: Flujo innecesario. Un equipo de operaciones etiquetaba los correos electrónicos entrantes como “urgentes/regulares”; El resultado fue una palabra, pero habitualmente usaban flujo. El flujo no proporcionó ningún beneficio en la respuesta de una palabra, lo que hizo que el código fuera innecesariamente complejo. Cuando cambié a flowless, el código se simplificó y el comportamiento siguió siendo el mismo. Lección: el streaming es valioso en producciones de larga duración o en directo, no en todas partes.

Errores comunes

  • No utilizar transmisiones en salidas largas: tiempo de espera y costo de token desperdiciado.
  • Uso del streaming en resultados cortos: complejidad innecesaria, beneficio cero.
  • No marcar `stop_reason` al final de la transmisión: la respuesta truncada con max_tokens se considera completa.
  • Fusionar deltas incorrectamente: la suma manual con el asistente del SDK produce un error de secuencia/partes faltantes.
  • Intentar leer el "uso" a mitad de camino: los números de token generalmente quedan claros al final; Lleve un registro de los costos al final.
  • Confundir la transmisión con la reducción de costos: la transmisión mejora la experiencia y la resistencia; No cambia el precio del token.

Más profundo: rupturas de flujo y resiliencia

El streaming es una conexión en vivo; Ésta es a la vez su fuerza y ​​su vulnerabilidad. Si la conexión se cae en el medio (fluctuación de la red, tiempo de espera del cliente), conservará el texto que ha acumulado hasta el momento, pero la respuesta estará incompleta. Un cliente de streaming con calidad de producción debe estar preparado para esto: no debe tratar el texto parcial como una "respuesta completa", ni debe considerar que la respuesta está terminada hasta que vea el evento message_stop.

La segunda sutileza es que el flujo no cambia el costo. El hecho de que reciba una respuesta con o sin transmisión no afecta el precio del token; El flujo sólo mejora la experiencia y la resistencia. Entonces “si hacemos streaming, ¿serán más baratos?” La respuesta a la pregunta es no: para conocer el costo, mire las unidades quinta y sexta (selección de modelo, caché).

El tercer punto es lograr un equilibrio práctico: con asistentes en vivo, se valora mucho la llegada rápida de la primera palabra (retraso percibido); Por lo tanto, pedirle al modelo que ingrese la respuesta directamente y dé primero un resultado breve (a través del mensaje del sistema en la cuarta unidad) multiplica el beneficio del flujo. Si el usuario ve algo significativo en el primer segundo, espera pacientemente los detalles que siguen. Por otro lado, el flujo no contribuye a los trabajos que se ejecutan en segundo plano, cuya salida pasa al siguiente paso de automatización; El único criterio es que el trabajo se realice correcta y completamente.

En resumen

La transmisión recupera la respuesta pieza por pieza, lo que reduce la latencia percibida y evita tiempos de espera en grandes rendimientos. Casi obligatorio para asistentes en vivo y producción de documentos largos; No es necesario para trabajos breves o en segundo plano. En producciones largas, imponer la estructura y la longitud desde el frente con prontitud aumenta tanto la calidad como la trazabilidad; Cuando finaliza el flujo, se verifican definitivamente stop_reason y use.

Tarea de aplicación

Elija dos escenarios: uno activo/largo (por ejemplo, informar al cliente), uno breve/en segundo plano (por ejemplo, etiquetado). (1) Decida y justifique si utilizará el flujo para cada uno. (2) Escriba un mensaje que imponga la estructura del guión largo (encabezados + longitud objetivo). (3) Determinar los valores de max_tokens. (4) Enumere las comprobaciones que realizará con stop_reason y el uso al final del flujo.

lista de verificación

  • [ ] Puedo explicar qué es el streaming y cómo reduce la latencia percibida.
  • [] Entendí los tipos de eventos básicos de la transmisión y la unión delta.
  • [] Conozco la necesidad de transmitir con max_tokens grandes y la relación de tiempo de espera.
  • [ ] Puedo decidir en qué carga de trabajo usaré el streaming y en cuál no.
  • [] Puedo verificar stop_reason y el uso al final de la transmisión.