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.
Dieses Dokument bietet einen ausführlichen Einblick in die Edges-Komponente des Microsoft Agent Framework-Workflowsystems.
Überblick
Edges definieren, wie Nachrichten zwischen Executoren mit optionalen Bedingungen ablaufen. Sie stellen die Verbindungen im Workflowdiagramm dar und bestimmen die Datenflusspfade.
Typen von Kanten
Das Framework unterstützt mehrere Edgemuster:
- Direct Edges: Einfache 1:1-Verbindungen zwischen Executoren
- Bedingte Kanten: Kanten mit Bedingungen, die bestimmen, wann Nachrichten fließen sollen
- Verteilen von Kanten: Ein Executor, der Nachrichten an mehrere Ziele sendet
- Fan-In-Edges: Mehrere Executoren, die Nachrichten an ein einzelnes Ziel senden
Direkte Kanten
Die einfachste Form der Verbindung zwischen zwei Ausführenden:
using Microsoft.Agents.AI.Workflows;
WorkflowBuilder builder = new(sourceExecutor);
builder.AddEdge(sourceExecutor, targetExecutor);
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Bedingte Kanten
Edges, die nur aktiviert werden, wenn bestimmte Bedingungen erfüllt sind:
// Route based on message content
builder.AddEdge(
source: spamDetector,
target: emailProcessor,
condition: result => result is SpamResult spam && !spam.IsSpam
);
builder.AddEdge(
source: spamDetector,
target: spamHandler,
condition: result => result is SpamResult spam && spam.IsSpam
);
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(spam_detector, email_processor, condition=lambda result: isinstance(result, SpamResult) and not result.is_spam)
builder.add_edge(spam_detector, spam_handler, condition=lambda result: isinstance(result, SpamResult) and result.is_spam)
builder.set_start_executor(spam_detector)
workflow = builder.build()
Switch-Case-Kanten
Weiterleiten von Nachrichten an verschiedene Executoren basierend auf Bedingungen:
builder.AddSwitch(routerExecutor, switchBuilder =>
switchBuilder
.AddCase(
message => message.Priority < Priority.Normal,
executorA
)
.AddCase(
message => message.Priority < Priority.High,
executorB
)
.SetDefault(executorC)
);
from agent_framework import (
Case,
Default,
WorkflowBuilder,
)
builder = WorkflowBuilder()
builder.set_start_executor(router_executor)
builder.add_switch_case_edge_group(
router_executor,
[
Case(
condition=lambda message: message.priority < Priority.NORMAL,
target=executor_a,
),
Case(
condition=lambda message: message.priority < Priority.HIGH,
target=executor_b,
),
Default(target=executor_c)
],
)
workflow = builder.build()
Ablüssungsränder
Verteilen von Nachrichten von einem Executor an mehrere Ziele:
// Send to all targets
builder.AddFanOutEdge(splitterExecutor, targets: [worker1, worker2, worker3]);
// Send to specific targets based on target selector function
builder.AddFanOutEdge(
source: routerExecutor,
targetSelector: (message, targetCount) => message.Priority switch
{
Priority.High => [0], // Route to first worker only
Priority.Normal => [1, 2], // Route to workers 2 and 3
_ => Enumerable.Range(0, targetCount) // Route to all workers
},
targets: [highPriorityWorker, normalWorker1, normalWorker2]
);
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.set_start_executor(splitter_executor)
builder.add_fan_out_edges(splitter_executor, [worker1, worker2, worker3])
workflow = builder.build()
# Send to specific targets based on partitioner function
builder = WorkflowBuilder()
builder.set_start_executor(splitter_executor)
builder.add_fan_out_edges(
splitter_executor,
[worker1, worker2, worker3],
selection_func=lambda message, target_ids: (
[0] if message.priority == Priority.HIGH else
[1, 2] if message.priority == Priority.NORMAL else
list(range(target_count))
)
)
workflow = builder.build()
Lüfter-In-Kanten
Sammeln von Nachrichten aus mehreren Quellen in einem einzigen Ziel:
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
Nächster Schritt
- Erfahren Sie mehr über Workflows , um zu verstehen, wie Workflows erstellt und ausgeführt werden.