Sdílet prostřednictvím


Vytvoření jednoduchého sekvenčního pracovního postupu

Tento kurz ukazuje, jak vytvořit jednoduchý sekvenční pracovní postup pomocí pracovních postupů rozhraní Agent Framework.

Sekvenční pracovní postupy jsou základem vytváření složitých systémů agentů AI. V tomto kurzu se dozvíte, jak vytvořit jednoduchý dvoustupňový pracovní postup, ve kterém každý krok zpracovává data a předává je dalšímu kroku.

Přehled

V tomto kurzu vytvoříte pracovní postup se dvěma exekutory:

  1. Exekutor velkými písmeny – převede vstupní text na velká písmena.
  2. Reverse Text Executor - Převrací text a výstupem je konečný výsledek

Pracovní postup ukazuje základní koncepty, jako jsou:

  • Vytvoření vlastního vykonavatele s jednou obslužnou rutinou
  • Vytvoření vlastního exekutoru z funkce
  • Použití WorkflowBuilder ke spojení výkonných jednotek s hranami
  • Zpracování dat prostřednictvím sekvenčních kroků
  • Sledování provádění pracovního postupu prostřednictvím událostí

Pokryté koncepty

Požadavky

Podrobná implementace

Následující části ukazují, jak krok za krokem sestavit sekvenční pracovní postup.

Krok 1: Instalace balíčků NuGet

Nejprve nainstalujte požadované balíčky pro váš projekt .NET:

dotnet add package Microsoft.Agents.AI.Workflows --prerelease

Krok 2: Definování vykonavatele pro převod na velká písmena

Definujte exekutor, který převede text na velká písmena:

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Agents.AI.Workflows;

/// <summary>
/// First executor: converts input text to uppercase.
/// </summary>
Func<string, string> uppercaseFunc = s => s.ToUpperInvariant();
var uppercase = uppercaseFunc.BindExecutor("UppercaseExecutor");

Klíčové body:

  • Vytvořte funkci, která přijímá řetězec a vrací jeho verzi ve velkých písmenech.
  • Použijte BindExecutor() k vytvoření exekutoru z funkce.

Krok 3: Definování exekutoru reverzního textu

Definujte spouštěč, který reverzuje text.

/// <summary>
/// Second executor: reverses the input text and completes the workflow.
/// </summary>
internal sealed class ReverseTextExecutor() : Executor<string, string>("ReverseTextExecutor")
{
    public override ValueTask<string> HandleAsync(string input, IWorkflowContext context, CancellationToken cancellationToken = default)
    {
        // Reverse the input text
        return ValueTask.FromResult(new string(input.Reverse().ToArray()));
    }
}

ReverseTextExecutor reverse = new();

Klíčové body:

  • Vytvoření třídy, která dědí z Executor<TInput, TOutput>
  • Implementace HandleAsync() pro zpracování vstupu a vrácení výstupu

Krok 4: Sestavení a připojení pracovního postupu

Připojte exekutory pomocí WorkflowBuilder:

// Build the workflow by connecting executors sequentially
WorkflowBuilder builder = new(uppercase);
builder.AddEdge(uppercase, reverse).WithOutputFrom(reverse);
var workflow = builder.Build();

Klíčové body:

  • WorkflowBuilder konstruktor přijímá počátečního vykonavatele.
  • AddEdge() vytvoří směrované spojení od funkce Uppercase k funkci Reverse.
  • WithOutputFrom() určuje, které exekutory vytvářejí výstupy pracovního postupu.
  • Build() vytvoří neměnný pracovní postup.

Krok 5: Provedení pracovního postupu

Spusťte pracovní postup a sledujte výsledky:

// Execute the workflow with input data
await using Run run = await InProcessExecution.RunAsync(workflow, "Hello, World!");
foreach (WorkflowEvent evt in run.NewEvents)
{
    switch (evt)
    {
        case ExecutorCompletedEvent executorComplete:
            Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}");
            break;
    }
}

