"stream": true para transmitir incrementalmente la respuesta usando eventos enviados por el servidor (SSE).
Transmisión con SDKs
Nuestros SDKs de Python y TypeScript ofrecen múltiples formas de transmisión. El SDK de Python permite tanto transmisiones síncronas como asíncronas. Consulta la documentación en cada SDK para obtener detalles.Tipos de eventos
Cada evento enviado por el servidor incluye un tipo de evento con nombre y datos JSON asociados. Cada evento usará un nombre de evento SSE (por ejemplo,event: message_stop), e incluirá el type de evento correspondiente en sus datos.
Cada transmisión usa el siguiente flujo de eventos:
message_start: contiene un objetoMessageconcontentvacío.- Una serie de bloques de contenido, cada uno de los cuales tiene un
content_block_start, uno o más eventoscontent_block_delta, y un eventocontent_block_stop. Cada bloque de contenido tendrá unindexque corresponde a su índice en el arraycontentdel Mensaje final. - Uno o más eventos
message_delta, indicando cambios de nivel superior al objetoMessagefinal. - Un evento final
message_stop.
Los conteos de tokens mostrados en el campo
usage del evento message_delta son acumulativos.Eventos ping
Las transmisiones de eventos también pueden incluir cualquier número de eventosping.
Eventos de error
Ocasionalmente podemos enviar errores en la transmisión de eventos. Por ejemplo, durante períodos de alto uso, puedes recibir unoverloaded_error, que normalmente correspondería a un HTTP 529 en un contexto sin transmisión:
Example error
Otros eventos
De acuerdo con nuestra política de versionado, podemos agregar nuevos tipos de eventos, y tu código debe manejar tipos de eventos desconocidos de manera elegante.Tipos de delta de bloques de contenido
Cada eventocontent_block_delta contiene un delta de un tipo que actualiza el bloque content en un index dado.
Delta de texto
Un delta de bloque de contenidotext se ve así:
Text delta
Delta de JSON de entrada
Los deltas para bloques de contenidotool_use corresponden a actualizaciones para el campo input del bloque. Para soportar la máxima granularidad, los deltas son cadenas JSON parciales, mientras que el tool_use.input final siempre es un objeto.
Puedes acumular los deltas de cadena y analizar el JSON una vez que recibas un evento content_block_stop, usando una biblioteca como Pydantic para hacer análisis JSON parcial, o usando nuestros SDKs, que proporcionan ayudantes para acceder a valores incrementales analizados.
Un delta de bloque de contenido tool_use se ve así:
Input JSON delta
input a la vez. Como tal, al usar herramientas, puede haber retrasos entre eventos de transmisión mientras el modelo está trabajando. Una vez que se acumulan una clave y valor de input, los emitimos como múltiples eventos content_block_delta con json parcial fragmentado para que el formato pueda soportar automáticamente una granularidad más fina en modelos futuros.
Delta de pensamiento
Al usar pensamiento extendido con transmisión habilitada, recibirás contenido de pensamiento a través de eventosthinking_delta. Estos deltas corresponden al campo thinking de los bloques de contenido thinking.
Para el contenido de pensamiento, se envía un evento especial signature_delta justo antes del evento content_block_stop. Esta firma se usa para verificar la integridad del bloque de pensamiento.
Un delta de pensamiento típico se ve así:
Thinking delta
Signature delta
Respuesta completa de transmisión HTTP
Recomendamos encarecidamente que uses nuestros SDKs de cliente al usar el modo de transmisión. Sin embargo, si estás construyendo una integración directa de API, necesitarás manejar estos eventos tú mismo. Una respuesta de transmisión está compuesta por:- Un evento
message_start - Potencialmente múltiples bloques de contenido, cada uno de los cuales contiene:
- Un evento
content_block_start - Potencialmente múltiples eventos
content_block_delta - Un evento
content_block_stop
- Un evento
- Un evento
message_delta - Un evento
message_stop
ping dispersos a lo largo de la respuesta. Consulta Tipos de eventos para más detalles sobre el formato.
Solicitud básica de transmisión
Response
Solicitud de transmisión con uso de herramientas
El uso de herramientas ahora soporta transmisión de grano fino para valores de parámetros como una característica beta. Para más detalles, consulta Transmisión de herramientas de grano fino.
Response
Solicitud de transmisión con pensamiento extendido
En esta solicitud, habilitamos el pensamiento extendido con transmisión para ver el razonamiento paso a paso de Claude.Response
Solicitud de transmisión con uso de herramienta de búsqueda web
En esta solicitud, le pedimos a Claude que busque en la web información actual del clima.Response
Recuperación de errores
Cuando una solicitud de transmisión se interrumpe debido a problemas de red, tiempos de espera u otros errores, puedes recuperarte reanudando desde donde se interrumpió la transmisión. Este enfoque te ahorra tener que reprocesar toda la respuesta. La estrategia básica de recuperación involucra:- Capturar la respuesta parcial: Guarda todo el contenido que se recibió exitosamente antes de que ocurriera el error
- Construir una solicitud de continuación: Crea una nueva solicitud de API que incluya la respuesta parcial del asistente como el comienzo de un nuevo mensaje del asistente
- Reanudar la transmisión: Continúa recibiendo el resto de la respuesta desde donde se interrumpió
Mejores prácticas para la recuperación de errores
- Usar características del SDK: Aprovecha las capacidades integradas de acumulación de mensajes y manejo de errores del SDK
- Manejar tipos de contenido: Ten en cuenta que los mensajes pueden contener múltiples bloques de contenido (
text,tool_use,thinking). Los bloques de uso de herramientas y pensamiento extendido no pueden recuperarse parcialmente. Puedes reanudar la transmisión desde el bloque de texto más reciente.