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.
Pracovní postupy umožňují propojit více kroků dohromady – každý krok zpracovává data a předává je do dalšího kroku.
Definování kroků pracovního postupu (exekutorů):
using Microsoft.Agents.AI.Workflows;
// Step 1: Convert text to uppercase
Func<string, string> uppercaseFunc = s => s.ToUpperInvariant();
var uppercase = uppercaseFunc.BindAsExecutor("UppercaseExecutor");
// Step 2: Reverse the string and yield output
class ReverseTextExecutor() : Executor<string, string>("ReverseTextExecutor")
{
public override ValueTask<string> HandleAsync(string message, IWorkflowContext context, CancellationToken cancellationToken = default)
{
return ValueTask.FromResult(string.Concat(message.Reverse()));
}
}
ReverseTextExecutor reverse = new();
Sestavte a spusťte pracovní postup:
WorkflowBuilder builder = new(uppercase);
builder.AddEdge(uppercase, reverse).WithOutputFrom(reverse);
var workflow = builder.Build();
await using Run run = await InProcessExecution.RunAsync(workflow, "Hello, World!");
foreach (WorkflowEvent evt in run.NewEvents)
{
if (evt is ExecutorCompletedEvent executorComplete)
{
Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}");
}
}
Tip
Tady najdete úplnou spustitelnou ukázkovou aplikaci.
Kompletní ukázka definuje dva exekutory, spojí je hranou a spustí pracovní postup:
import asyncio
from agent_framework import WorkflowBuilder, WorkflowContext, executor
from typing_extensions import Never
@executor(id="upper_case")
async def upper_case(text: str, ctx: WorkflowContext[str]) -> None:
await ctx.send_message(text.upper())
@executor(id="reverse_text")
async def reverse_text(text: str, ctx: WorkflowContext[Never, str]) -> None:
await ctx.yield_output(text[::-1])
async def main() -> None:
workflow = WorkflowBuilder(start_executor=upper_case).add_edge(upper_case, reverse_text).build()
result = await workflow.run("hello world")
print(result.get_outputs()[0])
if __name__ == "__main__":
asyncio.run(main())
Tip
Podívejte se na úplnou ukázku workflow grafu. Funkční alternativy najdete v základním funkčním pracovním postupu a funkčním pracovním postupu s agenty.
Definujte kroky pracovního postupu (exekutory) a připojte je k okrajům:
package main
import (
"context"
"fmt"
"slices"
"strings"
"github.com/microsoft/agent-framework-go/workflow"
"github.com/microsoft/agent-framework-go/workflow/inproc"
)
func main() {
// Step 1: Convert text to uppercase.
uppercase := workflow.NewExecutor("UppercaseExecutor", func(input string) string {
return strings.ToUpper(input)
}).Bind()
// Step 2: Reverse the string.
reverse := workflow.NewExecutor("ReverseExecutor", func(input string) string {
runes := []rune(input)
slices.Reverse(runes)
return string(runes)
}).Bind()
// Build the workflow by connecting executors sequentially.
wf, err := workflow.NewBuilder(uppercase).
AddEdge(uppercase, reverse).
WithOutputFrom(reverse).
Build()
if err != nil {
panic(err)
}
// Execute the workflow with sample input.
run, err := inproc.Default.Run(context.Background(), wf, "Hello, World!")
if err != nil {
panic(err)
}
for evt := range run.NewEvents() {
if evt, ok := evt.(workflow.ExecutorCompletedEvent); ok {
fmt.Printf("%s: %v\n", evt.ExecutorID, evt.Result)
}
}
}
Tip
Podívejte se na úplnou ukázku kompletního spustitelného souboru.
Další kroky
Jděte hlouběji:
- Pracovní postupy – principy architektury pracovního postupu
- Sekvenční pracovní postupy – lineární krok-za-krokem vzory
- Agenti v pracovních postupech — používání agentů jako kroků v pracovních postupech