Compartilhar via


Respostas em segundo plano do agente

O Microsoft Agent Framework dá suporte a respostas em segundo plano para lidar com operações de longa execução que podem levar tempo para serem concluídas. Esse recurso permite que os agentes comecem a processar uma solicitação e retornem um token de continuação que pode ser usado para sondar resultados ou retomar fluxos interrompidos.

Dica

Para obter um exemplo de trabalho completo, consulte o exemplo de Respostas em Segundo Plano.

Quando usar respostas em segundo plano

As respostas em segundo plano são particularmente úteis para:

  • Tarefas de raciocínio complexas que exigem um tempo de processamento significativo
  • Operações que podem ser interrompidas por problemas de rede ou tempos limite do cliente
  • Cenários em que você deseja iniciar uma tarefa de execução prolongada e fazer check-back mais tarde para obter resultados

Como funcionam as respostas em segundo plano

As respostas em segundo plano usam um mecanismo de token de continuação para lidar com operações de execução longa. Quando você envia uma solicitação a um agente com respostas em segundo plano habilitadas, uma das duas coisas acontece:

  1. Conclusão imediata: o agente conclui a tarefa rapidamente e retorna a resposta final sem um token de continuação
  2. Processamento em segundo plano: o agente inicia o processamento em segundo plano e retorna um token de continuação em vez do resultado final

O token de continuação contém todas as informações necessárias para sondagem para conclusão usando a API do agente de não streaming ou retomar um fluxo interrompido com a API do agente de streaming. Quando o token de continuação é null, a operação é concluída - isso acontece quando uma resposta em segundo plano é concluída, falha ou não pode continuar (por exemplo, quando a entrada do usuário é necessária).

Habilitando respostas em segundo plano

Para habilitar as respostas em segundo plano, defina a AllowBackgroundResponses propriedade true como:AgentRunOptions

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

Observação

Atualmente, apenas os agentes que usam a API de Respostas OpenAI dão suporte a respostas em segundo plano: o Agente de Respostas OpenAI e o Agente de Respostas do Azure OpenAI.

Alguns agentes podem não permitir controle explícito sobre respostas em segundo plano. Esses agentes podem decidir de forma autônoma se devem iniciar uma resposta em segundo plano com base na complexidade da operação, independentemente da AllowBackgroundResponses configuração.

Respostas em segundo plano sem streaming

Para cenários que não são de streaming, quando você executa inicialmente um agente, ele pode ou não retornar um token de continuação. Se nenhum token de continuação for retornado, isso significa que a operação foi concluída. Se um token de continuação for retornado, ele indicará que o agente iniciou uma resposta em segundo plano que ainda está sendo processada e exigirá sondagem para recuperar o 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);

Pontos principais:

  • A chamada inicial pode ser concluída imediatamente (sem token de continuação) ou iniciar uma operação em segundo plano (com token de continuação)
  • Se nenhum token de continuação for retornado, a operação será concluída e a resposta conterá o resultado final
  • Se um token de continuação for retornado, o agente iniciará um processo em segundo plano que requer sondagem
  • Usar o token de continuação da resposta anterior em chamadas de sondagem subsequentes
  • Quando ContinuationToken estiver null, a operação será concluída

Respostas em segundo plano de streaming

Em cenários de streaming, as respostas em segundo plano funcionam muito como respostas regulares de streaming - o agente transmite todas as atualizações de volta para os consumidores em tempo real. No entanto, a principal diferença é que, se o fluxo original for interrompido, os agentes darão suporte à retomada do fluxo por meio de tokens de continuação. Cada atualização inclui um token de continuação que captura o estado atual, permitindo que o fluxo seja retomado exatamente de onde parou passando esse token para chamadas de API de streaming subsequentes:

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);
}

Pontos principais:

  • Cada AgentRunResponseUpdate um contém um token de continuação que pode ser usado para retomada
  • Armazenar o token de continuação da última atualização recebida antes da interrupção
  • Usar o token de continuação armazenado para retomar o fluxo do ponto de interrupção

Observação

O suporte a respostas em segundo plano no Python estará disponível em breve. Esse recurso está atualmente disponível na implementação do .NET do Agent Framework.

Práticas recomendadas

Ao trabalhar com respostas em segundo plano, considere as seguintes práticas recomendadas:

  • Implementar intervalos de sondagem apropriados para evitar sobrecarregar o serviço
  • Use a retirada exponencial para intervalos de sondagem se a operação estiver demorando mais do que o esperado
  • Sempre verifique se há null tokens de continuação para determinar quando o processamento é concluído
  • Considere armazenar tokens de continuação persistentemente para operações que podem abranger sessões de usuário

Limitações e considerações

  • As respostas em segundo plano dependem do serviço de IA subjacente que dá suporte a operações de execução longa
  • Nem todos os tipos de agente podem dar suporte a respostas em segundo plano
  • Interrupções de rede ou reinicializações de cliente podem exigir tratamento especial para persistir tokens de continuação

Próximas etapas