Smyčka agenta

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_feedback vytvoří stručnou položku průběhu po každé iteraci práce.
  • progress zveřejňuje kumulované položky zpětná volání.
  • inject_progress=True přidá průběh vstupu další iterace.
  • fresh_context=True restartuje 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=True vrá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.

Další kroky

Zjistit více