Planowanie i dozowanie

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:

  1. Plan jest interaktywny. Agent analizuje wymagania, tworzy todos, zadaje wyjaśnienia pytań, przedstawia plan i zadaje pytania przed zmianą trybów.
  2. 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.

Następne kroki

Głębiej