Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Uruchom każde niezależne zadanie przed oczekiwaniem, więc zadania są uruchamiane współbieżnie.
- Poczekaj na pierwsze ukończenie, pobierz ten wynik i powtórz, aż żadne zadania nie będą uruchomione.
- Kontynuuj ukończone lub zakończone zadanie zakończone niepowodzeniem, gdy praca kontynuacji wymaga istniejącego kontekstu konwersacji.
- 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.