Compartir a través de


Respuestas en segundo plano del agente

Microsoft Agent Framework admite respuestas en segundo plano para controlar las operaciones de larga duración que pueden tardar tiempo en completarse. Esta característica permite a los agentes iniciar el procesamiento de una solicitud y devolver un token de continuación que se puede usar para sondear los resultados o reanudar las secuencias interrumpidas.

Sugerencia

Para obtener un ejemplo de trabajo completo, consulte el ejemplo respuestas en segundo plano.

Cuándo usar respuestas en segundo plano

Las respuestas en segundo plano son especialmente útiles para:

  • Tareas de razonamiento complejas que requieren un tiempo de procesamiento significativo
  • Operaciones que pueden interrumpirse por problemas de red o tiempos de espera de cliente
  • Escenarios en los que desea iniciar una tarea de ejecución prolongada y volver a comprobarlos más adelante para ver los resultados

Cómo funcionan las respuestas en segundo plano

Las respuestas en segundo plano usan un mecanismo de token de continuación para controlar las operaciones de ejecución prolongada. Al enviar una solicitud a un agente con las respuestas en segundo plano habilitadas, se produce una de estas dos cosas:

  1. Finalización inmediata: el agente completa rápidamente la tarea y devuelve la respuesta final sin un token de continuación.
  2. Procesamiento en segundo plano: el agente inicia el procesamiento en segundo plano y devuelve un token de continuación en lugar del resultado final.

El token de continuación contiene toda la información necesaria para sondear la finalización mediante la API del agente que no es de streaming o reanudar una secuencia interrumpida con la API del agente de streaming. Cuando el token de continuación es null, la operación se completa; esto sucede cuando se ha completado, se ha producido un error en una respuesta en segundo plano o no puede continuar más (por ejemplo, cuando se requiere la entrada del usuario).

Habilitación de respuestas en segundo plano

Para habilitar las respuestas en segundo plano, establezca la AllowBackgroundResponses propiedad true en :AgentRunOptions

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

Nota:

Actualmente, solo los agentes que usan la API de respuestas de OpenAI admiten respuestas en segundo plano: Agente de respuestas de OpenAI y Agente de respuestas de Azure OpenAI.

Es posible que algunos agentes no permitan el control explícito sobre las respuestas en segundo plano. Estos agentes pueden decidir de forma autónoma si se inicia una respuesta en segundo plano en función de la complejidad de la operación, independientemente de la AllowBackgroundResponses configuración.

Respuestas en segundo plano que no son de streaming

En escenarios que no son de streaming, cuando se ejecuta inicialmente un agente, puede devolver o no un token de continuación. Si no se devuelve ningún token de continuación, significa que la operación se ha completado. Si se devuelve un token de continuación, indica que el agente ha iniciado una respuesta en segundo plano que sigue procesando y requerirá sondeo para recuperar el resultado final:

AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
    .GetOpenAIResponseClient("<deployment-name>")
    .CreateAIAgent();

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

AgentThread thread = agent.GetNewThread();

// Get initial response - may return with or without a continuation token
AgentRunResponse response = await agent.RunAsync("Write a very long novel about otters in space.", thread, options);

// Continue to poll until the final response is received
while (response.ContinuationToken is not null)
{
    // Wait before polling again.
    await Task.Delay(TimeSpan.FromSeconds(2));

    options.ContinuationToken = response.ContinuationToken;
    response = await agent.RunAsync(thread, options);
}

Console.WriteLine(response.Text);

Puntos clave:

  • La llamada inicial puede completarse inmediatamente (sin token de continuación) o iniciar una operación en segundo plano (con token de continuación).
  • Si no se devuelve ningún token de continuación, la operación se completa y la respuesta contiene el resultado final.
  • Si se devuelve un token de continuación, el agente ha iniciado un proceso en segundo plano que requiere sondeo.
  • Uso del token de continuación de la respuesta anterior en llamadas de sondeo posteriores
  • Cuando ContinuationToken es null, la operación se completa

Respuestas en segundo plano de streaming

En escenarios de streaming, las respuestas en segundo plano funcionan de forma muy similar a las respuestas de streaming normales: el agente transmite todas las actualizaciones a los consumidores en tiempo real. Sin embargo, la diferencia clave es que si se interrumpe la secuencia original, los agentes admiten la reanudación de la secuencia a través de tokens de continuación. Cada actualización incluye un token de continuación que captura el estado actual, lo que permite que la secuencia se reanude exactamente desde dónde se dejó pasando este token a las siguientes llamadas API de streaming:

AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
    .GetOpenAIResponseClient("<deployment-name>")
    .CreateAIAgent();

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

AgentThread thread = agent.GetNewThread();

AgentRunResponseUpdate? latestReceivedUpdate = null;

await foreach (var update in agent.RunStreamingAsync("Write a very long novel about otters in space.", thread, options))
{
    Console.Write(update.Text);

    latestReceivedUpdate = update;

    // Simulate an interruption
    break;
}

// Resume from interruption point captured by the continuation token
options.ContinuationToken = latestReceivedUpdate?.ContinuationToken;
await foreach (var update in agent.RunStreamingAsync(thread, options))
{
    Console.Write(update.Text);
}

Puntos clave:

  • Cada AgentRunResponseUpdate contiene un token de continuación que se puede usar para la reanudación.
  • Almacenar el token de continuación de la última actualización recibida antes de la interrupción
  • Uso del token de continuación almacenado para reanudar la secuencia desde el punto de interrupción

Nota:

La compatibilidad con las respuestas en segundo plano en Python estará disponible próximamente. Esta característica está disponible actualmente en la implementación de .NET de Agent Framework.

Procedimientos recomendados

Al trabajar con respuestas en segundo plano, tenga en cuenta los procedimientos recomendados siguientes:

  • Implementación de intervalos de sondeo adecuados para evitar sobrecargar el servicio
  • Usar retroceso exponencial para intervalos de sondeo si la operación tarda más de lo esperado
  • Compruebe siempre los null tokens de continuación para determinar cuándo se completa el procesamiento.
  • Considere la posibilidad de almacenar tokens de continuación de forma persistente para las operaciones que pueden abarcar sesiones de usuario.

Limitaciones y consideraciones

  • Las respuestas en segundo plano dependen del servicio de inteligencia artificial subyacente que admite operaciones de larga duración.
  • No todos los tipos de agente pueden admitir respuestas en segundo plano
  • Las interrupciones de red o los reinicios del cliente pueden requerir un control especial para conservar los tokens de continuación.

Pasos siguientes