Achtergrondagenten

Met achtergrondagents kan een bovenliggende agent onafhankelijke taken delegeren aan benoemde onderliggende agents. Elke taak wordt gelijktijdig uitgevoerd in een eigen onderliggende-agentsessie, terwijl het bovenliggende item een taak-id bewaart die kan worden gebruikt om te wachten, resultaten op te halen, door te gaan met werk of de taak vrij te geven.

Important

Achtergrondagenten zijn experimenteel.

Achtergrondagenten verschillen van achtergrondreacties. Een achtergrondantwoord vertegenwoordigt één provideraanvraag die door de toepassing wordt gepeild of hervat. Een achtergrondagenttaak roept een andere Agent Framework-agent aan en voert later het tekstresultaat van die agent terug naar het bovenliggende item.

Achtergrondagenten handmatig instellen

Elke onderliggende agent moet een niet-hoofdlettergevoelige, niet-hoofdlettergevoelige unieke naam hebben. Geef onderliggende agents gerichte instructies en alleen de hulpprogramma's die nodig zijn voor hun gedelegeerde rol.

Importeer BackgroundAgentsProvider en voeg het toe aan een normale agent via 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 hiermee worden de providerinstructies en de opmaak van de agentlijst aangepast.

from agent_framework import Agent, BackgroundAgentsProvider

background_provider = BackgroundAgentsProvider(
    [web_search_agent, code_analysis_agent]
)

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

Geef instructions= door om BackgroundAgentsProvider de instructies te vervangen. Neem op {background_agents} waar de lijst met opgemaakte onderliggende agents moet worden weergegeven.

Opmerking

De provider voor verpakte achtergrondagent die op deze pagina wordt beschreven, is momenteel niet beschikbaar in Go.

Levenscyclus van taken

De provider voegt dezelfde modelgerichte hulpprogramma's toe in .NET en Python:

Tool Levenscyclusactie
background_agents_start_task Start een niet-blokkeringstaak op een benoemde agent en retourneer de taak-id van het gehele getal.
background_agents_wait_for_first_completion Wacht totdat de eerste taak in een opgegeven set de terminalstatus bereikt.
background_agents_get_task_results Retourneer voltooide tekst, een foutbericht of de huidige status.
background_agents_get_all_tasks Lijst-id's, statussen, agentnamen en beschrijvingen.
background_agents_continue_task Voer opvolgende invoer uit in de bestaande onderliggende sessie nadat een taak is voltooid of mislukt.
background_agents_clear_completed_task Verwijder een terminaltaak en laat de onderliggende sessie los.

Een typische reeks bovenliggende agents is:

  1. Start elke onafhankelijke taak voordat u wacht, zodat de taken gelijktijdig worden uitgevoerd.
  2. Wacht tot de eerste voltooiing is voltooid, haal dat resultaat op en herhaal dit totdat er geen taken worden uitgevoerd.
  3. Ga door met een voltooide of mislukte taak wanneer het opvolgen van werk de bestaande gesprekscontext nodig heeft.
  4. Wis terminaltaken na het ophalen van de resultaten, tenzij ze worden voortgezet.

Taakstatus isrunning, completed, of failedlost. Een taak gaat verloren wanneer de in-process taakgreep of onderliggende sessie niet beschikbaar is, bijvoorbeeld nadat een proces opnieuw is opgestart of sessieherstel. Serialiseerbare taakmetagegevens kunnen in de bovenliggende sessie blijven, maar tijdens het werk en de onderliggende sessie-handles blijven deze grens niet overleven.

Er is geen annuleringsprogramma in de provider. Laat actieve taken een terminalstatus bereiken voordat u ze wist.

Gebruik dezelfde bovenliggende sessie om de beurt opnieuw. Elke taak ontvangt een toegewezen onderliggende sessie. Als u doorgaat met een terminaltaak, wordt die onderliggende sessie opnieuw gebruikt; als u deze wist, worden de metagegevens van de taak verwijderd en wordt de onderliggende sessiegreep vrijgegeven.

Taakresultaten worden als tekst naar het bovenliggende item geretourneerd. De provider proxyt niet de gestructureerde goedkeuringsaanvraag van een kind via het bovenliggende hulpprogramma, dus configureer onderliggende agents om gedelegeerd werk zonder interactieve goedkeuring te voltooien of hun goedkeuringen binnen de host van de onderliggende agent af te handelen.

Automatisch wachten handmatig toevoegen

Pak het handmatig samengestelde bovenliggende element terug met LoopAgent. BackgroundTaskCompletionLoopEvaluator wordt alleen voortgezet terwijl een taak de Running status heeft:

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

De evaluator stopt voor voltooide, mislukte en verloren taken.

Voeg AgentLoopMiddleware toe aan het normale bovenliggende item en koppel het predicaat voor de achtergrondtaak aan de helper van het volgende bericht:

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

Het predicaat wordt alleen voortgezet terwijl de persistente taakstatus nog steeds een actieve taak rapporteert.

Automatische integratie van achtergrondtaaklussen is momenteel niet beschikbaar in Go.

Achtergrondagents gebruiken met Harness Agent

Gebruik deze installatie wanneer u ook de standaardplanning, het geheugen, de goedkeuring en de waarneembaarheidspijplijn van de Harness-agent wilt gebruiken.

Stel HarnessAgentOptions.BackgroundAgentsin. Voeg de voltooiings evaluator toe wanneer het bovenliggende item actief moet blijven totdat gedelegeerd werk niet meer wordt uitgevoerd:

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

Hiermee HarnessAgentOptions.BackgroundAgentsProviderOptions kunt u de providerinstructies en de opmaak van de agentlijst aanpassen. Als u LoopEvaluators weglaat, blijft achtergronddelegering beschikbaar zonder automatische aanroep.

Leveren background_agents aan create_harness_agent. Koppel deze aan een gebonden lus wanneer het bovenliggende item automatisch moet wachten:

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],
    loop_should_continue=background_tasks_running(),
    loop_next_message=background_tasks_running_message,
    loop_max_iterations=10,
)
session = parent_agent.create_session()

Gebruik background_agents_instructions dit om de providerinstructies te vervangen. De Python harnas maakt het automatisch goedkeuren van hulpprogramma's standaard mogelijk, dus geef session elke uitvoering door.

Opmerking

Harness Agent-achtergronddelegering is momenteel niet beschikbaar in Go.

Beveiligingsoverwegingen

Registreer alleen onderliggende agents die u vertrouwt. De bovenliggende gebruiker kan tekst verzenden die is afgeleid van een privé- of niet-vertrouwde context en de resultaten worden weer toegevoegd aan de context van het bovenliggende item. Een gecompromitteerd kind kan gedelegeerde invoer exfiltreren of indirecte prompt-injectieinhoud retourneren.

Volgende stappen 

Dieper ingaan