Ügynök hurkolása

Az ügynök hurkolásával újra meghívhat egy ügynököt, amíg a befejezési feltétel nem teljesül. Iteratív finomításhoz, todo befejezéshez, háttérfeladatokra való várakozáshoz vagy annak kiértékeléséhez, hogy a válasz megfelel-e explicit feltételeknek.

Mindig kötött autonóm hurkok. A befejezési feltétel meghiúsulhat, a modell elakadhat, és a kiértékelő probabilis lehet.

Important

Az ügynökhurkolás kísérleti jellegű.

Hurkok manuális beállítása

A közvetlen összeállítási API-t akkor használja, ha a többi Hámügynök alapértelmezett beállítása nélkül szeretne hurkot készíteni.

Importálja a huroktípusokat, és csomagolja azokat AIAgent a következővel LoopAgent: . Az alapértelmezett maximális érték 10 ügynökhívás:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
    baseAgent,
    new CompletionMarkerLoopEvaluator("DONE"),
    new LoopAgentOptions { MaxIterations = 5 });

Importálja AgentLoopMiddleware és adja hozzá egy normálhoz Agent. Az alapértelmezett maximum 10 ügynökfuttatás:

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,
        )
    ],
)

A predikátum lehet szinkron vagy aszinkron. Térjen vissza True a folytatáshoz, False a leállításhoz vagy (continue, feedback) a visszajelzés továbbadásához a következő iterációhoz.

Megjegyzés:

Az ezen a lapon ismertetett csomagolt hurkozási funkció jelenleg nem érhető el a Go-ban.

Befejezési feltétel kiválasztása

LoopAgent egy kiértékelőt vagy egy megrendelt gyűjteményt fogad el:

Értékelő Folytatódik, amíg
CompletionMarkerLoopEvaluator A legújabb válasz nem tartalmazza a konfigurált jelölőt.
TodoCompletionLoopEvaluator A feloldott TodoProvider elemek továbbra is hiányosak, opcionálisan a kiválasztott ügynök módban.
BackgroundTaskCompletionLoopEvaluator A feloldott BackgroundAgentsProvider feladatok továbbra is futnak.
AIJudgeLoopEvaluator Egy külön bírói ügyfél azt mondja, hogy az eredeti kérelemre nincs teljes válasz.
DelegateLoopEvaluator A visszahívás visszaadja a visszahívást LoopEvaluation.Continue(...).

Ha több kiértékelő van konfigurálva, azok sorrendben futnak. Az első kiértékelő, aki másik iterációt kér, visszajelzést ad; a hurok csak akkor áll le, ha az összes kiértékelő elutasítja a folytatást.

AI-bíró használata

A bíró megkapja az eredeti kérelmet és a legújabb ügynök választ. Ha rést talál, az elemzés visszajelzést ad a következő iterációhoz:

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 });

Csak olyan bírói végpontot használjon, amelyben megbízik az eredeti kéréssel és a létrehozott válaszsal.

Környezet és kimenet szabályozása

Alapértelmezés szerint újra felhasznál egy munkamenetet, LoopAgent és a nyertes kiértékelő legújabb visszajelzését küldi el a következő bemenetként. FreshContextPerIteration = true ehelyett újraépíti az eredeti kérés minden egyes pass-át, valamint egy összesített visszajelzési naplót, és visszaállítja vagy visszaállítja a munkamenetet.

A nem streamelt futtatások alapértelmezés szerint összesített átiratot adnak vissza. Állítsa be NonStreamingReturnsLastResponseOnly = true , hogy csak a végső választ adja vissza. A streamelés mindig minden iterációt és minden látható visszajelzési üzenetet bocsát ki.

A predikátum olyan kulcsszóargumentumokat kap, mint a iteration, last_result, messages, original_messages, session, agent, progressés feedback. A segítők todos_remaining() beépített background_tasks_running() teendőket és háttérfeladat-feltételeket biztosítanak. Párosítsa őket egy célzott következő bemenettel todos_remaining_message , vagy background_tasks_running_message hozza létre őket.

AI-bíró használata

AgentLoopMiddleware.with_judge bírói ciklust hoz létre. A bírói hurkok alapértelmezés szerint öt iterációt érnek el:

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],
)

A bíró érvelését vissza kell adni az ügynöknek, ha több munkára van szükség. Csak olyan bírói végpontot használjon, amelyben megbízik az eredeti kéréssel és a létrehozott válaszsal.

Környezet, folyamat és kimenet szabályozása

