Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Agenti na pozadí umožňují nadřazeným agentům delegovat nezávislé úlohy pojmenovaným podřízeným agentům. Každá úloha běží souběžně ve své vlastní relaci podřízeného agenta, zatímco nadřazený agent uchovává ID úlohy, které může použít k čekání, načtení výsledků, pokračování v práci na ní nebo k uvolnění úlohy.
Důležité
Agenti na pozadí jsou experimentální.
Agenti na pozadí se liší od odpovědí na pozadí. Odpověď na požadavek na pozadí představuje jeden požadavek vůči poskytovateli, jehož stav aplikace pravidelně zjišťuje nebo v jehož zpracování pokračuje. Úloha agenta běžícího na pozadí vyvolá jiného agenta v rámci Agent Framework a později vrátí textový výsledek tohoto agenta nadřazenému agentovi.
Ruční nastavení agentů na pozadí
Každý podřízený agent musí mít neprázdný název, který je jedinečný i bez rozlišení velkých a malých písmen. Dejte podřízeným agentům pouze konkrétní pokyny a jen ty nástroje, které potřebují pro svou svěřenou roli.
Importujte BackgroundAgentsProvider a přidejte ho do běžného agenta prostřednictvím ChatClientAgentOptions.AIContextProviders:
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 přizpůsobuje pokyny poskytovatele a formátování seznamu agentů.
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()
Předejte instructions= do BackgroundAgentsProvider a nahraďte jím jeho pokyny. Uveďte {background_agents} , kde by se měl zobrazit formátovaný seznam podřízených agentů.
wait_timeout_seconds nastaví, jak dlouho každé volání background_agents_wait_for_first_completion čeká. Musí to být kladné celé číslo a výchozí hodnota je 300 sekund. Pokud vyprší časový limit, nástroj se normálně ukončí a ponechá úlohy spuštěné, takže jej nadřazený proces může znovu zavolat.
Poznámka:
Předpřipravený poskytovatel agenta běžícího na pozadí popsaný na této stránce není v současné době pro Go k dispozici.
Životní cyklus úkolů
Poskytovatel přidá stejné modelem orientované nástroje do .NET a Python:
| nástroj | Akce životního cyklu |
|---|---|
background_agents_start_task |
Spusťte neblokovací úlohu u pojmenovaného agenta a vraťte její CELÉ ČÍSLO ID úlohy. |
background_agents_wait_for_first_completion |
Počkejte, až první úloha v zadané sadě dosáhne koncového stavu. |
background_agents_get_task_results |
Vrátí dokončený text, chybovou zprávu nebo aktuální stav. |
background_agents_get_all_tasks |
Vypište ID, stavy, jména agentů a popisy. |
background_agents_continue_task |
Spusťte další vstup v existující podřízené relaci po dokončení úkolu nebo po jeho selhání. |
background_agents_clear_completed_task |
Odeberte úlohu v terminálu a uvolněte její podřízenou relaci. |
Typická posloupnost rodičovského agenta je:
- Před čekáním spusťte každou nezávislou úlohu, aby se úlohy spouštěly souběžně.
- Počkejte na dokončení první úlohy, získejte její výsledek a opakujte, dokud neběží žádné úlohy.
- Pokračujte v dokončeném nebo neúspěšném úkolu, když následná práce potřebuje svůj stávající kontext konverzace.
- Po načtení výsledků vymažte úlohy terminálu, pokud v nich nebudete pokračovat.
Stav úkolu je running, completed, failednebo lost. Úloha se považuje za ztracenou, když není k dispozici její identifikátor úlohy v procesu nebo podřízená relace, například po restartu procesu nebo obnově relace. Metadata serializovatelných úloh můžou zůstat v nadřazené relaci, ale zpracování práce v letu a podřízené relace nepřežijí tuto hranici.
Poskytovatel nemá žádný nástroj pro zrušení. Nechte spuštěné úkoly dosáhnout stavu terminálu, než je vymažete.
Znovu použijte stejnou nadřazenou relaci napříč otočeními. Každý úkol má vyhrazenou dceřinou relaci. Pokračování v úloze v terminálu znovu použije tuto podřízenou relaci; její vymazání odstraní metadata úlohy a uvolní handle podřízené relace.
Výsledky úkolů se vrátí do nadřazeného objektu jako text. Poskytovatel nepřeposílá strukturovanou žádost podřízeného agenta o schválení nástroje zpět přes nadřazeného agenta, proto podřízené agenty nakonfigurujte tak, aby dokončily delegovanou práci bez interaktivního schvalování, nebo aby schvalování řešily v hostiteli podřízeného agenta.
Uvolněte nadřazenou relaci z hostitele
Poznámka:
Verze relace agenta na pozadí na straně hostitele není aktuálně dostupná v .NET.
Když hostitel vyřadí nebo zahodí nadřazenou relaci, uvolněte úlohu v procesu poskytovatele a obslužné rutiny podřízené relace v finally bloku:
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) je API pro správu životního cyklu na straně hostitele, nikoli nástroj určený pro model. Ve výchozím nastavení zruší běžící podřízené úlohy a před uvolněním veškerého stavu běhového prostředí pro nadřazenou relaci počká až 30 sekund na jejich zrušení. Nastavte cancel_running=False tak, aby se vydání odmítlo, dokud jsou spuštěné úlohy, nebo nastavte timeout=None na čekání na neurčito.
Naproti tomu background_agents_clear_completed_task umožňuje modelu během konverzace odebrat jednu úlohu terminálu a její podřízenou relaci. Odmítá běžící úlohy a nenahrazuje ukončení nadřazené relace na straně hostitele.
Poznámka:
Verze relace agenta na pozadí na straně hostitele není aktuálně dostupná v Go.
Automatické čekání přidejte ručně
Zabalte ručně složený nadřazený objekt s příponou LoopAgent.
BackgroundTaskCompletionLoopEvaluator pokračuje pouze, dokud je úloha ve stavu Running:
AIAgent loopingParent = new LoopAgent(
parentAgent,
new BackgroundTaskCompletionLoopEvaluator(),
new LoopAgentOptions { MaxIterations = 10 });
Vyhodnocovač se zastaví u dokončených, neúspěšných a ztracených úloh.
Přidejte AgentLoopMiddleware do běžného nadřazeného objektu a spárujte predikát úlohy na pozadí s pomocnou rutinou další zprávy:
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,
)
],
)
Predikát pokračuje pouze v době, kdy trvalý stav úkolu stále hlásí spuštěnou úlohu.
Automatická integrace smyčky úloh na pozadí není v současné době dostupná v Go.
Používejte agenty na pozadí s agentem Harness
Toto nastavení použijte, pokud chcete také využívat výchozí pipeline Harness Agentu pro plánování, paměť, schvalování a observabilitu.
Nastavte HarnessAgentOptions.BackgroundAgents. Přidejte vyhodnocovač dokončení, pokud má nadřazená úloha pokračovat v běhu, dokud delegovaná práce již nepoběží:
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();
Slouží HarnessAgentOptions.BackgroundAgentsProviderOptions k přizpůsobení pokynů zprostředkovatele a formátování seznamu agentů. Vynechání LoopEvaluators ponechá delegování na pozadí k dispozici bez automatického opětovného vyvolání.
Dodejte background_agents do create_harness_agent. Spárujte ho s ohraničenou smyčkou, když by nadřazený objekt měl automaticky čekat:
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()
Použijte background_agents_instructions k nahrazení pokynů poskytovatele.
background_agents_wait_timeout_seconds nakonfiguruje stejnou omezenou dobu čekání jako wait_timeout_seconds na BackgroundAgentsProvider. Pythonový harness ve výchozím nastavení povoluje middleware pro automatické schvalování nástrojů, proto při každém spuštění předejte session.
Poznámka:
Delegování na pozadí pro agenta Harness není v Go momentálně k dispozici.
Bezpečnostní aspekty
Zaregistrujte pouze podřízené agenty, kterým důvěřujete. Rodičovský prvek jim může poslat text odvozený ze soukromého nebo nedůvěryhodného kontextu a jejich výsledky se pak přidají zpět do kontextu rodičovského prvku. Napadená podřízená komponenta může exfiltrovat delegovaný vstup nebo vrátit obsah nepřímé prompt injection.