Ügynök hurkolása

Az ügynök ismételt futtatása mindaddig újra meghívja az ügynököt, amíg egy 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.

Az autonóm ciklusokat mindig korlátozza. 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 kompozíciós API-t akkor használja, ha a Harness Agent egyéb alapértelmezett beállításai nélkül szeretne ismétlést.

Importálja a ciklustípusokat, és foglalja bármelyik AIAgent elemet LoopAgent elembe. 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 a(z) AgentLoopMiddleware-t, és adja hozzá egy normál Agent-hez. Az alapértelmezett maximális érték 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 megoldott BackgroundAgentsProvider még mindig futó feladatokkal rendelkezik.
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ási függvény ezt adja vissza: 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 az ügynök legutóbbi válaszát. 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 todos_remaining() és background_tasks_running() segítők beépített todo és background-task feltételeket biztosítanak. Párosítsa őket a todos_remaining_message vagy background_tasks_running_message elemmel egy célzott következő bevitel létrehozásához.

AI-bíró használata

AgentLoopMiddleware.with_judge egy judge által vezérelt ciklust hoz létre. A bírálóciklusok alapértelmezés szerint öt iterációval futnak:

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 hozzáadja az előrehaladást a következő iteráció bemenetéhez.
  • fresh_context=True újraindul az eredeti feladat és az előrehaladási napló alapján, és visszaállítja a csatolt munkamenetet a ciklus előtti állapotára.
  • return_final_only=True nem streamelő futtatások esetén csak az 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.

Ciklusok használata a Harness Agenttel

Használja a Harness Agent beállítást, ha az előre konfigurált előzményeket, tervezést, memóriát, jóváhagyást és megfigyelhetőségi folyamatot is szeretné használni.

Beállítás HarnessAgentOptions.LoopEvaluators. 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 a munkamenet működé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 önmagában nem ad hozzá jóváhagyáskezelést. A Harness Agent a ciklust a ToolApprovalAgent elemen kívül alkalmazza, így a függőben lévő jóváhagyási kérelmek ki tudnak kerülni a ciklusból.

A beszélgetés folytatásához használja újra ugyanazt a AgentSession elemet a hívások során. A ciklus iterációi alapértelmezés szerint megosztják ezt a munkamenetet. FreshContextPerIteration = true Ezzel LoopAgentalaphelyzetbe á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.

Adja meg a(z) loop_should_continue és create_harness_agent értéket; a(z) loop_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_continue nélkül a gyár nem ad hozzá ciklust, és figyelmen kívül hagyja a többi ciklusargumentumot.

Jóváhagyás és a munkamenet működé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 önmagát. A Harness Agent a hurkot a jóváhagyási middleware-en kívülre helyezi, így a függőben lévő jóváhagyási kérelmek kikerülhetnek a hurokból. Hozzon létre és adjon meg egy AgentSession elemet a Harness Agent minden futtatásakor, amikor az eszköz automatikus jóváhagyása engedélyezve van.

A beszélgetés folytatásához használja ugyanazt a AgentSession elemet a hívások között. 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 Harness Agent ciklusos működése jelenleg nem érhető el Go esetén, ezért a jóváhagyási és munkamenet-viselkedése nem alkalmazható.

Következő lépések

Mélyebbre ásás