Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Цикл агента повторно вызывает агент до тех пор, пока не будет выполнено условие завершения. Используйте его для итеративного уточнения, завершения до завершения, ожидания фоновых задач или оценки того, соответствует ли ответ явным критериям.
Всегда привязанные автономные циклы. Условие завершения может завершиться ошибкой, модель может застопориться, и вычислитель может быть вероятностным.
Important
Цикл агента является экспериментальным.
Настройка циклов вручную
Используйте API прямой композиции, если требуется цикл без других агентов Использования по умолчанию.
Импортируйте типы циклов и обертываете все AIAgent с LoopAgentпомощью . Максимальное значение по умолчанию — 10 вызовов агента:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Импортируйте AgentLoopMiddleware и добавьте его в обычный Agent. Максимальное значение по умолчанию — 10 запусков агента:
from agent_framework import Agent, AgentLoopMiddleware
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = Agent(
client=client,
middleware=[
AgentLoopMiddleware(
needs_more_work,
max_iterations=5,
)
],
)
Предикат может быть синхронным или асинхронным. Вернитесь True к продолжению, False чтобы остановить или (continue, feedback) передать обратную связь в следующую итерацию.
Замечание
Возможность упаковаемого цикла, описанная на этой странице, в настоящее время недоступна в Go.
Выбор условия завершения
LoopAgent принимает один вычислитель или упорядоченную коллекцию:
| Эвалуатор | Продолжается в то время как |
|---|---|
CompletionMarkerLoopEvaluator |
Последний ответ не содержит настроенный маркер. |
TodoCompletionLoopEvaluator |
Разрешение TodoProvider по-прежнему имеет неполные элементы, при необходимости в выбранных режимах агента. |
BackgroundTaskCompletionLoopEvaluator |
Разрешенные BackgroundAgentsProvider задачи по-прежнему выполняются. |
AIJudgeLoopEvaluator |
Отдельный клиент судьи говорит, что исходный запрос не полностью ответен. |
DelegateLoopEvaluator |
Обратный вызов возвращается LoopEvaluation.Continue(...). |
При настройке нескольких вычислителей они выполняются по порядку. Первый вычислитель, запрашивающий другую итерацию, предоставляет свои отзывы; Цикл останавливается, только если все вычислители отказались от продолжения.
Использование судьи ИИ
Судья получает исходный запрос и последний ответ агента. Если он находит разрыв, его анализ становится обратной связью для следующей итерации:
var evaluator = new AIJudgeLoopEvaluator(
judgeClient,
new AIJudgeLoopEvaluatorOptions
{
Criteria =
[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
});
AIAgent loopAgent = new LoopAgent(
agent,
evaluator,
new LoopAgentOptions { MaxIterations = 4 });
Используйте только конечную точку судьи, доверяемую исходному запросу и созданному ответу.
Контекст управления и выходные данные
По умолчанию LoopAgent повторно использует один сеанс и отправляет последнюю обратную связь вычислителя в качестве следующего ввода.
FreshContextPerIteration = true вместо этого перестраивает каждый проход из исходного запроса, а также агрегированный журнал обратной связи и сбрасывает или восстанавливает сеанс.
Непотоковые запуски возвращают агрегированную расшифровку по умолчанию. Задайте NonStreamingReturnsLastResponseOnly = true для возврата только окончательного ответа. Потоковая передача всегда выдает каждую итерацию и любые видимые от имени сообщения обратной связи.
Предикат получает аргументы ключевых слов, включая iteration, , messageslast_result, original_messages, , agentsessionprogressи .feedback Вспомогательные функции todos_remaining() и background_tasks_running() предоставляют встроенные условия для выполнения и фоновой задачи. Связывание с ними todos_remaining_message или background_tasks_running_message создание целевых следующих входных данных.
Использование судьи ИИ
AgentLoopMiddleware.with_judge создает цикл на основе судьи. Циклы судьи по умолчанию — пять итераций:
from agent_framework import Agent, AgentLoopMiddleware
loop = AgentLoopMiddleware.with_judge(
judge_client,
criteria=[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
max_iterations=4,
)
agent = Agent(
client=client,
middleware=[loop],
)
Рассуждения судьи возвращаются агенту, когда требуется больше работы. Используйте только конечную точку судьи, доверяемую исходному запросу и созданному ответу.
Управление контекстом, ходом выполнения и выходными данными
Для расширенных циклов создайте AgentLoopMiddleware напрямую:
-
record_feedbackсоздает краткую запись хода выполнения после каждой итерации работы. -
progressпредоставляет накопленные записи для обратных вызовов. -
inject_progress=Trueдобавляет ход выполнения к входным данным следующей итерации. -
fresh_context=Trueперезапускается из исходной задачи и журнала хода выполнения и восстанавливает присоединенный сеанс к моментальному снимку перед циклом. -
return_final_only=Trueвозвращает только последний ответ для непотоковых запусков.
Передается max_iterations=None только в том случае, если предикат завершения гарантированно завершится.
Упакованные условия завершения и интеграция судьи, описанные на этой странице, в настоящее время недоступны в Go.
Использование циклов с агентом Use
Используйте настройку агента Use, если также требуется предварительно настроенный журнал, планирование, память, утверждение и наблюдаемость конвейера.
Задайте HarnessAgentOptions.LoopEvaluators. Ремень применяется LoopAgent в качестве самого внешнего декоратора агента:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var options = new HarnessAgentOptions
{
LoopEvaluators =
[
new CompletionMarkerLoopEvaluator("DONE"),
],
LoopAgentOptions = new LoopAgentOptions
{
MaxIterations = 5,
},
};
HarnessAgent agent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await agent.CreateSessionAsync();
Пустая или nullLoopEvaluators коллекция оставляет завязку одним выстрелом.
Поведение утверждения и сеанса
LoopAgent останавливается перед оценкой состояния завершения, когда итерация возвращает ожидающий запрос на утверждение средства. Он возвращает запрос вызывающему объекту вместо того, чтобы скрыть его за другой автономной итерацией. После того как вызывающий объект предоставляет ответ на утверждение через обычный поток утверждения средства , агент может продолжить работу.
LoopAgent не добавляет саму обработку утверждений. Агент Использования применяет цикл за пределами ToolApprovalAgent, что позволяет ожидающие запросы на утверждение избежать цикла.
Повторно используйте то же самое AgentSession в вызовах, чтобы продолжить беседу. Цикловые итерации по умолчанию используют этот сеанс. С FreshContextPerIteration = trueпомощью , LoopAgent сбрасывает или восстанавливает состояние сеанса, предоставленное вызывающим абонентом, где поддерживается. Хранилище бесед, принадлежащих службе, может хранить журнал, если сериализованный сеанс содержит только идентификатор удаленного диалога.
create_harness_agentВведите loop_should_continue значение ; loop_max_iterations по умолчанию — 10:
from agent_framework import create_harness_agent
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = create_harness_agent(
client=client,
loop_should_continue=needs_more_work,
loop_max_iterations=5,
)
session = agent.create_session()
loop_next_message настраивает следующие входные данные. Без этого loop_should_continueфабрика не добавляет цикл и игнорирует другие аргументы цикла.
Поведение утверждения и сеанса
AgentLoopMiddleware останавливается перед оценкой предиката продолжения, когда итерация возвращает ожидающий запрос на утверждение средства. Он возвращает запрос вызывающему объекту вместо того, чтобы скрыть его за другой автономной итерацией. После того как вызывающий объект предоставляет ответ на утверждение через обычный поток утверждения средства , агент может продолжить работу.
AgentLoopMiddleware не добавляет ToolApprovalMiddleware себя. Агент Использования помещает цикл вне по промежуточного слоя утверждения, что позволяет ожидающие запросы на утверждение избежать цикла. Создайте и передайте AgentSession все запускаемые агенты Использования во время автоматического утверждения средства.
Повторно используйте то же самое AgentSession в вызовах, чтобы продолжить беседу. Цикловые итерации по умолчанию используют этот сеанс. С помощью fresh_context=TrueПО промежуточного слоя восстанавливает присоединенный сеанс к моментальному снимку перед циклом между итерациями. Хранилище бесед, принадлежащих службе, может хранить журнал, если сериализованный сеанс содержит только идентификатор удаленного диалога.
Замечание
Циклы агента использования в настоящее время недоступны в Go, поэтому его утверждение и поведение сеанса не применяется.