Háttérügynökök

A háttérügynökök lehetővé teszik, hogy a szülőügynök független feladatokat delegáljon nevesített gyermekügynököknek. Minden tevékenység párhuzamosan fut a saját gyermekügynök-munkamenetében, míg a szülő megtart egy tevékenységazonosítót, amellyel várakozhat, lekérheti az eredményeket, folytathatja a munkát, vagy felengedheti a feladatot.

Important

A háttérügynökök kísérletiek.

A háttérügynökök eltérnek a háttérválaszoktól. A háttérválasz egy szolgáltatói kérést jelöl, amelyet az alkalmazás lekérdez vagy folytat. Egy háttérügynök-feladat meghív egy másik Agent Framework-ügynököt, majd később visszaadja annak szöveges eredményét a szülőfolyamatnak.

Háttérügynökök manuális beállítása

Minden gyermekügynöknek egyedi névvel kell rendelkeznie. A gyermekügynököknek célzott utasításokat és csak a delegált szerepkörükhöz szükséges eszközöket kell megadniuk.

Importáljon BackgroundAgentsProvider elemet, és adja hozzá egy normál ügynökhöz a(z) ChatClientAgentOptions.AIContextProviders használatával:

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

var backgroundProvider = new BackgroundAgentsProvider(
    [webSearchAgent, codeAnalysisAgent]);

AIAgent parentAgent = chatClient.AsAIAgent(new ChatClientAgentOptions
{
    Name = "research-coordinator",
    AIContextProviders = [backgroundProvider],
});

AgentSession session = await parentAgent.CreateSessionAsync();

BackgroundAgentsProviderOptions testre szabja a szolgáltató utasításait és az ügynöklista formázását.

from agent_framework import Agent, BackgroundAgentsProvider

background_provider = BackgroundAgentsProvider(
    [web_search_agent, code_analysis_agent],
    wait_timeout_seconds=30,
)

parent_agent = Agent(
    client=client,
    name="research-coordinator",
    context_providers=[background_provider],
)
session = parent_agent.create_session()

Adja át a(z) instructions= elemet a(z) BackgroundAgentsProvider számára az utasításainak lecseréléséhez. Szúrja be a(z) {background_agents} elemet oda, ahol az alügynökök formázott listájának meg kell jelennie.

wait_timeout_seconds beállítja, hogy a(z) background_agents_wait_for_first_completion minden egyes hívása mennyi ideig várjon. Pozitív egész számnak kell lennie, és alapértelmezés szerint 300 másodpercig. Ha az időtúllépés lejár, az eszköz normál módon tér vissza, és hagyja futni a feladatokat, így a szülő újra meghívhatja.

Megjegyzés:

Az ezen a lapon ismertetett csomagolt háttérügynök-szolgáltató jelenleg nem érhető el a Go-ban.

Tevékenység életciklusa

A szolgáltató ugyanazokat, a modell felé irányuló eszközöket teszi elérhetővé a .NET és a Python esetében:

Eszköz Életciklus-művelet
background_agents_start_task Elindít egy nem blokkoló feladatot egy elnevezett ügynökön, és visszaadja a feladat egész szám típusú azonosítóját.
background_agents_wait_for_first_completion Várjon, amíg a megadott halmaz első feladata végállapotot ér el.
background_agents_get_task_results Kész szöveget, hibaüzenetet vagy aktuális állapotot ad vissza.
background_agents_get_all_tasks Azonosítók, állapotok, ügynöknevek és leírások listázása.
background_agents_continue_task Futtassa a nyomon követési bemenetet a meglévő gyermek munkamenetben, miután egy feladat befejeződött vagy meghiúsult.
background_agents_clear_completed_task Távolítsa el a terminálfeladatot, és engedje fel a gyermek munkamenetét.

Egy tipikus szülő-ügynök szekvencia a következő:

  1. Várakozás előtt indítsa el az összes független tevékenységet, így a tevékenységek párhuzamosan futnak.
  2. Várja meg az elsőként befejeződő feladatot, kérje le annak eredményét, és ismételje ezt addig, amíg nem fut egyetlen feladat sem.
  3. Ha az utómunkának szüksége van a meglévő beszélgetési környezetére, folytassa a befejezett vagy sikertelen feladatokat.
  4. Törölje a terminálfeladatokat az eredmények lekérése után, hacsak nem folytatja őket.

A tevékenység állapota running, completedfailedvagy lost. Egy feladat elveszik, ha a folyamatban lévő feladatkezelője vagy a gyermek munkamenete nem érhető el, például a folyamat újraindítása vagy a munkamenet visszaállítása után. A szerializálható tevékenység metaadatai megmaradhatnak a szülő munkamenetben, de a repülés közbeni munka és a gyermekmunkamenet-kezelők nem élik túl ezt a határt.

Nincs lemondási eszköz a szolgáltatóban. Hagyja, hogy a futó feladatok végállapotba kerüljenek, mielőtt törli őket.

Ugyanazt a szülő munkamenetet használja újra a váltások között. Minden tevékenység kap egy dedikált gyermek munkamenetet. Egy terminálfeladat folytatása újrafelhasználja azt a gyermekmunkamenetet; annak törlése eltávolítja a feladat metaadatait, és felszabadítja a gyermekmunkamenet-kezelőt.

A rendszer a feladat eredményeit szövegként adja vissza a szülőnek. A szolgáltató nem továbbítja a gyermekügynök strukturált eszközjóváhagyási kérelmét a szülőügynökön keresztül, ezért a gyermekügynököket úgy konfigurálja, hogy interaktív jóváhagyás nélkül végezzék el a delegált feladatot, vagy a jóváhagyást a gyermekügynök gazdagépén belül kezeljék.

