Udostępnij przez


Odpowiedzi w tle agenta

Platforma Microsoft Agent Framework obsługuje odpowiedzi w tle na potrzeby obsługi długotrwałych operacji, które mogą zająć trochę czasu. Ta funkcja umożliwia agentom rozpoczęcie przetwarzania żądania i zwracanie tokenu kontynuacji, który może służyć do sondowania wyników lub wznawiania przerwanych strumieni.

Wskazówka

Pełny przykład roboczy można znaleźć w przykładzie Odpowiedzi w tle.

Kiedy należy używać odpowiedzi w tle

Odpowiedzi w tle są szczególnie przydatne w następujących celach:

  • Złożone zadania rozumowania, które wymagają znacznego czasu przetwarzania
  • Operacje, które mogą zostać przerwane przez problemy z siecią lub przekroczenia limitu czasu klienta
  • Scenariusze, w których chcesz uruchomić długotrwałe zadanie i sprawdzić je później, aby uzyskać wyniki

Jak działają odpowiedzi w tle

Odpowiedzi w tle używają mechanizmu tokenu kontynuacji do obsługi długotrwałych operacji. Po wysłaniu żądania do agenta z włączonymi odpowiedziami w tle następuje jedna z dwóch rzeczy:

  1. Natychmiastowe zakończenie: agent szybko wykonuje zadanie i zwraca ostateczną odpowiedź bez tokenu kontynuacji
  2. Przetwarzanie w tle: agent uruchamia przetwarzanie w tle i zwraca token kontynuacji zamiast wyniku końcowego

Token kontynuacji zawiera wszystkie niezbędne informacje do sondowania w celu ukończenia przy użyciu interfejsu API agenta przesyłania strumieniowego lub wznowienia przerwanego strumienia za pomocą interfejsu API agenta przesyłania strumieniowego. Gdy token kontynuacji to null, operacja zostanie ukończona — dzieje się tak, gdy odpowiedź w tle została ukończona, nie powiodła się lub nie może kontynuować dalszych działań (na przykład gdy wymagane jest wprowadzenie danych przez użytkownika).

Włączanie odpowiedzi w tle

Aby włączyć odpowiedzi w tle, ustaw AllowBackgroundResponses właściwość na true w pliku AgentRunOptions:

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

Uwaga / Notatka

Obecnie tylko agenci korzystający z interfejsu API odpowiedzi openAI obsługują odpowiedzi w tle: Agent odpowiedzi openAI i agent odpowiedzi usługi Azure OpenAI.

Niektórzy agenci mogą nie zezwalać na jawną kontrolę nad odpowiedziami w tle. Ci agenci mogą zdecydować autonomicznie, czy zainicjować odpowiedź w tle na podstawie złożoności operacji, niezależnie od AllowBackgroundResponses ustawienia.

Odpowiedzi w tle bez przesyłania strumieniowego

W przypadku scenariuszy nieprzesyłania strumieniowego podczas początkowego uruchamiania agenta może on lub nie zwraca tokenu kontynuacji. Jeśli nie zostanie zwrócony żaden token kontynuacji, oznacza to, że operacja została ukończona. Jeśli zostanie zwrócony token kontynuacji, oznacza to, że agent zainicjował odpowiedź w tle, która nadal jest przetwarzana i będzie wymagać sondowania w celu pobrania wyniku końcowego:

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

Kluczowe kwestie:

  • Początkowe wywołanie może zakończyć się natychmiast (bez tokenu kontynuacji) lub uruchomić operację w tle (z tokenem kontynuacji)
  • Jeśli nie zostanie zwrócony żaden token kontynuacji, operacja zostanie ukończona, a odpowiedź zawiera wynik końcowy
  • Jeśli zostanie zwrócony token kontynuacji, agent rozpoczął proces w tle, który wymaga sondowania
  • Użyj tokenu kontynuacji z poprzedniej odpowiedzi w kolejnych wywołaniach sondowania
  • Gdy ContinuationToken wartość to null, operacja zostanie ukończona

Odpowiedzi w tle przesyłania strumieniowego

W scenariuszach przesyłania strumieniowego odpowiedzi w tle działają podobnie jak regularne odpowiedzi przesyłane strumieniowo — agent przesyła strumieniowo wszystkie aktualizacje do użytkowników w czasie rzeczywistym. Jednak kluczową różnicą jest to, że jeśli oryginalny strumień zostanie przerwany, agenci obsługują wznowienie strumienia za pośrednictwem tokenów kontynuacji. Każda aktualizacja zawiera token kontynuacji, który przechwytuje bieżący stan, co umożliwia wznowienie strumienia z dokładnie tego, gdzie zostało to przerwane, przekazując ten token do kolejnych wywołań interfejsu API przesyłania strumieniowego:

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

Kluczowe kwestie:

  • Każdy AgentRunResponseUpdate zawiera token kontynuacji, którego można użyć do wznowienia
  • Przechowywanie tokenu kontynuacji z ostatniej odebranej aktualizacji przed przerwą
  • Użyj przechowywanego tokenu kontynuacji, aby wznowić strumień z punktu przerwania

Uwaga / Notatka

Obsługa odpowiedzi w tle w języku Python będzie dostępna wkrótce. Ta funkcja jest obecnie dostępna w implementacji platformy .NET programu Agent Framework.

Najlepsze praktyki

Podczas pracy z odpowiedziami w tle należy wziąć pod uwagę następujące najlepsze rozwiązania:

  • Implementowanie odpowiednich interwałów sondowania , aby uniknąć przeciążenia usługi
  • Użyj wycofywania wykładniczego dla interwałów sondowania, jeśli operacja trwa dłużej niż oczekiwano
  • Zawsze sprawdzaj, czy null nie ma tokenów kontynuacji , aby określić, kiedy przetwarzanie zostało ukończone
  • Rozważ trwałe przechowywanie tokenów kontynuacji dla operacji, które mogą obejmować sesje użytkowników

Ograniczenia i zagadnienia

  • Odpowiedzi w tle są zależne od bazowej usługi sztucznej inteligencji obsługującej długotrwałe operacje
  • Nie wszystkie typy agentów mogą obsługiwać odpowiedzi w tle
  • Przerwy w działaniu sieci lub ponowne uruchomienia klienta mogą wymagać specjalnej obsługi w celu utrwalania tokenów kontynuacji

Dalsze kroki