Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Opakované spouštění agenta opakovaně spouští agenta, dokud není splněna podmínka dokončení. Můžete ho použít pro iterativní upřesnění, dokončení úkolů, čekání na úkoly na pozadí nebo vyhodnocení, jestli odpověď splňuje explicitní kritéria.
Autonomní smyčky vždy omezte. Podmínka dokončení může selhat, model může uvíznout a vyhodnocovač může být stochastický.
Důležité
Opakované běhy agenta jsou experimentální.
Nastavte opakování ručně
Použijte rozhraní API pro přímou kompozici, když chcete opakování bez ostatních výchozích nastavení agenta Harness.
Importujte typy smyček a obalte každý prvek AIAgent prvkem LoopAgent. Výchozí maximum je 10 volání agentů:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Importujte AgentLoopMiddleware a přidejte jej do běžného Agent. Výchozí maximum je 10 spuštění agenta:
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,
)
],
)
Predikát může být synchronní nebo asynchronní. Stisknutím True pokračujte, False zastavte nebo (continue, feedback) předejte zpětnou vazbu do další iterace.
Poznámka:
Předpřipravená funkce pro vytváření smyček popsaná na této stránce není v jazyce Go momentálně k dispozici.
Volba podmínky dokončení
LoopAgent přijímá jeden vyhodnocovače nebo seřazenou kolekci:
| Vyhodnocovač | Pokračuje, dokud |
|---|---|
CompletionMarkerLoopEvaluator |
Nejnovější odpověď neobsahuje nakonfigurovanou značku. |
TodoCompletionLoopEvaluator |
Vyřešené TodoProvider stále obsahuje neúplné položky, volitelně ve vybraných režimech agenta. |
BackgroundTaskCompletionLoopEvaluator |
Vyřešený BackgroundAgentsProvider má stále běžící úlohy. |
AIJudgeLoopEvaluator |
Samostatný klient rozhodčí služby uvádí, že původní žádost není plně zodpovězena. |
DelegateLoopEvaluator |
Vaše zpětné volání vrátí LoopEvaluation.Continue(...). |
Pokud je nakonfigurovaných více vyhodnocovačů, spustí se v pořadí. První hodnotitel, který požádá o další iteraci, poskytne svou zpětnou vazbu; smyčka se zastaví teprve tehdy, když všichni hodnotitelé odmítnou pokračovat.
Použití soudce AI
Soudce obdrží původní žádost a nejnovější odpověď agenta. Pokud najde mezeru, její analýza se stane zpětnou vazbou pro další iteraci:
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 });
Používejte pouze endpoint pro posuzování, kterému svěříte původní požadavek i vygenerovanou odpověď.
Kontext a výstup ovládacího prvku
Ve výchozím nastavení LoopAgent opakovaně používá jednu relaci a odešle jako další vstup nejnovější zpětnou vazbu vítězného hodnotitele.
FreshContextPerIteration = true místo toho znovu sestaví každé spuštění z původního požadavku spolu se souhrnným protokolem zpětné vazby a resetuje nebo obnoví relaci.
Nestreamovací běhy ve výchozím nastavení vracejí souhrnný přepis. Nastavte NonStreamingReturnsLastResponseOnly = true tak, aby se vrátila pouze konečná odpověď. Streamování vždy odesílá každou iteraci a všechny viditelné zástupné zprávy zpětné vazby.
Predikát přijímá argumenty klíčových slov, včetně iteration, last_result, messagesoriginal_messages, session, , agentprogressa feedback. Pomocníci todos_remaining() a background_tasks_running() poskytují vestavěné podmínky pro úkoly TODO a úlohy na pozadí. Spárujte je s todos_remaining_message nebo background_tasks_running_message a vygenerujte cílený další vstup.
Použití soudce AI
AgentLoopMiddleware.with_judge vytvoří smyčku řízenou hodnotitelem. Ve výchozím nastavení mají Judge loops pět iterací:
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],
)
Odůvodnění hodnotitele se předává zpět agentovi, když je potřeba další práce. Používejte pouze takový hodnoticí endpoint, kterému důvěřujete natolik, abyste mu svěřili původní požadavek a vygenerovanou odpověď.
Řízení kontextu, průběhu a výstupu
U pokročilých smyček vytvořte AgentLoopMiddleware přímo:
-
record_feedbackvytvoří stručnou položku průběhu po každé iteraci práce. -
progresszpřístupňuje nashromážděné položky funkcím zpětného volání. -
inject_progress=Truepřidá průběžný výsledek ke vstupu další iterace. -
fresh_context=Truese znovu spustí z původního úkolu a protokolu průběhu a obnoví připojenou relaci do stavu zachyceného ve snímku před smyčkou. -
return_final_only=Truevrátí pouze poslední odpověď pro nestreamovaná spuštění.
Předávejte max_iterations=None pouze tehdy, je-li zaručeno, že predikát dokončení skončí.
Předpřipravené podmínky dokončení a integrace hodnoticího systému popsané na této stránce momentálně nejsou v Go k dispozici.
Použití opakování s Harness Agent
Pokud chcete využít také předkonfigurovanou historii, plánování, paměť, schvalování a pipeline pro observabilitu agenta Harness, použijte jeho nastavení.
Nastavte HarnessAgentOptions.LoopEvaluators. Tento postroj se použije LoopAgent jako nejkrajnější dekorátor:
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();
Prázdná nebo nullLoopEvaluators kolekce způsobí, že postroj bude jednorázový.
Schválení a chování relace
LoopAgent se zastaví před vyhodnocením podmínky dokončení, pokud iterace vrátí nevyřízenou žádost o schválení nástroje. Vrátí požadavek volajícímu namísto toho, aby jej skryl za další autonomní iterací. Poté, co volající poskytne odpověď ke schválení prostřednictvím běžného procesu schválení nástroje, může agent pokračovat.
LoopAgent nepřidá samotné zpracování schválení. Harness Agent použije smyčku mimo ToolApprovalAgent, což umožní žádostem o schválení, které čekají na vyřízení, obejít smyčku.
Používejte stejné AgentSession napříč voláními, abyste mohli pokračovat v konverzaci. Iterace smyčky ve výchozím nastavení sdílejí danou relaci. Pomocí FreshContextPerIteration = trueLoopAgent resetuje nebo obnoví stav relace zadaný volajícím, je-li to podporováno. Úložiště konverzací vlastněných službou může uchovávat historii, pokud serializovaná relace obsahuje pouze identifikátor vzdálené konverzace.
Zadejte loop_should_continue až create_harness_agent; loop_max_iterations má výchozí hodnotu 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 přizpůsobí další zadání. Bez loop_should_continue továrna nepřidá cyklus a ignoruje ostatní argumenty cyklu.
Schválení a chování relace
AgentLoopMiddleware se zastaví před vyhodnocením podmínky pokračování, když iterace vrátí nevyřízený požadavek na schválení nástroje. Vrátí požadavek volajícímu, místo aby jej skryl za další autonomní iteraci. Poté, co volající poskytne odpověď na schválení prostřednictvím běžného postupu schvalování nástroje, může agent pokračovat.
AgentLoopMiddleware samo nepřidává ToolApprovalMiddleware. Harness Agent umisťuje smyčku mimo svou vrstvu middlewaru pro schvalování, takže čekající žádosti o schválení mohou smyčku obejít. Vytvořte a předejte AgentSession při každém běhu agenta Harness, když je povoleno automatické schvalování nástrojů.
Používejte stejné AgentSession v jednotlivých voláních, abyste pokračovali v konverzaci. Iterace smyčky ve výchozím nastavení sdílejí danou relaci. Pomocí fresh_context=True middleware mezi jednotlivými iteracemi obnoví připojenou relaci do stavu zachyceného ve snímku pořízeném před smyčkou. Úložiště konverzací vlastněných službou může uchovávat historii, pokud serializovaná relace obsahuje pouze identifikátor vzdálené konverzace.
Poznámka:
Smyčkování Harness Agentu není v současnosti pro Go dostupné, takže se na něj nevztahuje schvalování ani chování relace.