Krok 6: Porozumění výstupu pracovních procesů

Při spuštění pracovního postupu uvidíte výstup jako:

UppercaseExecutor: HELLO, WORLD!
ReverseTextExecutor: !DLROW ,OLLEH

Vstup "Hello, World!" se nejprve převede na velká písmena ("HELLO, WORLD!") a pak se obrátí ("!DLROW ,OLLEH").

Vysvětlení klíčových konceptů

Rozhraní exekutoru

Spouštěče z funkcí:

  • Pomocí BindExecutor() vytvoříte vykonavatel z funkce.

Exekutory implementují Executor<TInput, TOutput>:

  • TInput: Typ dat, která tento exekutor přijímá
  • TOutput: Typ dat, která tento exekutor vytvoří
  • HandleAsync: Metoda, která zpracovává vstup a vrací výstup

Model tvůrce pracovních postupů .NET

Poskytuje WorkflowBuilder plynulé rozhraní API pro sestavování pracovních postupů.

  • Konstruktor: Přebírá spouštěcí exekutor
  • AddEdge(): Vytvoří směrovaná připojení mezi exekutory.
  • WithOutputFrom(): Určuje, které exekutory vytvářejí výstupy pracovního postupu.
  • Build(): Vytvoří konečný neměnný pracovní postup.

Typy událostí .NET

Během provádění můžete sledovat tyto typy událostí:

  • ExecutorCompletedEvent – Po dokončení zpracování vykonavatele

Kompletní příklad .NET

Úplnou implementaci připravenou ke spuštění najdete v ukázce 01_ExecutorsAndEdges v úložišti Agent Framework.

Tato ukázka zahrnuje:

  • Úplná implementace se všemi příkazy using a strukturou tříd
  • Další komentáře vysvětlující koncepty pracovního postupu
  • Dokončení nastavení a konfigurace projektu

Přehled

V tomto kurzu vytvoříte pracovní postup se dvěma exekutory:

  1. Výkonný převod na velká písmena – převede vstupní text na velká písmena.
  2. Reverse Text Executor - Převrací text a výstupem je konečný výsledek

Pracovní postup ukazuje základní koncepty, jako jsou:

  • Vytvoření uzlů pracovního postupu pomocí dekorátoru @executor
  • Připojení zpracovatelů pomocí WorkflowBuilder
  • Předávání dat mezi kroky pomocí ctx.send_message()
  • Výsledek konečného výstupu s využitím ctx.yield_output()
  • Streamování událostí pro okamžitou pozorovatelnost

Pokryté koncepty

Požadavky

  • Python 3.10 nebo novější
  • Nainstalovaný balíček Agent Framework Core Python: pip install agent-framework-core
  • Pro tento základní příklad nejsou vyžadovány žádné externí služby AI.

Podrobná implementace

Následující části ukazují, jak krok za krokem sestavit sekvenční pracovní postup.

Krok 1: Import požadovaných modulů

Nejprve naimportujte potřebné moduly z agenta Framework:

import asyncio
from typing_extensions import Never
from agent_framework import WorkflowBuilder, WorkflowContext, WorkflowOutputEvent, executor

Krok 2: Vytvoření prvního exekutoru

Vytvořte executor, který převede text na velká písmena tím, že implementujete executor s metodou handleru.

class UpperCase(Executor):
    def __init__(self, id: str):
        super().__init__(id=id)

    @handler
    async def to_upper_case(self, text: str, ctx: WorkflowContext[str]) -> None:
        """Convert the input to uppercase and forward it to the next node.

        Note: The WorkflowContext is parameterized with the type this handler will
        emit. Here WorkflowContext[str] means downstream nodes should expect str.
        """
        result = text.upper()

        # Send the result to the next executor in the workflow.
        await ctx.send_message(result)

