Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este documento fornece uma visão detalhada do componente Edges do sistema Workflow do Microsoft Agent Framework.
Visão geral
As bordas definem como as mensagens fluem entre os executores com condições opcionais. Eles representam as conexões no gráfico de fluxo de trabalho e determinam os caminhos de fluxo de dados.
Tipos de arestas
A estrutura suporta vários padrões de borda:
- Bordas diretas: conexões simples um-para-um entre executores
- Bordas condicionais: bordas com condições que determinam quando as mensagens devem fluir
- Fan-out Edges: Um executor enviando mensagens para vários alvos
- Fan-in Edges: Vários executores enviando mensagens para um único alvo
Bordas diretas
A forma mais simples de conexão entre dois executores:
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()
Bordas condicionais
Arestas que só são ativadas quando determinadas condições são atendidas:
// 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()
Bordas do switch-case
Encaminhe mensagens para diferentes executores com base nas condições:
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()
Bordas de Fan-out
Distribua mensagens de um executor para vários destinos:
// 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()
Bordas Fan-in
Colete mensagens de várias fontes em um único destino:
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
Próximo Passo
- Saiba mais sobre fluxos de trabalho para entender como criar e executar fluxos de trabalho.