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.
Dwaj dostawcy kontekstu obsługują operacje długotrwałe:
- 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.
Skonfiguruj tych dostawców bezpośrednio, gdy potrzebujesz tylko planowania, lub użyj Harness Agent, aby włączyć obu w ramach jego szerszego domyślnego potoku.
Narzędzia do zadań
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 |
Zwróć 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ę.
Tryby planowania i wykonywania
AgentModeProvider domyślnie dostarcza plan i execute tryby:
- Plan jest interaktywny. Agent analizuje wymagania, tworzy listę zadań, zadaje pytania doprecyzowujące, przedstawia plan i pyta przed zmianą trybu.
- Wykonywanie jest autonomiczne. Agent realizuje plan, dokonuje rozsądnych wyborów, gdy szczegóły są niejednoznaczne, i oznacza zadania jako ukończone.
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.
Skonfiguruj ręcznie planowanie i zadania
Zaimportuj i utwórz dostawców, a następnie dodaj ich za pomocą elementu 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 listy zadań .NET przechowuje stan w AgentSession.StateBag.
TodoProviderOptions może zastąpić swoje instrukcje, pominąć wstrzyknięty komunikat z listą zadań do wykonania lub zdefiniować niestandardowy kreator 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, aby odczytać bieżący tryb.
Zaimportuj i utwórz providery, a następnie dodaj je do zwykłego elementu Agent:
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 lub niestandardowego TodoStore, gdy stan zadania do wykonania musi być przechowywany poza ładunkiem danych 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,
)
Pomiń available_modes, aby użyć wbudowanych trybów plan i execute. Jeśli przekażesz available_modes, musi on zawierać co najmniej jeden tryb; pusta sekwencja powoduje zgłoszenie wyjątku ValueError, zanim stan sesji zostanie zmieniony.
Narzędzia trybu sterowania z aplikacji
Ukryj narzędzie trybu wbudowanego, gdy aplikacja dostarcza własny interfejs użytkownika lub narzędzie do obsługi modelu:
mode_provider = AgentModeProvider(
default_mode="plan",
expose_mode_set=False,
expose_mode_get=False,
)
Dwie opcje są niezależne i domyślnie mają wartość True. Ukrycie obu narzędzi zachowuje stan trybu powiązany z sesją, instrukcje dla poszczególnych tur oraz zewnętrzne powiadomienia o zmianie trybu. Dodaj zastępcze narzędzie udostępniane modelowi przez argument tools agenta i spraw, aby wywoływało set_agent_mode(..., notify=False), ponieważ model już obserwuje wynik działania tego narzędzia.
Zmiany aplikacji lub interfejsu użytkownika mogą zachować wartość domyślną notify=True , aby agent odbierał powiadomienie o zmianie podczas następnego uruchomienia.
Uwaga / Notatka
Opisani na tej stronie wbudowani dostawcy todo i trybu agenta nie są obecnie dostępni dla Go.
Uruchom plan ręcznie do końca
Śledzenie zadań do wykonania rejestruje postęp, ale nie powoduje ponownego wywołania agenta. Połącz ją z ograniczoną pętlą agenta, gdy tryb wykonywania ma być kontynuowany, aż wszystkie zadania do wykonania zostaną ukończone:
Otocz ręcznie skomponowanego agenta elementem 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 standardowego agenta i użyj todos_remaining() 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.
Używaj planowania i list zadań za pomocą agenta Harness
Użyj tej konfiguracji, jeśli chcesz także skorzystać ze wstępnie skonfigurowanych mechanizmów historii, pamięci, zatwierdzania i potoku obserwowalności agenta Harness.
HarnessAgent włącza TodoProvider i AgentModeProvider domyślnie. Skonfiguruj dostawcę trybu i opcjonalną pętlę sterowaną listą zadań 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 TodoProvider, wyłącz ustawienie domyślne i dodaj swoją instancję za pomocą 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. Dostarcz skonfigurowane instancje w celu ich zastąpienia i dodaj opcjonalną pętlę sterowaną przez todo:
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ę. Mechanizm uruchomieniowy Pythona domyślnie włącza middleware automatycznego zatwierdzania narzędzi, dlatego przy każdym uruchomieniu przekaż session.
Uwaga / Notatka
Planowanie agenta Harness i dostawcy list zadań nie są obecnie dostępne dla języka Go.
Zachowanie sesji
Używaj tej samej sesji w kolejnych turach. Stan trybu jest utrzymywany w ramach sesji w obu pakietach SDK. Stan zadań do wykonania w platformie .NET jest przechowywany w AgentSession.StateBag; Python domyślnie używa TodoSessionStore, podczas gdy TodoFileStore lub niestandardowy TodoStore mogą przenieść trwałe przechowywanie stanu zadań na zewnątrz.
Zmiana trybu z poziomu kodu aplikacji powoduje umieszczenie w kolejce jednorazowego powiadomienia o zmianie trybu przy następnym uruchomieniu. Narzędzie przeznaczone dla modelu mode_set nie umieszcza tego dodatkowego powiadomienia w kolejce, ponieważ model widział już własne wywołanie narzędzia.
Potwierdzenie przejścia do wykonania planu jest działaniem na poziomie instrukcji, a nie prośbą o zatwierdzenie użycia narzędzia. Same w sobie narzędzia todo i mode nie wymagają zatwierdzenia wywołania funkcji; kod aplikacji może bezpośrednio zmieniać tryby, jeśli host uzyskał już wymagane uprawnienia.