Planung und Todos

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.

Verfassen Sie diese Anbieter direkt, wenn Sie nur eine Planung benötigen, oder verwenden Sie den Harness Agent, um beide als Teil der breiteren Standardpipeline zu aktivieren.

Todo-Tools

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

Werkzeug 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.

Planen und Ausführen von Modi

AgentModeProvider Lieferungen plan und execute Modi standardmäßig:

  1. Der Plan ist interaktiv. Der Agent analysiert Anforderungen, erstellt Todos, stellt Klarstellungsfragen, stellt einen Plan vor und stellt vor dem Ändern der Modi.
  2. Ausführen ist autonom. Der Agent arbeitet durch den Plan, trifft angemessene Entscheidungen, wenn Details mehrdeutig sind, und markiert todos abgeschlossen.

Der Anbieter macht mode_get verfügbar und mode_set. Seine Anweisungen weisen das Modell nur dann auf, mode_set wenn der Benutzer den Übergang explizit zulässt. Anwendungen können den Modus auch direkt ändern, wodurch der Anbieter eine Modusänderungsbenachrichtigung in die nächste Ausführung eingibt.

Manuelles Einrichten von Planung und Todos

Importieren und konstruieren Sie die Anbieter, und fügen Sie sie dann über 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();

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.

Ändern von Modi aus der Anwendung

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

Wird GetModeAsync verwendet, um den aktuellen Modus zu lesen.

Importieren und konstruieren Sie die Anbieter, und fügen Sie sie dann zu einem regulären AgentElement 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 wird standardmäßig verwendet TodoSessionStore . Verwenden Sie TodoFileStore einen benutzerdefinierten TodoStore Todo-Zustand, der außerhalb der Sitzungsnutzlast gespeichert werden muss. Passen Sie Modi mit AgentModeProvider(mode_instructions={...}).

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

Ändern von Modi aus der Anwendung

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 gepackten Todo- und Agentmodusanbieter sind derzeit in Go nicht verfügbar.

Manuelles Ausführen des Plans

Todo tracking records progress but doesn't by itself re-invoke the agent. 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 schleifen auf ausgewählte Modi einschränken:

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

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

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

Todogesteuerte Schleifenintegration ist derzeit in Go nicht verfügbar.

Verwenden von Planung und Todos mit Dem Harness Agent

Verwenden Sie dieses Setup, wenn Sie auch den vorkonfigurierten Verlauf, den Speicher, die Genehmigung und die Observability-Pipeline des Harness-Agents verwenden möchten.

HarnessAgent aktiviert TodoProvider und AgentModeProvider standardmäßig. Konfigurieren Des Modusanbieters und optionaler Todo-gesteuerter Schleifendurchlauf 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();

Festlegen DisableTodoProvider oder DisableAgentModeProvider Entfernen eines Standardanbieters. Um eine konfigurierte TodoProviderZu verwenden, deaktivieren Sie die Standardeinstellung, und fügen Sie Ihre Instanz über AIContextProviders. Sie können aktivierte Anbieter über agent.GetService<TProvider>().

create_harness_agent aktiviert standardmäßig beide Anbieter. Stellen Sie konfigurierte Instanzen bereit, um sie zu ersetzen und eine optionale todogesteuerte Schleife hinzuzufü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()

Festlegen disable_todo oder disable_mode Entfernen eines Standardanbieters. Die Python-Nutzung ermöglicht standardmäßig die Middleware für die automatische Genehmigung von Tools. Übergeben session Sie daher jede Ausführung.

Note

Die Agent-Planung und Todo-Anbieter sind derzeit in Go nicht verfügbar.

Sitzungsverhalten

Verwenden Sie die gleiche Sitzung über Wendungen. Der Modusstatus wird in beiden SDKs sitzungsgesichert. .NET Todo-Zustand wird gespeichert;AgentSession.StateBagTodoSessionStore Python verwendet standardmäßig, während TodoFileStore oder eine benutzerdefinierte TodoStore Todo-Persistenz externisieren kann.

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 auf Plan-zu-Ausführung ist das Verhalten auf Anweisungsebene, keine Toolgenehmigungsanforderung. Die Aufgaben- und Modustools selbst erfordern keine Funktionsgenehmigung; Der Anwendungscode kann Modi direkt ändern, wenn Ihr Host bereits die erforderliche Berechtigung erhalten hat.

Nächste Schritte

Mehr erfahren