Un intercambio agente debe mantener una interacción estructurada: los turnos del asistente entrelazan el razonamiento con una o más llamadas a herramientas, y los turnos de usuario posteriores devuelven los resultados de las herramientas al contexto del modelo. El repetido razonamiento depende del modelo y del turno: algunos razonamientos deben conservarse, mientras que otros deben eliminarse.
El motor de inferencia es responsable de soportar este modelo de interacción más expresivo y de producir resultados de API correctamente segmentados. El análisis de llamadas a herramientas y el razonamiento deben realizarse antes de que el arnés adjunto consuma la respuesta. Flujos de trabajo agentes de alto valor, como la programación, también dependen de una experiencia de arnés receptiva: los segmentos de razonamiento, los eventos de llamadas a herramientas y los metadatos de solicitud deben transmitirse a medida que avanza el turno, en lugar de llegar solo después de una respuesta de texto final.
Lecciones aprendidas de NVIDIA Dynamo
Este artículo cubre lecciones de la ejecución de clientes agentes reales contra NVIDIA Dynamo: cómo fortalecimos la cobertura del analizador y la API, mejoramos el comportamiento de streaming y extraímos esas capas de analizador en crates reutilizables independientes.
Estos cambios se basan en las consideraciones de rendimiento descritas en nuestro primer artículo, que se centró en la arquitectura de servicio subyacente a la inferencia agente: el frontend, el enrutador y la gestión de caché KV. Este seguimiento se centra en la corrección, la equivalencia en la experiencia del usuario y el rendimiento.
Ajustes de Dynamo orientados al arnés
Nuestros experimentos utilizaron el modelo recientemente lanzado nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4, aunque los mismos problemas se aplican a través de modelos, analizadores de razonamiento y analizadores de llamadas a herramientas.
Para reproducir nuestros resultados, configure el frontend con la API compatible con Anthropic y las banderas que preservan el estado del prompt, razonamiento y herramientas:
--enable-anthropic-apiexpone la API de Mensajes de Anthropic a los arneses. Muchos arneses pueden volver a la API de Mensajes por defecto, pero la experiencia se ve degradada.--strip-anthropic-preambleelimina el encabezado de facturación de Anthropic que puede desestabilizar el uso de KV.--enable-streaming-tool-dispatchpermite que las llamadas a herramientas completas comiencen a ejecutarse tan pronto como se decodifiquen, en lugar de esperar el final del turno.
Juntando todo esto:
python -m dynamo.frontend --http-port 8000 --enable-anthropic-api --strip-anthropic-preamble --enable-streaming-tool-dispatch
En el lado del trabajador, los ajustes importantes en esta implementación son:
--dyn-tool-call-parsery--dyn-reasoning-parserreconstruyen las llamadas a herramientas y bloques de razonamiento en el formato específico del modelo que espera el arnés. Esos analizadores también controlan si el razonamiento de turnos anteriores debe conservarse, transformarse o eliminarse.
La estabilidad del prompt es clave para el uso de caché
Claude Code envía miles de tokens de andamiaje de prompt reutilizable, gran parte del cual está destinado a permanecer idéntico entre usuarios y sesiones. Sin embargo, cada prompt comienza con un encabezado de facturación específico de la sesión que provoca fallos de caché cuando las solicitudes se dirigen a puntos finales personalizados que no lo eliminan.
x-anthropic-billing-header: cc_version=0.2.93; cch=abc123def456==; Eres Claude Code, una herramienta CLI interactiva...
Estos encabezados contaminan la caché KV y evitan su reutilización, incluso entre sesiones del mismo usuario. Una línea variable en la posición cero significa que cada nueva sesión comienza con un prefijo de token diferente, por lo que las instrucciones estables y las definiciones de herramientas detrás de ellas nunca se alinean correctamente para su reutilización.
Para restaurar la reutilización de la caché KV, Dynamo añadió --strip-anthropic-preamble. La solución es mecánicamente pequeña y operativamente importante: eliminar el encabezado de facturación inestable antes de la tokenización para que el prompt estable comience en el token cero.
El impacto medido fue significativo. En una implementación de Dynamo NVIDIA B200 con un prompt de 52K tokens, un prefijo estable llegó a 168 ms TTFT. Mantener un encabezado variable por sesión en el prefijo lo empujó a 912 ms. Eliminar el encabezado de facturación antes de la tokenización lo devolvió a 169 ms. En esta carga de trabajo, el encabezado inestable cuesta 744 ms por solicitud y convierte un sistema de prompt reutilizable en un prellenado frío. Esto representa una reducción de aproximadamente 5x en TTFT para nuevos usuarios que acceden a la misma implementación o para el mismo usuario que abre una nueva sesión.
El futuro de Dynamo
Dynamo ahora cuenta con nvext.agent_hints: latency_sensitivity, priority, osl, and speculative_prefill. Estos campos brindan al arnés la posibilidad de comunicar más sobre el turno que solo el prompt. Una sesión que espera una respuesta del usuario no es lo mismo que una que trabaja a través de una larga secuencia de herramientas en segundo plano, y la API ahora puede llevar parte de esa diferencia.
En la línea v1.1.0, Dynamo también está haciendo más de la pila de agentes disponible como piezas reutilizables. Los protocolos, analizadores y capas de tokenización están versionados como crates independientes, incluyendo dynamo-protocols, dynamo-parsers, y dynamo-tokenizers. Esto brinda a los equipos una forma de construir o personalizar un camino de servicio orientado al arnés sin copiar internamente a Dynamo en un proyecto separado. Este es también el puente hacia sistemas de larga duración como AutoResearch. El primer artículo explicó por qué las cargas de trabajo agentes estresan la pila de servicio. Este artículo se centra en el contrato orientado al arnés necesario para ejecutar esas cargas de trabajo correctamente y establece el escenario para agentes de larga duración eficientes respaldados por puntos finales de Dynamo.

