Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Der Plan ist interaktiv. Der Agent analysiert Anforderungen, erstellt Todos, stellt Klarstellungsfragen, stellt einen Plan vor und stellt vor dem Ändern der Modi.
- 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.