Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Agent Framework поддерживает фоновые ответы для обработки длительных операций, которые могут занять время. Эта функция позволяет агентам начать обработку запроса и вернуть маркер продолжения, который можно использовать для опроса результатов или возобновления прерванных потоков.
Подсказка
Полный рабочий пример см. в примере фоновых ответов.
Когда следует использовать фоновые ответы
Фоновые ответы особенно полезны для:
- Сложные задачи, требующие значительного времени обработки
- Операции, которые могут быть прерваны проблемами сети или истечением времени ожидания клиента
- Сценарии, в которых требуется запустить долго выполняющуюся задачу и вернуться к результатам позже.
Как работают фоновые ответы
Фоновые ответы используют механизм маркера продолжения для обработки длительных операций. При отправке запроса агенту с включенными фоновыми ответами происходит одно из двух действий.
- Немедленное завершение: агент быстро завершает задачу и возвращает окончательный ответ без маркера продолжения.
- Фоновая обработка: агент начинает обработку в фоновом режиме и возвращает маркер продолжения вместо окончательного результата.
Маркер продолжения содержит все необходимые сведения для опроса завершения с помощью API агента, отличного от потоковой передачи, или возобновления прерванного потока с ПОМОЩЬЮ API агента потоковой передачи. Когда маркер nullпродолжения завершен, операция завершается. Это происходит, когда фоновый ответ завершился, завершился сбой или не может продолжить работу (например, если требуется ввод пользователя).
Включение фоновых ответов
Чтобы включить фоновые ответы, задайте для свойства AllowBackgroundResponses значение true :AgentRunOptions
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
Замечание
В настоящее время только агенты, использующие API ответов OpenAI, поддерживают фоновые ответы: агент ответов OpenAI и агент ответов Azure OpenAI.
Некоторые агенты могут не разрешать явный контроль над фоновыми ответами. Эти агенты могут самостоятельно решить, следует ли инициировать фоновый ответ на основе сложности операции независимо от AllowBackgroundResponses параметра.
Фоновые ответы без потоковой передачи
Для сценариев без потоковой передачи при первоначальном запуске агента он может или не возвращать маркер продолжения. Если маркер продолжения не возвращается, это означает, что операция завершена. Если маркер продолжения возвращается, он указывает, что агент инициировал фоновый ответ, который по-прежнему обрабатывается и потребует опроса для получения окончательного результата:
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetOpenAIResponseClient("<deployment-name>")
.AsAIAgent();
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
AgentSession session = await agent.GetNewSessionAsync();
// Get initial response - may return with or without a continuation token
AgentResponse response = await agent.RunAsync("Write a very long novel about otters in space.", session, 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(session, options);
}
Console.WriteLine(response.Text);
Основные моменты:
- Начальный вызов может завершиться немедленно (без маркера продолжения) или запустить фоновую операцию (с маркером продолжения)
- Если маркер продолжения не возвращается, операция завершена, а ответ содержит окончательный результат.
- Если возвращается маркер продолжения, агент запустил фоновый процесс, требующий опроса
- Использование маркера продолжения из предыдущего ответа в последующих вызовах опроса
- Когда
ContinuationTokenэтоnullтак, операция завершена
Потоковая передача фоновых ответов
В сценариях потоковой передачи фоновые ответы работают так же, как обычные ответы потоковой передачи. Агент передает все обновления обратно потребителям в режиме реального времени. Однако ключевое различие заключается в том, что если исходный поток прерывается, агенты поддерживают возобновление потока с помощью маркеров продолжения. Каждое обновление включает в себя маркер продолжения, который фиксирует текущее состояние, что позволяет возобновить поток из того места, где он остался, передав этот маркер в последующие вызовы API потоковой передачи:
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetOpenAIResponseClient("<deployment-name>")
.AsAIAgent();
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
AgentSession session = await agent.GetNewSessionAsync();
AgentResponseUpdate? latestReceivedUpdate = null;
await foreach (var update in agent.RunStreamingAsync("Write a very long novel about otters in space.", session, 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(session, options))
{
Console.Write(update.Text);
}
Основные моменты:
- Каждый
AgentResponseUpdateсодержит маркер продолжения, который можно использовать для возобновления - Сохранение маркера продолжения из последнего полученного обновления до прерывания
- Использование сохраненного маркера продолжения для возобновления потока из точки прерывания
Замечание
Поддержка фоновых ответов в Python ожидается в ближайшее время. Эта функция в настоящее время доступна в реализации .NET Agent Framework.
Лучшие практики
При работе с фоновыми ответами рассмотрите следующие рекомендации.
- Реализуйте соответствующие интервалы опроса , чтобы избежать перегрузки службы
- Используйте экспоненциальную обратную передачу для интервалов опроса, если операция занимает больше времени, чем ожидалось.
-
Всегда проверяйте
nullмаркеры продолжения , чтобы определить, когда обработка завершена - Рассмотрите возможность постоянного хранения маркеров продолжения для операций, которые могут охватывать сеансы пользователей
Ограничения и рекомендации
- Фоновые ответы зависят от базовой службы искусственного интеллекта, поддерживающей длительные операции.
- Не все типы агентов могут поддерживать фоновые ответы
- Прерывания сети или перезапуски клиента могут потребовать специальной обработки для сохранения маркеров продолжения.