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