이 문서에서는 Microsoft 에이전트 프레임워크 워크플로 시스템의 Edges 구성 요소를 자세히 살펴봅니다.
개요
에지는 선택적 조건이 있는 실행기 간에 메시지가 흐르는 방식을 정의합니다. 워크플로 그래프의 연결을 나타내고 데이터 흐름 경로를 결정합니다.
에지 유형
프레임워크는 다음과 같은 여러 에지 패턴을 지원합니다.
- 직접 엣지: 실행기 간의 간단한 일대일 연결
- 조건부 가장자리: 메시지가 흐르는 시기를 결정하는 조건이 있는 에지
- 팬아웃 에지: 여러 대상에 메시지를 보내는 하나의 실행기
- 팬 인 에지: 단일 대상에 메시지를 보내는 여러 실행기
직접 연결 경로
두 실행기 간의 가장 간단한 연결 형식:
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()
조건부 엣지
특정 조건이 충족될 때만 활성화되는 에지:
// 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()
스위치-케이스 경계
조건에 따라 메시지를 다른 실행기에 라우팅합니다.
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()
팬아웃 엣지
한 실행기에서 여러 대상으로 메시지 배포:
// 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()
팬인 에지
여러 원본에서 단일 대상으로 메시지를 수집합니다.
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
다음 단계
- 워크플로를 빌드하고 실행하는 방법을 이해하는 워크플로에 대해 알아봅니다.