Agenci w tle

Agenci w tle umożliwiają agentowi nadrzędnego delegowanie niezależnych zadań do nazwanych agentów podrzędnych. Każde zadanie jest uruchamiane współbieżnie w ramach własnej sesji podrzędnej agenta, podczas gdy element nadrzędny przechowuje identyfikator zadania, którego może użyć do oczekiwania, pobrania wyników, kontynuowania pracy lub zwolnienia zadania.

Ważna

Agenci w tle są eksperymentalni.

Agenci w tle różnią się od odpowiedzi w tle. Odpowiedź w tle reprezentuje jedno żądanie dostawcy, które aplikacja sonduje lub wznawia. Zadanie agenta w tle wywołuje innego agenta programu Agent Framework, a później przekaże wynik tekstowy tego agenta z powrotem do elementu nadrzędnego.

Ręczne konfigurowanie agentów w tle

Każdy agent podrzędny musi mieć unikatową nazwę bez uwzględniania wielkości liter. Przekaż podrzędnym agentom ukierunkowane instrukcje i tylko narzędzia potrzebne do ich delegowanej roli.

Zaimportuj BackgroundAgentsProvider i dodaj go do zwykłego agenta za pomocą polecenia 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 dostosowuje instrukcje dostawcy i formatowanie listy agentów.

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

Przekaż instructions= polecenie , aby BackgroundAgentsProvider zastąpić jego instrukcje. Uwzględnij {background_agents} miejsce, w którym powinna zostać wyświetlona sformatowana lista agentów podrzędnych.

Note

Spakowany dostawca agenta w tle opisany na tej stronie nie jest obecnie dostępny w języku Go.

Cykl życia zadania

Dostawca dodaje te same narzędzia oparte na modelu w .NET i Python:

Narzędzie Akcja cyklu życia
background_agents_start_task Uruchom zadanie nieblokujące na nazwanym agencie i zwróć jego identyfikator zadania całkowitego.
background_agents_wait_for_first_completion Poczekaj, aż pierwsze zadanie w podanym zestawie osiągnie stan terminalu.
background_agents_get_task_results Zwraca ukończony tekst, komunikat o błędzie lub bieżący stan.
background_agents_get_all_tasks Wyświetlanie listy identyfikatorów, stanów, nazw agentów i opisów.
background_agents_continue_task Uruchom kolejne dane wejściowe w istniejącej sesji podrzędnej po zakończeniu lub niepomyślnym wykonaniu zadania.
background_agents_clear_completed_task Usuń zadanie terminalu i zwolnij sesję podrzędną.

Typowa sekwencja agenta nadrzędnego to:

  1. Uruchom każde niezależne zadanie przed oczekiwaniem, więc zadania są uruchamiane współbieżnie.
  2. Poczekaj na pierwsze ukończenie, pobierz ten wynik i powtórz, aż żadne zadania nie będą uruchomione.
  3. Kontynuuj ukończone lub zakończone zadanie zakończone niepowodzeniem, gdy praca kontynuacji wymaga istniejącego kontekstu konwersacji.
  4. Wyczyść zadania terminalowe po pobraniu wyników, chyba że będą kontynuowane.

Stan zadania to running, , failedcompletedlub lost. Zadanie zostaje utracone, gdy jego dojście do zadania w procesie lub sesja podrzędna jest niedostępne, na przykład po ponownym uruchomieniu procesu lub przywróceniu sesji. Metadane zadań, które można serializować, mogą pozostać w sesji nadrzędnej, ale obsługa pracy w locie i sesji podrzędnej nie przetrwa tej granicy.

W dostawcy nie ma narzędzia anulowania. Niech uruchamianie zadań osiągnie stan terminalu przed ich wyczyszczeniem.

Ponownie użyj tej samej sesji nadrzędnej po kolei. Każde zadanie otrzymuje dedykowaną sesję podrzędną. Kontynuowanie zadania terminalu ponownie używa tej sesji podrzędnej; wyczyszczenie powoduje usunięcie metadanych zadania i wydanie dojścia sesji podrzędnej.

Wyniki zadania są zwracane do elementu nadrzędnego jako tekst. Dostawca nie proxy żądania zatwierdzenia narzędzia strukturalnego elementu podrzędnego za pośrednictwem elementu nadrzędnego, dlatego należy skonfigurować agentów podrzędnych do ukończenia delegowanej pracy bez interaktywnego zatwierdzenia lub obsługiwać zatwierdzenia wewnątrz hosta agenta podrzędnego.

Ręczne dodawanie automatycznego oczekiwania

Zawijaj ręcznie skomponowany element nadrzędny za pomocą polecenia LoopAgent. BackgroundTaskCompletionLoopEvaluator trwa tylko wtedy, gdy zadanie pozostaje w Running stanie:

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

Ewaluator zatrzymuje się dla ukończonych, zakończonych niepowodzeniem i utraconych zadań.

Dodaj AgentLoopMiddleware do zwykłego elementu nadrzędnego i połącz predykat zadania w tle z pomocnikiem następnej wiadomości:

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

Predykat jest kontynuowany tylko wtedy, gdy stan utrwalonego zadania nadal zgłasza uruchomione zadanie.

Automatyczna integracja pętli zadań w tle nie jest obecnie dostępna w języku Go.

Używanie agentów w tle z agentem uprzęży

Użyj tej konfiguracji, jeśli chcesz również użyć domyślnego potoku planowania, pamięci, zatwierdzenia i możliwości obserwowania agenta.

Ustaw wartość HarnessAgentOptions.BackgroundAgents. Dodaj ewaluator ukończenia, gdy element nadrzędny powinien działać do momentu, aż delegowanie pracy nie będzie już uruchomione:

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

Służy HarnessAgentOptions.BackgroundAgentsProviderOptions do dostosowywania instrukcji dostawcy i formatowania listy agentów. Pominięcie powoduje, że delegowanie LoopEvaluators w tle jest dostępne bez automatycznego ponownego wywołania.

Podaj background_agents wartość .create_harness_agent Połącz ją z powiązaną pętlą, gdy element nadrzędny powinien czekać automatycznie:

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

Użyj polecenia background_agents_instructions , aby zastąpić instrukcje dostawcy. Wykorzystanie Python umożliwia domyślne automatyczne zatwierdzanie oprogramowania pośredniczącego za pomocą narzędzia, więc przekazuje session każde uruchomienie.

Note

Delegowanie w tle agenta uprzęży nie jest obecnie dostępne w języku Go.

Zagadnienia dotyczące zabezpieczeń

Zarejestruj tylko zaufanych agentów podrzędnych. Element nadrzędny może wysyłać tekst pochodzący z prywatnego lub niezaufanego kontekstu, a ich wyniki są dodawane z powrotem do kontekstu elementu nadrzędnego. Naruszone elementy podrzędne mogą eksfiltrować delegowane dane wejściowe lub zwracać zawartość iniekcji pośredniego monitu.

Następne kroki

Głębiej