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.
Tutorial ini menunjukkan cara membuat alur kerja berurutan sederhana menggunakan Alur Kerja Kerangka Kerja Agen.
Alur kerja berurutan adalah fondasi membangun sistem agen AI yang kompleks. Tutorial ini menunjukkan cara membuat alur kerja dua langkah sederhana di mana setiap langkah memproses data dan meneruskannya ke langkah berikutnya.
Gambaran Umum
Dalam tutorial ini, Anda akan membuat alur kerja dengan dua pelaksana:
- Pengonversi Huruf Besar - Mengonversi teks input menjadi huruf besar
- Pelaksana Teks Terbalik - Membalikkan teks dan menghasilkan hasil akhir
Alur kerja menunjukkan konsep inti seperti:
- Membuat pelaksana kustom dengan satu handler
- Membuat pelaksana kustom dari fungsi
- Menggunakan
WorkflowBuilderuntuk menyambungkan eksekutor dengan sisi - Memproses data melalui langkah-langkah berurutan
- Mengamati eksekusi alur kerja melalui peristiwa
Konsep yang Tercakup
Prasyarat
- .NET 8.0 SDK atau yang lebih baru
- Tidak diperlukan layanan AI eksternal untuk contoh dasar ini
- Aplikasi konsol baru
Implementasi Langkah demi Langkah
Bagian berikut menunjukkan cara membuat alur kerja berurutan langkah demi langkah.
Langkah 1: Instal paket NuGet
Pertama, instal paket yang diperlukan untuk proyek .NET Anda:
dotnet add package Microsoft.Agents.AI.Workflows --prerelease
Langkah 2: Tentukan Pelaksana Huruf Besar
Tentukan pelaksana yang mengonversi teks menjadi huruf besar:
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");
Poin Utama:
- Membuat fungsi yang mengambil string dan mengembalikan versi huruf besar
- Gunakan
BindExecutor()untuk membuat pelaksana dari fungsi
Langkah 3: Tentukan Pengolah Teks yang Dibalik
Tentukan pelaksana yang membalikkan teks:
/// <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();
Poin Utama:
- Membuat kelas yang mewarisi dari
Executor<TInput, TOutput> - Terapkan
HandleAsync()untuk memproses input dan mengembalikan output
Langkah 4: Membangun dan Menyambungkan Alur Kerja
Sambungkan eksekutor menggunakan WorkflowBuilder
// Build the workflow by connecting executors sequentially
WorkflowBuilder builder = new(uppercase);
builder.AddEdge(uppercase, reverse).WithOutputFrom(reverse);
var workflow = builder.Build();
Poin Utama:
-
WorkflowBuilderkonstruktor mengambil pelaksana awal -
AddEdge()membuat koneksi yang diarahkan dari huruf besar ke terbalik -
WithOutputFrom()menentukan eksekutor mana yang menghasilkan output alur kerja -
Build()membuat alur kerja yang tidak dapat diubah
Langkah 5: Jalankan Alur Kerja
Jalankan alur kerja dan amati hasilnya:
// 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;
}
}
Langkah 6: Memahami Output Alur Kerja
Saat menjalankan alur kerja, Anda akan melihat output seperti:
UppercaseExecutor: HELLO, WORLD!
ReverseTextExecutor: !DLROW ,OLLEH
Input "Hello, World!" pertama kali diubah menjadi huruf kapital ("HELLO, WORLD!"), lalu dibalik ("!DLROW ,OLLEH").
Konsep Utama Dijelaskan
Antarmuka Pelaksana
Pelaksana dari fungsi:
- Gunakan
BindExecutor()untuk membuat pelaksana dari fungsi
Pelaksana mengimplementasikan Executor<TInput, TOutput>:
- TInput: Jenis data yang diterima pelaksana ini
- TOutput: Jenis data yang dihasilkan pelaksana ini
- HandleAsync: Metode yang memproses input dan mengembalikan output
Pola Penyusun Alur Kerja .NET
WorkflowBuilder menyediakan API yang mudah digunakan untuk membangun alur kerja.
- Konstruktor: Menetapkan pelaksana awal
- AddEdge(): Membuat koneksi yang diarahkan antar eksekutor
- WithOutputFrom(): Menentukan eksekutor mana yang menghasilkan output alur kerja
- Build(): Membuat alur kerja akhir yang tidak dapat diubah
Jenis Peristiwa .NET
Selama eksekusi, Anda dapat mengamati jenis peristiwa ini:
-
ExecutorCompletedEvent- Ketika pengolah selesai memproses
Contoh .NET Lengkap
Untuk implementasi lengkap dan siap dijalankan, lihat sampel 01_ExecutorsAndEdges di repositori Kerangka Kerja Agen.
Sampel ini mencakup:
- Implementasi penuh dengan semua menggunakan pernyataan dan struktur kelas
- Komentar tambahan yang menjelaskan konsep alur kerja
- Menyelesaikan penyiapan dan konfigurasi proyek
Gambaran Umum
Dalam tutorial ini, Anda akan membuat alur kerja dengan dua pelaksana:
- Pengubah Huruf Besar - Mengonversi teks input menjadi huruf besar
- Pelaksana Teks Terbalik - Membalikkan teks dan menghasilkan hasil akhir
Alur kerja menunjukkan konsep inti seperti:
- Dua cara untuk menentukan unit kerja (simpul pelaksana):
- Kelas kustom yang subkelas
Executordengan metode asinkron yang ditandai dengan@handler - Fungsi asinkron mandiri yang didekorasi dengan
@executor
- Kelas kustom yang subkelas
- Menyambungkan pelaksana dengan
WorkflowBuilder - Meneruskan data di antara langkah-langkah dengan
ctx.send_message() - Menghasilkan output akhir dengan
ctx.yield_output() - Streaming peristiwa untuk observabilitas waktu nyata
Konsep yang Tercakup
Prasyarat
- Python 3.10 atau yang lebih baru
- Paket Agent Framework Core Python terinstal:
pip install agent-framework-core --pre - Tidak diperlukan layanan AI eksternal untuk contoh dasar ini
Implementasi Langkah demi Langkah
Bagian berikut menunjukkan cara membuat alur kerja berurutan langkah demi langkah.
Langkah 1: Impor modul yang Diperlukan
Pertama, impor modul yang diperlukan dari Agent Framework:
import asyncio
from typing_extensions import Never
from agent_framework import WorkflowBuilder, WorkflowContext, WorkflowOutputEvent, executor
Langkah 2: Buat Pelaksana Pertama
Buat pelaksana yang mengonversi teks menjadi huruf besar dengan menerapkan pelaksana dengan metode handler:
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)
Poin Utama:
- Subkelas
Executormemungkinkan Anda menentukan node bernama dengan lifecycle hooks jika diperlukan - Dekorator
@handlermenandai metode asinkron yang melakukan pekerjaan - Tanda tangan handler mengikuti kontrak:
- Parameter pertama adalah input yang ditik ke simpul ini (di sini:
text: str) - Parameter kedua adalah
WorkflowContext[T_Out], di manaT_Outadalah jenis data yang akan dipancarkan simpul ini melaluictx.send_message()(di sini:str)
- Parameter pertama adalah input yang ditik ke simpul ini (di sini:
- Dalam handler, Anda biasanya menghitung hasil dan meneruskannya ke simpul hilir menggunakan
ctx.send_message(result)
Langkah 3: Buat Pelaksana Kedua
Untuk langkah-langkah sederhana, Anda dapat melewati subkelas dan menentukan fungsi asinkron dengan pola tanda tangan yang sama (input yang diketik + WorkflowContext) dan menghiasnya dengan @executor. Ini menciptakan node yang berfungsi penuh yang dapat dikabeli ke dalam alur:
@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)
Poin Utama:
- Dekorator
@executormengubah fungsi asinkron mandiri menjadi simpul alur kerja -
WorkflowContextdiparameterkan dengan dua jenis:-
T_Out = Never: simpul ini tidak mengirim pesan ke simpul hilir -
T_W_Out = str: simpul ini menghasilkan output alur kerja dari jenisstr
-
- Node terminal menghasilkan keluaran menggunakan
ctx.yield_output()untuk memberikan hasil alur kerja - Alur kerja selesai ketika diam (tidak ada lagi pekerjaan yang harus dilakukan)
Langkah 4: Bangun Alur Kerja
Sambungkan eksekutor menggunakan WorkflowBuilder
upper_case = UpperCase(id="upper_case_executor")
workflow = (
WorkflowBuilder()
.add_edge(upper_case, reverse_text)
.set_start_executor(upper_case)
.build()
)
Poin Utama:
-
add_edge()membuat koneksi terarah antar pelaksana -
set_start_executor()mendefinisikan titik masuk -
build()menyelesaikan alur kerja
Langkah 5: Jalankan Alur Kerja dengan Streaming
Jalankan alur kerja dan amati peristiwa secara real time:
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())
Langkah 6: Memahami Output
Saat menjalankan alur kerja, Anda akan melihat peristiwa seperti:
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
Konsep Utama Dijelaskan
Dua Cara untuk Menentukan Pelaksana
-
Kelas kustom (subkelas
Executor): Terbaik saat Anda membutuhkan kait siklus hidup atau status kompleks. Definisikan metode asinkron dengan dekorator@handler. -
Berbasis fungsi (
@executordekorator): Terbaik untuk langkah-langkah sederhana. Tentukan fungsi asinkron mandiri dengan pola tanda tangan yang sama.
Kedua pendekatan menggunakan tanda tangan handler yang sama:
- Parameter pertama: input yang ditik ke simpul ini
- Parameter kedua: a
WorkflowContext[T_Out, T_W_Out]
Jenis Konteks Alur Kerja
WorkflowContext Jenis generik menentukan aliran data apa di antara pelaksana:
-
WorkflowContext[T_Out]- Digunakan untuk simpul yang mengirim pesan jenisT_Outke simpul hilir melaluictx.send_message() -
WorkflowContext[T_Out, T_W_Out]- Digunakan untuk simpul yang juga menghasilkan output alur kerja jenisT_W_Outmelaluictx.yield_output() -
WorkflowContexttanpa parameter tipe adalah setara denganWorkflowContext[Never, Never], yang berarti simpul ini tidak mengirim pesan ke simpul hilir ataupun menghasilkan keluaran alur kerja.
Jenis Peristiwa
Selama eksekusi streaming, Anda akan mengamati jenis peristiwa ini:
-
ExecutorInvokedEvent- Ketika pelaksana mulai memproses -
ExecutorCompletedEvent- Ketika pengolah selesai memproses -
WorkflowOutputEvent- Berisi hasil alur kerja akhir
Pola Penyusun Alur Kerja Python
WorkflowBuilder menyediakan API yang mudah digunakan untuk membangun alur kerja.
- add_edge(): Membuat koneksi yang diarahkan antar pelaksana
- set_start_executor(): Menentukan titik entri alur kerja
- build(): Menyelesaikan dan mengembalikan objek alur kerja yang tidak dapat diubah
Contoh Lengkap
Untuk implementasi lengkap dan siap dijalankan, lihat sampel di repositori Kerangka Kerja Agen.
Sampel ini mencakup:
- Implementasi penuh dengan semua impor dan dokumentasi
- Komentar tambahan yang menjelaskan konsep alur kerja
- Output sampel memperlihatkan hasil yang diharapkan