Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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_feedbackaz egyes munka iterációk után tömör folyamatbejegyzést hoz létre. -
progressa halmozott bejegyzéseket visszahívások számára teszi elérhetővé. -
inject_progress=Truehozzá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=Truenem 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ó.