Saltar al contenido principal
De forma predeterminada, el Agent SDK produce objetos AssistantMessage completos después de que Claude termina de generar cada respuesta. Para recibir actualizaciones incrementales mientras se generan texto y llamadas de herramientas, habilite la transmisión de mensajes parciales estableciendo include_partial_messages (Python) o includePartialMessages (TypeScript) en true en sus opciones.
Esta página cubre la transmisión de salida (recibir tokens en tiempo real). Para modos de entrada (cómo envía mensajes), consulte Enviar mensajes a agentes. También puede transmitir respuestas usando el Agent SDK a través de la CLI.

Habilitar la transmisión de salida

Para habilitar la transmisión, establezca include_partial_messages (Python) o includePartialMessages (TypeScript) en true en sus opciones. Esto hace que el SDK produzca mensajes StreamEvent que contienen eventos de API sin procesar a medida que llegan, además de los AssistantMessage y ResultMessage habituales. Su código entonces necesita:
  1. Verificar el tipo de cada mensaje para distinguir StreamEvent de otros tipos de mensaje
  2. Para StreamEvent, extraer el campo event y verificar su type
  3. Buscar eventos content_block_delta donde delta.type sea text_delta, que contienen los fragmentos de texto reales
El ejemplo a continuación habilita la transmisión e imprime fragmentos de texto a medida que llegan. Observe las verificaciones de tipo anidadas: primero para StreamEvent, luego para content_block_delta, luego para text_delta:

Referencia de StreamEvent

Cuando los mensajes parciales están habilitados, recibe eventos de transmisión de API de Claude sin procesar envueltos en un objeto. El tipo tiene nombres diferentes en cada SDK:
  • Python: StreamEvent (importar desde claude_agent_sdk.types)
  • TypeScript: SDKPartialAssistantMessage con type: 'stream_event'
Ambos contienen eventos de API de Claude sin procesar, no texto acumulado. Necesita extraer y acumular deltas de texto usted mismo. Aquí está la estructura de cada tipo:
El campo parent_tool_use_id siempre es None en Python y null en TypeScript. Los eventos de transmisión se emiten solo para la sesión principal; los deltas a nivel de token de subagentos no se reenvían. Para atribuir la salida a un subagentos, use mensajes completos, que llevan parent_tool_use_id. Consulte Detectar invocación de subagentos. El campo event contiene el evento de transmisión sin procesar de la API de Claude. Los tipos de eventos comunes incluyen:

Flujo de mensajes

Con mensajes parciales habilitados, recibe mensajes en este orden:
Sin mensajes parciales habilitados (include_partial_messages en Python, includePartialMessages en TypeScript), recibe todos los tipos de mensaje excepto StreamEvent. Los tipos comunes incluyen SystemMessage (inicialización de sesión), AssistantMessage (respuestas completas), ResultMessage (resultado final) y un mensaje de límite compacto que indica cuándo se compactó el historial de conversación (SDKCompactBoundaryMessage en TypeScript; SystemMessage con subtipo "compact_boundary" en Python).

Transmitir respuestas de texto

Para mostrar texto a medida que se genera, busque eventos content_block_delta donde delta.type sea text_delta. Estos contienen los fragmentos de texto incrementales. El ejemplo a continuación imprime cada fragmento a medida que llega:

Transmitir llamadas de herramientas

Las llamadas de herramientas también se transmiten incrementalmente. Puede rastrear cuándo comienzan las herramientas, recibir su entrada a medida que se genera y ver cuándo se completan. El ejemplo a continuación rastrea la herramienta actual que se está llamando y acumula la entrada JSON a medida que se transmite. Utiliza tres tipos de eventos:
  • content_block_start: la herramienta comienza
  • content_block_delta con input_json_delta: llegan fragmentos de entrada
  • content_block_stop: llamada de herramienta completada

Construir una interfaz de usuario de transmisión

Este ejemplo combina la transmisión de texto y herramientas en una interfaz de usuario coherente. Rastrea si el agente está ejecutando actualmente una herramienta (usando una bandera in_tool) para mostrar indicadores de estado como [Using Read...] mientras se ejecutan las herramientas. El texto se transmite normalmente cuando no está en una herramienta, y la finalización de la herramienta desencadena un mensaje “done”. Este patrón es útil para interfaces de chat que necesitan mostrar progreso durante tareas de agente de varios pasos.

Limitaciones conocidas

  • Structured output: el resultado JSON aparece solo en el ResultMessage.structured_output final, no como deltas de transmisión. Consulte structured outputs para obtener detalles.

Próximos pasos

Ahora que puede transmitir texto y llamadas de herramientas en tiempo real, explore estos temas relacionados: