Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten dokument zawiera szczegółowe omówienie składnika Edges systemu przepływu pracy programu Microsoft Agent Framework.
Przegląd
Krawędzie definiują sposób przepływu komunikatów między wykonawcami z opcjonalnymi warunkami. Reprezentują one połączenia na wykresie przepływu pracy i określają ścieżki przepływu danych.
Typy krawędzi
Platforma obsługuje kilka wzorców krawędzi:
- Bezpośrednie krawędzie: proste połączenia jedno do jednego między wykonawcami
- Krawędzie warunkowe: krawędzie z warunkami określającymi, kiedy komunikaty powinny przepływać
- Krawędzie wentylatora: jedna funkcja wykonawcza wysyłająca komunikaty do wielu elementów docelowych
- Krawędzie wentylatora: wiele funkcji wykonawczych wysyłających komunikaty do pojedynczego obiektu docelowego
Bezpośrednie krawędzie
Najprostsza forma połączenia między dwoma funkcjami wykonawczych:
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()
Krawędzie warunkowe
Krawędzie, które są aktywowane tylko w przypadku spełnienia określonych warunków:
// 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()
Krawędzie instrukcji switch-case
Kierowanie komunikatów do różnych funkcji wykonawczych na podstawie warunków:
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()
Krawędzie wentylatora
Dystrybuuj komunikaty z jednego modułu wykonawczego do wielu obiektów docelowych:
// 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()
Krawędzie wentylatora
Zbierz komunikaty z wielu źródeł w jeden element docelowy:
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
Następny krok
- Dowiedz się więcej o przepływach pracy , aby dowiedzieć się, jak tworzyć i wykonywać przepływy pracy.