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.
Dwóch dostawców kontekstu obsługuje długotrwałą pracę:
- Dostawca zadań do wykonania przechowuje możliwe do śledzenia elementy robocze i udostępnia narzędzia agenta do dodawania, uzupełniania, usuwania i inspekcji.
- Dostawca trybu agenta przechowuje bieżący tryb operacyjny i udostępnia narzędzia agenta do jego odczytu lub zmiany.
Utwórz tych dostawców bezpośrednio, gdy potrzebujesz tylko planowania, lub użyj agenta uprzężenia, aby włączyć oba te elementy w ramach szerszego potoku domyślnego.
Narzędzia do wykonania
Dostawcy .NET i Python uwidaczniają te same narzędzia oparte na modelu:
| Narzędzie | Purpose |
|---|---|
todos_add |
Dodaj co najmniej jeden element z tytułem i opcjonalnym opisem. |
todos_complete |
Oznacz co najmniej jeden element jako ukończony i dołącz przyczynę ukończenia. |
todos_remove |
Usuń elementy, które nie są już istotne. |
todos_get_remaining |
Zwraca niekompletne elementy. |
todos_get_all |
Zwróć ukończone i niekompletne elementy. |
Dostawca wprowadza bieżącą listę zadań do wykonania przed każdym uruchomieniem, aby agent mógł wznowić zaległą pracę.
Planowanie i wykonywanie trybów
AgentModeProvider domyślnie dostarcza plan i execute tryby:
- Plan jest interaktywny. Agent analizuje wymagania, tworzy todos, zadaje wyjaśnienia pytań, przedstawia plan i zadaje pytania przed zmianą trybów.
- Wykonywanie jest autonomiczne. Agent działa zgodnie z planem, dokonuje rozsądnych wyborów, gdy szczegóły są niejednoznaczne, a znaczniki todos complete.
Dostawca uwidacznia mode_get i mode_set. Jego instrukcje informują model o użyciu mode_set tylko wtedy, gdy użytkownik jawnie zezwala na przejście. Aplikacje mogą również bezpośrednio zmieniać tryb, co powoduje, że dostawca wprowadza powiadomienie o zmianie trybu w następnym uruchomieniu.
Ręczne konfigurowanie planowania i zadania do wykonania
Zaimportuj i skonstruuj dostawców, a następnie dodaj ich za pomocą polecenia ChatClientAgentOptions.AIContextProviders:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var todoProvider = new TodoProvider();
var modeProvider = new AgentModeProvider(
new AgentModeProviderOptions
{
DefaultMode = "plan",
});
AIAgent agent = chatClient.AsAIAgent(new ChatClientAgentOptions
{
AIContextProviders = [todoProvider, modeProvider],
});
AgentSession session = await agent.CreateSessionAsync();
Dostosowywanie nazw trybów i instrukcji za pomocą polecenia AgentModeProviderOptions.Modes. Dostawca zadań do wykonania .NET przechowuje stan w pliku AgentSession.StateBag.
TodoProviderOptions program może zastąpić instrukcje, pominąć wstrzyknięty komunikat listy zadań do wykonania lub udostępnić niestandardowego konstruktora komunikatów.
plan Domyślne instrukcje obejmują zapisanie planu w pamięci pliku. Jeśli ręcznie skomponowany agent nie udostępnia narzędzi pamięci plików, dostosuj instrukcje trybu lub dodaj odpowiedniego dostawcę pamięci.
Zmienianie trybów z aplikacji
await modeProvider.SetModeAsync(session, "execute");
Użyj GetModeAsync polecenia , aby odczytać bieżący tryb.
Zaimportuj i skonstruuj dostawców, a następnie dodaj je do zwykłego Agentelementu :
from agent_framework import (
Agent,
AgentModeProvider,
TodoFileStore,
TodoProvider,
)
todo_provider = TodoProvider(
store=TodoFileStore("./todo-state"),
)
mode_provider = AgentModeProvider(
default_mode="plan",
)
agent = Agent(
client=client,
context_providers=[todo_provider, mode_provider],
)
session = agent.create_session()
TodoProvider używa TodoSessionStore domyślnie. Użyj TodoFileStore polecenia lub niestandardowego TodoStore , gdy stan wykonania musi być przechowywany poza ładunkiem sesji. Dostosowywanie trybów za pomocą polecenia AgentModeProvider(mode_instructions={...}).
plan Domyślne instrukcje obejmują zapisanie planu w pamięci pliku. Jeśli ręcznie skomponowany agent nie udostępnia narzędzi pamięci plików, dostosuj mode_instructions lub dodaj odpowiedniego dostawcę pamięci.
Zmienianie trybów z aplikacji
from agent_framework import get_agent_mode, set_agent_mode
set_agent_mode(
session,
"execute",
source_id=mode_provider.source_id,
available_modes=mode_provider.available_modes,
)
current_mode = get_agent_mode(
session,
source_id=mode_provider.source_id,
default_mode=mode_provider.default_mode,
available_modes=mode_provider.available_modes,
)
Note
Spakowane dostawcy zadań do wykonania i trybu agenta opisane na tej stronie nie są obecnie dostępne w języku Go.
Ręczne uruchamianie planu do ukończenia
Śledzenie zadań do wykonania rejestruje postęp, ale nie powoduje ponownego wywołania agenta. Połącz ją z powiązaną pętlą agenta , gdy tryb wykonywania powinien być kontynuowany do momentu ukończenia każdego zadania do wykonania:
Opakuj ręcznie skomponowanego agenta za pomocą polecenia LoopAgent.
TodoCompletionLoopEvaluator może ograniczyć pętlę do wybranych trybów:
AIAgent loopingAgent = new LoopAgent(
agent,
new TodoCompletionLoopEvaluator(
new TodoCompletionLoopEvaluatorOptions
{
Modes = ["execute"],
}),
new LoopAgentOptions { MaxIterations = 10 });
Dodaj AgentLoopMiddleware do zwykłego agenta i użyj todos_remaining() go z filtrem trybu:
from agent_framework import (
Agent,
AgentLoopMiddleware,
todos_remaining,
todos_remaining_message,
)
agent = Agent(
client=client,
context_providers=[todo_provider, mode_provider],
middleware=[
AgentLoopMiddleware(
todos_remaining(looping_modes=["execute"]),
next_message=todos_remaining_message,
max_iterations=10,
)
],
)
Integracja pętli todo-driven nie jest obecnie dostępna w języku Go.
Korzystanie z planowania i zadań do wykonania z użyciem agenta platformy Harness
Użyj tej konfiguracji, jeśli chcesz również mieć wstępnie skonfigurowaną historię, pamięć, zatwierdzenie i potok możliwości obserwacji agenta.
HarnessAgent włącza TodoProvider i AgentModeProvider domyślnie. Skonfiguruj dostawcę trybu i opcjonalną pętlę todo-driven za pomocą elementu HarnessAgentOptions:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var options = new HarnessAgentOptions
{
AgentModeProviderOptions = new AgentModeProviderOptions
{
DefaultMode = "plan",
},
LoopEvaluators =
[
new TodoCompletionLoopEvaluator(
new TodoCompletionLoopEvaluatorOptions
{
Modes = ["execute"],
}),
],
LoopAgentOptions = new LoopAgentOptions { MaxIterations = 10 },
};
HarnessAgent agent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await agent.CreateSessionAsync();
Ustaw DisableTodoProvider lub DisableAgentModeProvider usuń domyślnego dostawcę. Aby użyć skonfigurowanego TodoProviderelementu , wyłącz wartość domyślną i dodaj wystąpienie za pomocą polecenia AIContextProviders. Możesz rozwiązać problemy z włączonymi dostawcami za pomocą usługi agent.GetService<TProvider>().
create_harness_agent włącza domyślnie obu dostawców. Podaj skonfigurowane wystąpienia, aby je zastąpić i dodać opcjonalną pętlę sterowaną do wykonania:
from agent_framework import (
AgentModeProvider,
TodoFileStore,
TodoProvider,
create_harness_agent,
todos_remaining,
todos_remaining_message,
)
todo_provider = TodoProvider(store=TodoFileStore("./todo-state"))
mode_provider = AgentModeProvider(default_mode="plan")
agent = create_harness_agent(
client=client,
todo_provider=todo_provider,
mode_provider=mode_provider,
loop_should_continue=todos_remaining(looping_modes=["execute"]),
loop_next_message=todos_remaining_message,
loop_max_iterations=10,
)
session = agent.create_session()
Ustaw disable_todo lub disable_mode usuń domyślnego dostawcę. Wykorzystanie Python umożliwia domyślne automatyczne zatwierdzanie oprogramowania pośredniczącego za pomocą narzędzia, więc przekazuje session każde uruchomienie.
Note
Planowanie agenta i dostawcy zadań do wykonania nie są obecnie dostępne w języku Go.
Zachowanie sesji
Użyj tej samej sesji na zakrętach. Stan trybu jest oparty na sesji w obu zestawach SDK. .NET stan wykonania jest przechowywany w programie AgentSession.StateBag; Python używa TodoSessionStore domyślnie, podczas gdy TodoFileStore lub niestandardowy TodoStore może zewnętrznie wykonywać trwałość.
Zmiana trybu z kolejki kodu aplikacji powiadomienie o zmianie trybu jednorazowego dla następnego uruchomienia. Narzędzie oparte na mode_set modelu nie powoduje kolejki tego dodatkowego powiadomienia, ponieważ model już zaobserwował własne wywołanie narzędzia.
Potwierdzenie wykonania planu jest zachowaniem na poziomie instrukcji, a nie żądaniem zatwierdzenia narzędzia. Same narzędzia do wykonania i trybu nie wymagają zatwierdzenia funkcji; kod aplikacji może zmieniać tryby bezpośrednio, gdy host uzyskał już wymagane uprawnienie.