Szülő munkamenet felszabadítása a gazdagépről

Megjegyzés:

A gazdagépoldali háttérügynök-munkamenet felszabadítása jelenleg nem érhető el a .NET-ben.

Amikor a gazda eltávolít vagy elvet egy szülőmunkamenetet, szabadítsa fel a szolgáltató folyamatban lévő feladatának és gyermekmunkamenetének fogópontjait egy finally blokkban:

session = parent_agent.create_session()
try:
    await parent_agent.run("Coordinate the research.", session=session)
finally:
    await background_provider.release_session(session)

release_session(session, *, cancel_running=True, timeout=30.0) egy gazdagépoldali életciklus API, nem modellalapú eszköz. Alapértelmezés szerint megszakítja a futó gyermekfeladatokat, és akár 30 másodpercig is várakozik a lemondásra, mielőtt a szülő munkamenet összes futásidejű állapotát felszabadítja. Állítsa be cancel_running=False a kiadás elutasítására a tevékenységek futtatása közben, vagy állítsa timeout=None be a határozatlan ideig történő várakozást.

Ezzel szemben a background_agents_clear_completed_task lehetővé teszi, hogy a modell egy terminálfeladatot és annak gyermekmunkamenetét eltávolítsa egy beszélgetés során. Megtagadja a futó feladatok végrehajtását, és nem helyettesíti a gazdagépoldali szülő-munkamenet megszüntetését.

Megjegyzés:

A gazdagépoldali háttérügynök munkamenetének kiadása jelenleg nem érhető el a Go-ban.

Automatikus várakozás manuális hozzáadása

A manuálisan összeállított szülő körbefuttatása a következővel LoopAgent: . BackgroundTaskCompletionLoopEvaluator csak akkor folytatódik, ha egy tevékenység állapotban Running marad:

AIAgent loopingParent = new LoopAgent(
    parentAgent,
    new BackgroundTaskCompletionLoopEvaluator(),
    new LoopAgentOptions { MaxIterations = 10 });

A kiértékelő leáll a befejezett, a sikertelen és az elveszett tevékenységeknél.

Adja hozzá AgentLoopMiddleware a normál szülőhöz, és párosítsa a háttérfeladat-predikátumot a következő üzenet segédjével:

from agent_framework import (
    Agent,
    AgentLoopMiddleware,
    background_tasks_running,
    background_tasks_running_message,
)

parent_agent = Agent(
    client=client,
    context_providers=[background_provider],
    middleware=[
        AgentLoopMiddleware(
            background_tasks_running(),
            next_message=background_tasks_running_message,
            max_iterations=10,
        )
    ],
)

A predikátum csak addig marad érvényben, amíg a mentett feladatállapot továbbra is futó feladatot jelez.

A háttérfeladat-ciklus automatikus integrációja jelenleg nem támogatott a Go nyelvben.

Háttérügynökök használata a Harness Agenttel

Ezt a beállítást akkor használja, ha a Harness Agent alapértelmezett tervezési, memória-, jóváhagyási és megfigyelési folyamatát is használni szeretné.

Beállítás HarnessAgentOptions.BackgroundAgents. Adja hozzá a befejezési kiértékelőt, amikor a szülőnek futnia kell, amíg a delegált munka már nem fut:

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

var options = new HarnessAgentOptions
{
    Name = "research-coordinator",
    BackgroundAgents = [webSearchAgent, codeAnalysisAgent],
    LoopEvaluators = [new BackgroundTaskCompletionLoopEvaluator()],
    LoopAgentOptions = new LoopAgentOptions { MaxIterations = 10 },
};

HarnessAgent parentAgent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await parentAgent.CreateSessionAsync();

A szolgáltatói utasítások és az ügynöklista formázásának testreszabására használható HarnessAgentOptions.BackgroundAgentsProviderOptions . A(z) LoopEvaluators elhagyása automatikus újbóli meghívás nélkül is elérhetővé teszi a háttérdelegálást.

Adja meg a(z) background_agents elemet a create_harness_agent számára. Ha a szülőnek automatikusan várnia kell, párosítsa egy határolt hurokkal:

from agent_framework import (
    background_tasks_running,
    background_tasks_running_message,
    create_harness_agent,
)

parent_agent = create_harness_agent(
    client=client,
    name="research-coordinator",
    background_agents=[web_search_agent, code_analysis_agent],
    background_agents_wait_timeout_seconds=30,
    loop_should_continue=background_tasks_running(),
    loop_next_message=background_tasks_running_message,
    loop_max_iterations=10,
)
session = parent_agent.create_session()

A szolgáltató utasításainak lecserélésére használható background_agents_instructions . background_agents_wait_timeout_seconds ugyanazt a korlátozott várakozást konfigurálja, mint a wait_timeout_secondsBackgroundAgentsProvider esetén. A Python-keretrendszer alapértelmezés szerint engedélyezi az eszközök automatikus jóváhagyását végző köztes szoftvert, ezért minden futtatáskor add meg a session kapcsolót.

Megjegyzés:

A Harness Agent háttérben történő delegálása jelenleg nem érhető el Go esetén.

Biztonsági megfontolások

Csak megbízható gyermekügynököket regisztráljon. A szülő küldhet nekik privát vagy nem megbízható környezetből származó szöveget, és az eredmények visszakerülnek a szülő környezetéhez. A sérült gyermek képes kiszűrni a delegált bemenetet, vagy közvetett gyorsinjektálási tartalmat ad vissza.

Következő lépések

Mélyebbre ásás