Planung und Aufgaben

Zwei Kontextanbieter unterstützen lang andauernde Arbeit:

  • Ein Todo-Anbieter speichert nachverfolgbare Arbeitsaufgaben und bietet den Agent-Tools, um sie hinzuzufügen, abzuschließen, zu entfernen und zu prüfen.
  • Ein Agentmodusanbieter speichert den aktuellen Betriebsmodus und gibt den Agent-Tools zum Lesen oder Ändern.

Kombinieren Sie diese Anbieter direkt, wenn Sie nur Planung benötigen, oder verwenden Sie den Harness Agent, um beide als Teil seiner umfassenderen Standard-Pipeline zu aktivieren.

Todo-Tools

Die anbieter für .NET und Python machen die gleichen Modelltools verfügbar:

Tool Purpose
todos_add Fügen Sie ein oder mehrere Elemente mit einem Titel und optionaler Beschreibung hinzu.
todos_complete Markieren Sie mindestens ein Element als abgeschlossen, und schließen Sie einen Abschlussgrund ein.
todos_remove Entfernen Sie Elemente, die nicht mehr relevant sind.
todos_get_remaining Gibt unvollständige Elemente zurück.
todos_get_all Gibt vollständige und unvollständige Elemente zurück.

Der Anbieter fügt die aktuelle Todoliste vor jeder Ausführung ein, sodass der Agent ausstehende Arbeit fortsetzen kann.

Planungs- und Ausführungsmodi

AgentModeProvider bietet standardmäßig die Modi plan und execute:

  1. Der Plan ist interaktiv. Der Agent analysiert Anforderungen, erstellt Aufgaben, stellt klärende Fragen, präsentiert einen Plan und fragt, bevor er die Modi ändert.
  2. Ausführen ist autonom. Der Agent arbeitet den Plan ab, trifft bei unklaren Details plausible Entscheidungen und markiert To-dos als erledigt.

Der Anbieter stellt mode_get und mode_set bereit. Seine Anweisungen weisen das Modell an, mode_set nur dann zu verwenden, wenn der Benutzer den Übergang ausdrücklich erlaubt. Anwendungen können den Modus auch direkt ändern, wodurch der Anbieter eine Modusänderungsbenachrichtigung in die nächste Ausführung eingibt.

Planung und Aufgaben manuell einrichten

Importieren und initialisieren Sie die Provider und fügen Sie sie anschließend über ChatClientAgentOptions.AIContextProviders hinzu:

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

Anpassen von Modusnamen und Anweisungen mit AgentModeProviderOptions.Modes. Der .NET todo-Anbieter speichert den Zustand in AgentSession.StateBag. TodoProviderOptions kann seine Anweisungen ersetzen, die eingefügte Todo-Listennachricht unterdrücken oder einen benutzerdefinierten Nachrichten-Generator bereitstellen.

Die Standardanweisungen plan umfassen das Schreiben des Plans in den Dateispeicher. Wenn der manuell zusammengesetzte Agent keine Dateispeichertools bereitstellt, passen Sie die Modusanweisungen an, oder fügen Sie einen geeigneten Speicheranbieter hinzu.

Modi in der Anwendung ändern

await modeProvider.SetModeAsync(session, "execute");

Verwenden Sie GetModeAsync, um den aktuellen Modus zu lesen.

Importieren und erstellen Sie die Provider und fügen Sie sie dann einem normalen Agent-Element hinzu:

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 verwendet standardmäßig TodoSessionStore. Verwenden Sie TodoFileStore oder ein benutzerdefiniertes TodoStore, wenn der To-do-Status außerhalb der Sitzungsnutzlast gespeichert werden muss. Passen Sie Modi mit AgentModeProvider(mode_instructions={...}) an.

Die Standardanweisungen plan umfassen das Schreiben des Plans in den Dateispeicher. Wenn der manuell zusammengesetzte Agent keine Dateispeicher-Tools bereitstellt, passen Sie mode_instructions an oder fügen Sie einen geeigneten Speicheranbieter hinzu.

