Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här dokumentet innehåller en djupgående titt på komponenten Kanter i Microsoft Agent Framework-arbetsflödessystemet.
Översikt
Kanter definierar hur meddelanden flödar mellan exekutorer med valfria villkor. De representerar anslutningarna i arbetsflödesdiagrammet och bestämmer dataflödessökvägarna.
Typer av kanter
Ramverket stöder flera kantmönster:
- Direkta kanter: Enkla en-till-en-anslutningar mellan exekverare
- Villkorsstyrda kanter: Kanter med villkor som avgör när meddelanden ska flöda
- Utgående kanter: En exekverare som skickar meddelanden till flera mål
- Inaktiva kanter: Flera utförare som skickar meddelanden till ett enda mål
Direkta kanter
Den enklaste formen av anslutning mellan två utförare:
using Microsoft.Agents.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()
Villkorsstyrda kanter
Kanter som bara aktiveras när vissa villkor uppfylls:
// 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-satskanter
Dirigera meddelanden till olika exekutorer baserat på villkor:
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()
Utspridda kanter
Distribuera meddelanden från en exekutör till flera mål.
// Send to all targets
builder.AddFanOutEdge(splitterExecutor, targets: [worker1, worker2, worker3]);
// Send to specific targets based on partitioner function
builder.AddFanOutEdge(
source: routerExecutor,
partitioner: (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()
Inbyggda kanter
Samla in meddelanden från flera källor till ett enda mål:
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
Nästa steg
- Lär dig mer om arbetsflöden för att förstå hur du skapar och kör arbetsflöden.