Hintergrund-Agents

Hintergrund-Agents ermöglichen es einem übergeordneten Agent, unabhängige Aufgaben an benannte untergeordnete Agents zu delegieren. Jede Aufgabe wird gleichzeitig in einer eigenen untergeordneten Agent-Sitzung ausgeführt, während das übergeordnete Element eine Aufgaben-ID behält, die zum Warten, Abrufen von Ergebnissen, Fortsetzen der Arbeit oder Freigeben der Aufgabe verwendet werden kann.

Important

Hintergrund-Agents sind experimentell.

Hintergrund-Agents unterscheiden sich von Hintergrundantworten. Eine Hintergrundantwort stellt eine Anbieteranforderung dar, die von der Anwendung abgerufen oder fortgesetzt wird. Eine Hintergrund-Agent-Aufgabe ruft einen anderen Agent-Framework-Agent und spätere Feeds auf, die das Textergebnis des Agents zurück zum übergeordneten Element führen.

Manuelles Einrichten von Hintergrund-Agents

Jeder untergeordnete Agent muss einen nicht ordnungsgemäßen, eindeutigen Namen ohne Groß-/Kleinschreibung aufweisen. Geben Sie untergeordneten Agents gezielte Anweisungen und nur die Tools, die für ihre delegierte Rolle erforderlich sind.

Importieren BackgroundAgentsProvider und hinzufügen sie zu einem regulären Agent über 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 passt die Anbieteranweisungen und die Agentlistenformatierung an.

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

Übergeben Sie instructions= die Anweisungen, BackgroundAgentsProvider um ihre Anweisungen zu ersetzen. Geben Sie an {background_agents} , wo die formatierte untergeordnete Agent-Liste angezeigt werden soll.

Note

Der auf dieser Seite beschriebene gepackte Hintergrund-Agent-Anbieter ist derzeit in Go nicht verfügbar.

Aufgabenlebenszyklus

Der Anbieter fügt die gleichen modellorientierten Tools in .NET und Python hinzu:

Werkzeug Lebenszyklusaktion
background_agents_start_task Starten Sie einen vorgang ohne Blockierung für einen benannten Agent, und geben Sie die ganzzahlige Vorgangs-ID zurück.
background_agents_wait_for_first_completion Warten Sie, bis der erste Vorgang in einem angegebenen Satz einen Terminalstatus erreicht.
background_agents_get_task_results Geben Sie abgeschlossenen Text, eine Fehlermeldung oder den aktuellen Status zurück.
background_agents_get_all_tasks Auflisten von IDs, Status, Agentnamen und Beschreibungen.
background_agents_continue_task Führen Sie die Nachverfolgungseingabe in der vorhandenen untergeordneten Sitzung aus, nachdem eine Aufgabe abgeschlossen wurde oder fehlschlägt.
background_agents_clear_completed_task Entfernen Sie eine Terminalaufgabe, und lassen Sie die untergeordnete Sitzung los.

Eine typische Parent-Agent-Sequenz ist:

  1. Starten Sie alle unabhängigen Aufgaben, bevor Sie warten, sodass die Aufgaben gleichzeitig ausgeführt werden.
  2. Warten Sie auf den ersten Abschluss, rufen Sie das Ergebnis ab, und wiederholen Sie den Vorgang, bis keine Aufgaben ausgeführt werden.
  3. Setzen Sie eine abgeschlossene oder fehlgeschlagene Aufgabe fort, wenn die Nachverfolgungsarbeit den vorhandenen Unterhaltungskontext benötigt.
  4. Löschen Sie Terminalaufgaben nach dem Abrufen ihrer Ergebnisse, es sei denn, sie werden fortgesetzt.

Der Vorgangsstatus ist running, completed, , failedoder lost. Eine Aufgabe geht verloren, wenn das In-Process-Aufgabenhandle oder die untergeordnete Sitzung nicht verfügbar ist, z. B. nach einem Prozessneustart oder einer Sitzungswiederherstellung. Serialisierbare Aufgabenmetadaten können in der übergeordneten Sitzung verbleiben, aber Arbeits- und Untergeordnete Sitzungshandles überleben diese Grenze nicht.

