Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Alur kerja memungkinkan Anda menautkan beberapa langkah bersama-sama — setiap langkah memproses data dan meneruskannya ke langkah berikutnya.
Tentukan langkah-langkah alur kerja (pelaksana):
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();
Bangun dan jalankan alur kerja:
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
Lihat di sini untuk aplikasi sampel lengkap yang dapat dijalankan.
Sampel lengkap mendefinisikan dua executor, menghubungkannya dengan sebuah edge, dan menjalankan alur kerja:
import asyncio
from typing import Never
from agent_framework import WorkflowBuilder, WorkflowContext, executor
@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
Lihat sampel alur kerja grafik lengkap. Untuk alternatif fungsi, lihat alur kerja fungsi dasar dan alur kerja fungsi dengan agen.
Tentukan langkah-langkah alur kerja (pelaksana) dan sambungkan dengan tepi:
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
Lihat sampel lengkap untuk file lengkap yang dapat dijalankan.
Langkah berikutnya
Masuk lebih dalam:
- Alur kerja — memahami arsitektur alur kerja
- Alur kerja berurutan — pola langkah demi langkah linier
- Agen dalam alur kerja — menggunakan agen sebagai langkah-langkah alur kerja