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 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:
- Exekutor velkými písmeny – převede vstupní text na velká písmena.
- 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í
WorkflowBuilderke 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
- Sada .NET 8.0 SDK nebo novější
- Pro tento základní příklad nejsou vyžadovány žádné externí služby AI.
- Nová konzolová aplikace
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:
-
WorkflowBuilderkonstruktor 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:
- Výkonný převod na velká písmena – převede vstupní text na velká písmena.
- 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
@executortuto 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ávyNeverzadáním prvního parametru typu, ale vytváří výstupy pracovního postupu zadánímstrdruhé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