Aracılığıyla paylaş


Microsoft Agent Framework İş Akışlarının Temel Kavramları - Kenarlar

Bu belge, Microsoft Agent Framework İş Akışı sisteminin Edges bileşenine ayrıntılı bir bakış sağlar.

Genel Bakış

Kenarlar, isteğe bağlı koşullarla iletilerin yürütücüler arasında nasıl aktığını tanımlar. İş akışı grafiğindeki bağlantıları temsil eder ve veri akışı yollarını belirler.

Kenar Türleri

Çerçeve çeşitli kenar desenlerini destekler:

  1. Doğrudan Kenarlar: Yürütücüler arasında basit bire bir bağlantılar
  2. Koşullu Kenarlar: İletilerin ne zaman akması gerektiğini belirleyen koşullara sahip kenarlar
  3. Uç uçları: Birden çok hedefe ileti gönderen bir yürütücü
  4. Fan-in Edges: Tek bir hedefe ileti gönderen birden çok yürütücü

Doğrudan Kenarlar

İki yürütücü arasındaki en basit bağlantı biçimi:

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()

Koşullu Kenarlar

Yalnızca belirli koşullar karşılandığında etkinleşen kenarlar:

// 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 Kenarları

Koşullara göre iletileri farklı yürütücülere yönlendirin:

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()

Dağıtım Kenarları

İletileri bir yürütücüden birden çok hedefe dağıtma:

// 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()

Fanlı Kenarlar

Birden çok kaynaktan gelen iletileri tek bir hedefe toplayın:

// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)

Sonraki Adım