Es gibt kein Abbruchtool im Anbieter. Lassen Sie die Ausführung von Aufgaben einen Terminalzustand erreichen, bevor Sie sie löschen.

Verwenden Sie die gleiche übergeordnete Sitzung über Wendungen hinweg wieder. Jede Aufgabe empfängt eine dedizierte untergeordnete Sitzung. Durch fortsetzen einer Terminalaufgabe wird diese untergeordnete Sitzung wiederverwendet; Durch das Löschen werden die Aufgabenmetadaten entfernt und das Handle für untergeordnete Sitzungen freigegeben.

Aufgabenergebnisse werden als Text an das übergeordnete Element zurückgegeben. Der Anbieter proxyt die strukturierte Toolgenehmigungsanforderung eines Kinds nicht über das übergeordnete Element zurück. Konfigurieren Sie daher untergeordnete Agents so, dass delegierte Aufgaben ohne interaktive Genehmigung abgeschlossen oder ihre Genehmigungen innerhalb des Untergeordneten Agent-Hosts verarbeitet werden.

Manuelles Warten hinzufügen

Schließen Sie das manuell verfasste übergeordnete Element mit LoopAgent. BackgroundTaskCompletionLoopEvaluator wird nur fortgesetzt, während ein Vorgang im Running Zustand verbleibt:

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

Der Auswertungsvorgang wird für abgeschlossene, fehlgeschlagene und verlorene Vorgänge beendet.

Fügen Sie dem regulären übergeordneten Element hinzu, und koppeln Sie AgentLoopMiddleware das Hintergrundaufgaben-Prädikat mit dem Hilfsprogramm für die nächste Nachricht:

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

Das Prädikat wird nur fortgesetzt, während der permanente Aufgabenstatus weiterhin eine ausgeführte Aufgabe meldet.

Die automatische Integration von Hintergrundaufgabenschleifen ist derzeit in Go nicht verfügbar.

Verwenden von Hintergrund-Agents mit "Harness Agent"

Verwenden Sie dieses Setup, wenn Sie auch die Standardplanung, den Arbeitsspeicher, die Genehmigung und die Observability-Pipeline des Harness Agents verwenden möchten.

Legen Sie HarnessAgentOptions.BackgroundAgents fest. Fügen Sie den Abschluss-Evaluator hinzu, wenn das übergeordnete Element weiter ausgeführt werden soll, bis delegierte Arbeit nicht mehr ausgeführt wird:

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

Wird verwendet HarnessAgentOptions.BackgroundAgentsProviderOptions , um Anbieteranweisungen und Agentlistenformatierungen anzupassen. Beim Auslassen LoopEvaluators bleibt die Hintergrunddelegierung ohne automatische Erneutes Aufrufen verfügbar.

Lieferung background_agents an create_harness_agent. Koppeln Sie sie mit einer gebundenen Schleife, wenn das übergeordnete Element automatisch warten soll:

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

Wird verwendet background_agents_instructions , um die Anbieteranweisungen zu ersetzen. Die Python-Nutzung ermöglicht standardmäßig die Middleware für die automatische Genehmigung von Tools. Übergeben session Sie daher jede Ausführung.

Note

Die Agent-Hintergrunddelegierung ist derzeit in Go nicht verfügbar.

Sicherheitsüberlegungen

Registrieren Sie nur untergeordnete Agents, die Sie als vertrauenswürdig einstufen. Das übergeordnete Element kann sie aus privatem oder nicht vertrauenswürdigen Kontext abgeleiteten Text senden, und ihre Ergebnisse werden wieder zum Kontext des übergeordneten Elements hinzugefügt. Ein kompromittiertes untergeordnetes Element kann delegierte Eingaben exfiltrieren oder indirekte Eingabeaufforderungseinfügungsinhalte zurückgeben.

Nächste Schritte

Mehr erfahren