Klíčové body:

  • Dekorátor @executor tuto funkci zaregistruje jako uzel pracovního postupu.
  • WorkflowContext[str] označuje, že tento vykonavatel odešle řetězec dále dolů při zadání prvního typu parametru.
  • ctx.send_message() předává data do dalšího kroku.

Krok 3: Vytvoření druhého exekutoru

Vytvořte vykonavatele, který obrátí text a vrátí konečný výstup z metody označené @executor.

@executor(id="reverse_text_executor")
async def reverse_text(text: str, ctx: WorkflowContext[Never, str]) -> None:
    """Reverse the input and yield the workflow output."""
    result = text[::-1]

    # Yield the final output for this workflow run
    await ctx.yield_output(result)

Klíčové body:

  • WorkflowContext[Never, str] označuje, že se jedná o terminálový exekutor, který neodesílá žádné zprávy Never zadáním prvního parametru typu, ale vytváří výstupy pracovního postupu zadáním str druhého parametru.
  • ctx.yield_output() poskytuje konečný výsledek pracovního postupu.
  • Pracovní postup se dokončí, jakmile bude nečinný.

Krok 4: Sestavení pracovního postupu

Připojte exekutory pomocí WorkflowBuilder:

upper_case = UpperCase(id="upper_case_executor")

workflow = (
    WorkflowBuilder()
    .add_edge(upper_case, reverse_text)
    .set_start_executor(upper_case)
    .build()
)

Klíčové body:

  • add_edge() vytvoří směrovaná připojení mezi exekutory.
  • set_start_executor() definuje vstupní bod.
  • build() finalizuje pracovní postup.

Krok 5: Spuštění pracovního postupu se streamováním

Spusťte pracovní postup a sledujte události v reálném čase:

async def main():
    # Run the workflow and stream events
    async for event in workflow.run_stream("hello world"):
        print(f"Event: {event}")
        if isinstance(event, WorkflowOutputEvent):
            print(f"Workflow completed with result: {event.data}")

if __name__ == "__main__":
    asyncio.run(main())

Krok 6: Vysvětlení výstupu

Při spuštění pracovního postupu se zobrazí události jako:

Event: ExecutorInvokedEvent(executor_id=upper_case_executor)
Event: ExecutorCompletedEvent(executor_id=upper_case_executor)
Event: ExecutorInvokedEvent(executor_id=reverse_text_executor)
Event: ExecutorCompletedEvent(executor_id=reverse_text_executor)
Event: WorkflowOutputEvent(data='DLROW OLLEH', source_executor_id=reverse_text_executor)
Workflow completed with result: DLROW OLLEH

Vysvětlení klíčových konceptů

Typy kontextu pracovního postupu

Obecný WorkflowContext typ definuje toky dat mezi exekutory:

  • WorkflowContext[str] - Odešle řetězec dalšímu exekutoru.
  • WorkflowContext[Never, str] - Terminálový spouštěč, který poskytuje výstup zpracování typu řetězec

Typy událostí

Během provádění streamování budete sledovat tyto typy událostí:

  • ExecutorInvokedEvent – Když exekutor začne zpracovávat
  • ExecutorCompletedEvent – Po dokončení zpracování vykonavatele
  • WorkflowOutputEvent – Obsahuje konečný výsledek pracovního postupu.

Model Tvůrce pracovních postupů Pythonu

Poskytuje WorkflowBuilder plynulé rozhraní API pro sestavování pracovních postupů.

  • add_edge(): Vytvoří směrovaná připojení mezi exekutory.
  • set_start_executor(): Definuje vstupní bod pracovního postupu.
  • build(): Finalizuje a vrací neměnný objekt pracovního postupu.

Kompletní příklad

Úplnou implementaci připravenou ke spuštění najdete v ukázce v úložišti Agent Framework.

Tato ukázka zahrnuje:

  • Úplná implementace se všemi importy a dokumentací
  • Další komentáře vysvětlující koncepty pracovního postupu
  • Ukázkový výstup zobrazující očekávané výsledky

Další kroky