Planning en todos

Twee contextproviders ondersteunen langlopend werk:

  • Een takenprovider slaat traceerbare werkitems op en biedt de agenthulpprogramma's om ze toe te voegen, te voltooien, te verwijderen en te inspecteren.
  • Een provider van de agentmodus slaat de huidige bedrijfsmodus op en geeft de agenthulpprogramma's om deze te lezen of te wijzigen.

Stel deze providers rechtstreeks samen wanneer u alleen planning nodig hebt of gebruik de Harness Agent om beide in te schakelen als onderdeel van de bredere standaardpijplijn.

Takenhulpmiddelen

De .NET- en Python providers maken dezelfde modelgerichte hulpprogramma's beschikbaar:

Tool Purpose
todos_add Voeg een of meer items toe met een titel en een optionele beschrijving.
todos_complete Markeer een of meer voltooide items en voeg een voltooiingsreden toe.
todos_remove Items verwijderen die niet meer relevant zijn.
todos_get_remaining Retourneer onvolledige items.
todos_get_all Retourneer voltooide en onvolledige items.

De provider injecteert de huidige takenlijst vóór elke uitvoering, zodat de agent uitstekend werk kan hervatten.

Plan- en uitvoeringsmodi

AgentModeProvider biedt standaard de modi plan en execute:

  1. Plan is interactief. De agent analyseert de vereisten, stelt een takenlijst op, stelt verhelderende vragen, presenteert een plan en vraagt om bevestiging voordat het van modus verandert.
  2. Uitvoeren is autonoom. De agent werkt het plan af, maakt redelijke keuzes wanneer details niet eenduidig zijn en markeert taken als voltooid.

De aanbieder biedt mode_get en mode_set aan. In de instructies staat dat het model mode_set alleen mag gebruiken wanneer de gebruiker de overgang expliciet toestaat. Toepassingen kunnen de modus ook rechtstreeks wijzigen, waardoor de provider een melding over de moduswijziging in de volgende uitvoering injecteert.

De planning en taken handmatig instellen

Importeer en bouw de providers en voeg ze vervolgens toe via 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();

Modusnamen en instructies aanpassen met AgentModeProviderOptions.Modes. De .NET todo-provider slaat de status op in AgentSession.StateBag. TodoProviderOptions kan de instructies vervangen, het geïnjecteerde takenlijstbericht onderdrukken of een aangepaste berichtopbouwfunctie instellen.

De standaardinstructies plan omvatten het schrijven van het plan naar het bestandsgeheugen. Als de handmatig samengestelde agent geen hulpprogramma's voor bestandsgeheugen biedt, past u de modusinstructies aan of voegt u een geschikte geheugenprovider toe.

Modi wijzigen in de toepassing

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

Gebruik GetModeAsync dit om de huidige modus te lezen.

Importeer en construeer de providers en voeg ze vervolgens toe aan een standaard 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 maakt standaard gebruik TodoSessionStore van. Gebruik TodoFileStore of een aangepaste TodoStore als de todo-status buiten de sessie-payload moet worden opgeslagen. Modi aanpassen met AgentModeProvider(mode_instructions={...}).

De standaardinstructies plan omvatten het schrijven van het plan naar het bestandsgeheugen. Als de handmatig samengestelde agent geen hulpprogramma's voor bestandsgeheugen biedt, kunt u een geschikte geheugenprovider aanpassen mode_instructions of toevoegen.

Modi wijzigen via de toepassing

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

Opmerking

De verpakte todo- en agentmodusproviders die op deze pagina worden beschreven, zijn momenteel niet beschikbaar in Go.

Het plan handmatig uitvoeren

Het bijhouden van taken registreert de voortgang, maar roept de agent niet opnieuw aan. Combineer deze met een gebonden agentlus wanneer de uitvoeringsmodus moet worden voortgezet totdat elke taak is voltooid:

Verpakt de handmatig samengestelde agent met LoopAgent. TodoCompletionLoopEvaluator kan het herhalen beperken tot geselecteerde modi:

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

Toevoegen AgentLoopMiddleware aan de normale agent en gebruiken todos_remaining() met een modusfilter:

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

De integratie van de todo-gestuurde lus is momenteel niet beschikbaar in Go.

Planning en taken gebruiken met Harness Agent

Gebruik deze installatie wanneer u ook de vooraf geconfigureerde geschiedenis, het geheugen, de goedkeuring en de waarneembaarheidspijplijn van de Harness Agent wilt gebruiken.

HarnessAgent schakelt TodoProvider en AgentModeProvider standaard in. Configureer de provider voor de modus en de optionele to-do-gestuurde lus via 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();

Stel DisableTodoProvider of DisableAgentModeProvider in om een standaardprovider te verwijderen. Als u een geconfigureerde TodoProviderfunctie wilt gebruiken, schakelt u de standaardinstelling uit en voegt u uw exemplaar toe via AIContextProviders. U kunt ingeschakelde providers oplossen via agent.GetService<TProvider>().

create_harness_agent schakelt beide providers standaard in. Specificeer geconfigureerde instanties om ze te vervangen en voeg een optionele todo-gestuurde lus toe:

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

Stel disable_todo of disable_mode in om een standaardprovider te verwijderen. De Python-wrapper schakelt standaard middleware voor automatische goedkeuring van tools in, dus geef session bij elke uitvoering mee.

Opmerking

Harness Agent planning en todo providers zijn momenteel niet beschikbaar in Go.

Sessiegedrag

Gebruik dezelfde sessie om de beurt. De modusstatus wordt ondersteund door sessies in beide SDK's. .NET todo-status wordt opgeslagen in AgentSession.StateBag; Python standaard gebruiktTodoSessionStore, terwijl TodoFileStore of een aangepaste TodoStore todo-persistentie kan externaliseren.

Als u de modus wijzigt vanuit toepassingscode, wordt er een eenmalige melding over moduswijziging weergegeven voor de volgende uitvoering. Het modelgerichte mode_set hulpprogramma zet die extra melding niet in de wachtrij omdat het model al een eigen toolaanroep heeft waargenomen.

De plan-to-execute-bevestiging is gedrag op instructieniveau, niet een goedkeuringsaanvraag voor hulpprogramma's. Voor de todo- en modushulpprogramma's zelf is geen functiegoedkeuring vereist; toepassingscode kan modi rechtstreeks wijzigen wanneer uw host de vereiste machtiging al heeft verkregen.

Volgende stappen 

Dieper ingaan