Modi in der Anwendung ändern

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

Die auf dieser Seite beschriebenen mitgelieferten Todo- und Agent-Mode-Anbieter sind in Go derzeit nicht verfügbar.

Führen Sie den Plan manuell vollständig aus.

Das Verfolgen von Todos zeichnet den Fortschritt auf, ruft den Agenten jedoch nicht von selbst erneut auf. Kombinieren Sie sie mit einer gebundenen Agentschleife , wenn der Ausführungsmodus fortgesetzt werden soll, bis jeder Todo abgeschlossen ist:

Schließen Sie den manuell zusammengesetzten Agent mit LoopAgent. TodoCompletionLoopEvaluator kann die Wiederholung auf ausgewählte Modi beschränken:

AIAgent loopingAgent = new LoopAgent(
    agent,
    new TodoCompletionLoopEvaluator(
        new TodoCompletionLoopEvaluatorOptions
        {
            Modes = ["execute"],
        }),
    new LoopAgentOptions { MaxIterations = 10 });

AgentLoopMiddleware zum regulären Agenten hinzufügen und todos_remaining() mit einem Modusfilter verwenden:

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

Eine TODO-gesteuerte Integration in Schleifen ist in Go derzeit nicht verfügbar.

Planung und Aufgaben mit dem Harness Agent verwenden

Verwenden Sie diese Konfiguration, wenn Sie außerdem die vorab konfigurierte Verlaufs-, Speicher-, Freigabe- und Observability-Pipeline des Harness-Agenten nutzen möchten.

HarnessAgent aktiviert TodoProvider und AgentModeProvider standardmäßig. Konfigurieren Sie den Modus-Anbieter und die optionale todo-gesteuerte Schleife über 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();

Legen Sie DisableTodoProvider oder DisableAgentModeProvider fest, um einen Standardanbieter zu entfernen. Um eine konfigurierte TodoProvider zu verwenden, deaktivieren Sie den Standard und fügen Sie Ihre Instanz über AIContextProviders hinzu. Sie können aktivierte Anbieter über agent.GetService<TProvider>() auflösen.

create_harness_agent aktiviert standardmäßig beide Anbieter. Konfigurierte Instanzen bereitstellen, um sie zu ersetzen, und eine optionale TODO-gesteuerte Schleife hinzufügen:

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

Legen Sie disable_todo oder disable_mode fest, um einen Standardanbieter zu entfernen. Das Python-Harness aktiviert standardmäßig die Middleware zur automatischen Genehmigung von Tools. Übergeben Sie daher bei jeder Ausführung session.

Note

Die Anbieter für Harness Agent Planning und To-dos sind in Go derzeit nicht verfügbar.

Sitzungsverhalten

Verwenden Sie dieselbe Sitzung über mehrere Gesprächswechsel hinweg. Der Modusstatus wird in beiden SDKs sitzungsbasiert gespeichert. Der .NET-Todo-Status wird in AgentSession.StateBag gespeichert; Python verwendet standardmäßig TodoSessionStore, während TodoFileStore oder ein benutzerdefiniertes TodoStore die Todo-Persistenz auslagern können.

Beim Ändern des Modus aus Anwendungscode wird eine einmalige Änderungsbenachrichtigung für die nächste Ausführung in die Warteschlange gestellt. Das modellgerichtete mode_set Tool stellt diese zusätzliche Benachrichtigung nicht in die Warteschlange, da das Modell bereits einen eigenen Toolaufruf beobachtet hat.

Die Bestätigung für den Übergang von der Planung zur Ausführung ist ein Verhalten auf Instruktionsebene, keine Anfrage zur Tool-Freigabe. Die Todo- und Modus-Tools selbst erfordern keine Genehmigung zum Aufrufen von Funktionen; der Anwendungscode kann Modi direkt ändern, wenn der Host bereits die erforderliche Berechtigung erhalten hat.

Nächste Schritte

Mehr erfahren