Speciális hurkok esetén közvetlenül a következőt kell létrehoznia AgentLoopMiddleware :

  • record_feedback az egyes munka iterációk után tömör folyamatbejegyzést hoz létre.
  • progress a halmozott bejegyzéseket visszahívások számára teszi elérhetővé.
  • inject_progress=True A következő iteráció bemenetéhez hozzáadja a haladást.
  • fresh_context=True újraindul az eredeti tevékenységről és a folyamatnaplóról, és visszaállít egy csatolt munkamenetet a ciklus előtti pillanatképére.
  • return_final_only=True csak a nem streamelt futtatásokra adott utolsó választ adja vissza.

Csak akkor adja át max_iterations=None , ha a befejezési predikátum garantáltan leáll.

Az ezen az oldalon ismertetett csomagolt befejezési feltételek és bírói integráció jelenleg nem érhető el a Go-ban.

Hurkok használata a Hámügynökkel

Használja a Hámügynök beállítását, ha előre konfigurált előzményeit, tervezését, memóriáját, jóváhagyását és megfigyelhetőségi folyamatát is szeretné.

HarnessAgentOptions.LoopEvaluatorsbeállítása. A hám a legkülső ügynök dekorátoraként alkalmazható 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();

Egy üres vagy nullLoopEvaluators gyűjtemény hagyja el a heveder egyetlen lövés.

Jóváhagyás és munkamenet viselkedése

LoopAgent a befejezési feltétel kiértékelése előtt leáll, amikor egy iteráció függőben lévő eszköz-jóváhagyási kérelmet ad vissza. A kérést a hívónak adja vissza ahelyett, hogy egy másik autonóm iteráció mögé rejtette volna. Miután a hívó a jóváhagyási választ a normál eszközjóváhagyási folyamaton keresztül szolgáltatja, az ügynök folytathatja a munkát.

LoopAgent nem adja hozzá magát a jóváhagyási kezelést. A Hámügynök kívül ToolApprovalAgentalkalmazza a hurkot, lehetővé téve a függőben lévő jóváhagyási kérések számára, hogy kikerüljenek a hurokból.

A beszélgetés folytatásához használja újra ugyanazt AgentSession a hívásokat. A ciklus iterációi alapértelmezés szerint megosztják ezt a munkamenetet. LoopAgent Ezzel FreshContextPerIteration = truealaphelyzetbe állítja vagy visszaállítja a hívó által megadott munkamenet-állapotot, ahol támogatott. A szolgáltatás tulajdonában lévő beszélgetési tár akkor őrizheti meg az előzményeket, ha a szerializált munkamenet csak távoli beszélgetésazonosítót tartalmaz.

create_harness_agentAz ; loop_should_continueloop_max_iterations alapértelmezett értéke 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 testre szabja a következő bemenetet. loop_should_continueNem, a gyár nem ad hozzá hurkot, és figyelmen kívül hagyja a többi hurokargumentumot.

Jóváhagyás és munkamenet viselkedése

AgentLoopMiddleware a folytatási predikátum kiértékelése előtt leáll, amikor egy iteráció függőben lévő eszköz-jóváhagyási kérelmet ad vissza. A kérést a hívónak adja vissza ahelyett, hogy egy másik autonóm iteráció mögé rejtette volna. Miután a hívó a jóváhagyási választ a normál eszközjóváhagyási folyamaton keresztül szolgáltatja, az ügynök folytathatja a munkát.

AgentLoopMiddleware nem adja hozzá ToolApprovalMiddleware magát. A Hámügynök a hurkot a jóváhagyási köztes szoftveren kívül helyezi, lehetővé téve a függőben lévő jóváhagyási kérések számára, hogy kikerüljenek a hurokból. Hozzon létre és adjon át minden AgentSession biztonságiszer-ügynököt, miközben az eszköz automatikus jóváhagyása engedélyezve van.

A beszélgetés folytatásához használja újra ugyanazt AgentSession a hívásokat. A ciklus iterációi alapértelmezés szerint megosztják ezt a munkamenetet. Ezzel fresh_context=Truea közbenső szoftver visszaállítja a csatolt munkamenetet az iterációk közötti ciklus előtti pillanatképére. A szolgáltatás tulajdonában lévő beszélgetési tár akkor őrizheti meg az előzményeket, ha a szerializált munkamenet csak távoli beszélgetésazonosítót tartalmaz.

Megjegyzés:

A Hámügynök hurkolása jelenleg nem érhető el a Go-ban, ezért a jóváhagyás és a munkamenet viselkedése nem érvényes.

Következő lépések

Mélyebbre ásás