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.
Smyčka agenta znovu vyvolá agenta, dokud nebude 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.
Vždy vázané autonomní smyčky. Podmínka dokončení může selhat, model může zastavit a vyhodnocovače může být pravděpodobnostní.
Important
Smyčka agenta je experimentální.
Ruční nastavení smyčky
Rozhraní API pro přímé složení použijte, pokud chcete smyčku opakovat bez ostatních výchozích hodnot agenta využití.
Importujte typy smyček a zabalte je pomocí AIAgentLoopAgentpříkazu . 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 });
Naimportujte AgentLoopMiddleware ho a přidejte ho do běžného Agentrežimu . 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í. Pokud True chcete pokračovat, False zastavit nebo (continue, feedback) předat zpětnou vazbu k další iteraci.
Note
Funkce zabalené smyčky popsané na této stránce není aktuálně dostupná v Go.
Volba podmínky dokončení
LoopAgent přijímá jeden vyhodnocovače nebo seřazenou kolekci:
| Vyhodnocovač | Pokračuje v době, kdy |
|---|---|
CompletionMarkerLoopEvaluator |
Nejnovější odpověď neobsahuje nakonfigurovanou značku. |
TodoCompletionLoopEvaluator |
Vyřešené TodoProvider položky jsou stále neúplné, volitelně ve vybraných režimech agenta. |
BackgroundTaskCompletionLoopEvaluator |
Vyřešený problém stále obsahuje spuštěné BackgroundAgentsProvider úlohy. |
AIJudgeLoopEvaluator |
Samostatný soudce klient říká, že původní požadavek není plně zodpovězen. |
DelegateLoopEvaluator |
Vaše zpětné volání vrátí LoopEvaluation.Continue(...). |
Pokud je nakonfigurovaných více vyhodnocovačů, spustí se v pořadí. První vyhodnocovací, který požaduje další iteraci, poskytuje zpětnou vazbu; smyčka se zastaví pouze v případech, kdy všichni vyhodnocovače odmítli 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žijte pouze koncový bod soudce, kterému důvěřujete s původním požadavkem a vygenerovanou odpovědí.
Kontext a výstup ovládacího prvku
Ve výchozím nastavení LoopAgent znovu použije jednu relaci a odešle nejnovější zpětnou vazbu vítězného vyhodnocovače jako další vstup.
FreshContextPerIteration = true místo toho znovu sestaví každý průchod z původního požadavku a agregovaný protokol zpětné vazby a resetuje nebo obnoví relaci.
Spuštění bez streamování ve výchozím nastavení vrací agregovaný přepis. Nastaví NonStreamingReturnsLastResponseOnly = true se tak, aby se vrátila pouze konečná odpověď. Streamování vždy vysílá každou iteraci a všechny viditelné zprávy zpětné vazby jménem.
Predikát přijímá argumenty klíčových slov, včetně iteration, last_result, original_messagesmessages, session, , progressagenta feedback. Pomocní a todos_remaining()background_tasks_running() poskytují předdefinované podmínky úkolů a úkolů na pozadí. Spárujte je s cílovým dalším vstupem todos_remaining_message nebo background_tasks_running_message je vygenerujte.
Použití soudce AI
AgentLoopMiddleware.with_judge vytvoří smyčku řízenou soudcem. Ve výchozím nastavení se smyčky soudce nastaví na 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í soudce se vrací agentovi, když je vyžadováno více práce. Použijte pouze koncový bod soudce, kterému důvěřujete s původním požadavkem a vygenerovanou odpovědí.
Ří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. -
progresszveřejňuje kumulované položky zpětná volání. -
inject_progress=Truepřidá průběh vstupu další iterace. -
fresh_context=Truerestartuje z původního protokolu úkolu a průběhu a obnoví připojenou relaci do jejího snímku před smyčkou. -
return_final_only=Truevrátí pouze poslední odpověď pro nestreamovaná spuštění.
Předejte max_iterations=None pouze v případě, že je zaručeno ukončení predikátu dokončení.
Zabalené podmínky dokončení a integrace soudce popsané na této stránce nejsou aktuálně dostupné v Go.
Použití smyček s využitím agenta
Pokud chcete, aby se používala také předkonfigurovaná historie, plánování, paměť, schválení a kanál pozorovatelnosti, použijte nastavení Agenta.
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á kolekce nullLoopEvaluators ponechá jeden snímek postroje.
Chování schválení a relace
LoopAgent se zastaví před vyhodnocením podmínky dokončení, když iterace vrátí žádost o schválení čekajícím nástrojem. Vrátí požadavek volajícímu místo skrytí za jinou autonomní iterací. Po poskytnutí odpovědi volajícího prostřednictvím normálního toku schválení nástrojů může agent pokračovat.
LoopAgent nepřidá samotné zpracování schválení. Agent svazku použije smyčku mimo ToolApprovalAgent, což umožňuje čekající žádosti o schválení utéct smyčku.
Pokud chcete pokračovat v konverzaci, znovu použijte stejné AgentSession volání. Iterace smyčky ve výchozím nastavení sdílejí danou relaci. Pokud FreshContextPerIteration = trueje to podporováno, LoopAgent resetuje nebo obnoví stav relace zadané volajícím. Úložiště konverzací vlastněných službou může uchovávat historii, pokud serializovaná relace obsahuje pouze identifikátor vzdálené konverzace.
Zadat loop_should_continue do create_harness_agent; loop_max_iterations výchozí hodnota 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ší vstup. Ne , loop_should_continuetovárna nepřidá smyčku a ignoruje ostatní argumenty smyčky.
Chování schválení a relace
AgentLoopMiddleware zastaví před vyhodnocením predikátu pokračování, když iterace vrátí čekající žádost o schválení nástroje. Vrátí požadavek volajícímu místo skrytí za jinou autonomní iterací. Po poskytnutí odpovědi volajícího prostřednictvím normálního toku schválení nástrojů může agent pokračovat.
AgentLoopMiddleware nepřidá ToolApprovalMiddleware sám sebe. Agent svazku umístí smyčku mimo svůj schvalovací middleware, což umožňuje čekající žádosti o schválení utéct smyčku. Vytvořte a předejte AgentSession při každém spuštění agenta využití, zatímco je povolené automatické schvalování nástrojů.
Pokud chcete pokračovat v konverzaci, znovu použijte stejné AgentSession volání. Iterace smyčky ve výchozím nastavení sdílejí danou relaci. Middleware fresh_context=Trueobnoví připojenou relaci do jeho snímku před smyčkou mezi iteracemi. Úložiště konverzací vlastněných službou může uchovávat historii, pokud serializovaná relace obsahuje pouze identifikátor vzdálené konverzace.
Note
Smyčka využití agenta není v současné době dostupná v Go, takže její schválení a chování relace se nevztahuje.