Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento dokument poskytuje podrobný pohled na součást Edges systému rozhraní Microsoft Agent Framework pro pracovní postupy.
Přehled
Hrany definují tok zpráv mezi exekutory s volitelnými podmínkami. Představují připojení v grafu pracovního postupu a určují cesty toku dat.
Typy hran
Framework podporuje několik okrajových vzorů:
- Přímé hrany: Jednoduchá spojení 1:1 mezi vykonavateli
- Podmíněné hrany: Hrany s podmínkami, které určují, kdy mají zprávy proudit
- Fan-out: Jednotka odesílající zprávy do více cílů
- Hrany ventilátoru: Několik vykonavatelů odesílajících zprávy do jednoho cíle
Přímé hrany
Nejjednodušší forma spojení mezi dvěma exekutory:
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()
Podmíněné hrany
Hrany, které se aktivují pouze při splnění určitých podmínek:
// 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()
Hrany typu Switch-case
Směrovat zprávy do různých exekutorů na základě podmínek:
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()
Hrany ventilátoru
Distribuce zpráv z jednoho exekutoru do více cílů:
// 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()
Hrany ventilátoru
Shromážděte zprávy z více zdrojů do jednoho cíle:
// Aggregate results from multiple workers
builder.AddFanInEdge(aggregatorExecutor, sources: [worker1, worker2, worker3]);
builder.add_fan_in_edge([worker1, worker2, worker3], aggregator_executor)
Další krok
- Přečtěte si o pracovních postupech , abyste pochopili, jak vytvářet a spouštět pracovní postupy.