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.
Dalam orkestrasi berurutan, agen diatur dalam alur. Setiap agen memproses tugas secara bergantian, meneruskan outputnya ke agen berikutnya secara berurutan. Ini sangat ideal untuk alur kerja di mana setiap langkah dibangun berdasarkan yang sebelumnya, seperti tinjauan dokumen, alur pemrosesan data, atau penalaran multi-tahap.
Apa yang akan Anda Pelajari
- Cara membuat alur kerja agen yang berurutan
- Cara menyusun agen di mana setiapnya dibangun di atas output sebelumnya
- Cara menggabungkan agen dengan pelaksana kustom untuk tugas khusus
- Cara melacak alur percakapan melalui pipeline
Tentukan Agen Anda
Dalam orkestrasi berurutan, agen diatur dalam alur di mana setiap agen memproses tugas secara bergantian, meneruskan output ke agen berikutnya secara berurutan.
Menyiapkan Klien Azure OpenAI
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.Workflows;
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
// 1) Set up the Azure OpenAI client
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ??
throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsIChatClient();
Buat agen khusus yang akan berfungsi secara berurutan:
// 2) Helper method to create translation agents
static ChatClientAgent GetTranslationAgent(string targetLanguage, IChatClient chatClient) =>
new(chatClient,
$"You are a translation assistant who only responds in {targetLanguage}. Respond to any " +
$"input by outputting the name of the input language and then translating the input to {targetLanguage}.");
// Create translation agents for sequential processing
var translationAgents = (from lang in (string[])["French", "Spanish", "English"]
select GetTranslationAgent(lang, client));
Menyiapkan Orkestrasi Berurutan
Bangun alur kerja menggunakan AgentWorkflowBuilder:
// 3) Build sequential workflow
var workflow = AgentWorkflowBuilder.BuildSequential(translationAgents);
Jalankan Alur Kerja Berurutan
Jalankan alur kerja dan proses peristiwa:
// 4) Run the workflow
var messages = new List<ChatMessage> { new(ChatRole.User, "Hello, world!") };
StreamingRun run = await InProcessExecution.StreamAsync(workflow, messages);
await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
List<ChatMessage> result = new();
await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
{
if (evt is AgentRunUpdateEvent e)
{
Console.WriteLine($"{e.ExecutorId}: {e.Data}");
}
else if (evt is WorkflowCompletedEvent completed)
{
result = (List<ChatMessage>)completed.Data!;
break;
}
}
// Display final result
foreach (var message in result)
{
Console.WriteLine($"{message.Role}: {message.Content}");
}
Sampel Output
French_Translation: User: Hello, world!
French_Translation: Assistant: English detected. Bonjour, le monde !
Spanish_Translation: Assistant: French detected. ¡Hola, mundo!
English_Translation: Assistant: Spanish detected. Hello, world!
Konsep Utama
- Pemrosesan Berurutan: Setiap agen memproses output agen sebelumnya secara berurutan
- AgentWorkflowBuilder.BuildSequential(): Membuat alur kerja dari kumpulan agen
- ChatClientAgent: Mewakili agen yang didukung oleh klien obrolan dengan instruksi tertentu
- StreamingRun: Menyediakan eksekusi real-time dengan kemampuan streaming peristiwa
-
Penanganan Peristiwa: Memantau kemajuan agen melalui
AgentRunUpdateEventdan penyelesaian melaluiWorkflowCompletedEvent
Dalam orkestrasi berurutan, setiap agen memproses tugas secara bergantian, dengan output mengalir dari satu ke yang berikutnya. Mari kita mulai dengan menentukan agen untuk proses dua tahap:
from agent_framework.azure import AzureChatClient
from azure.identity import AzureCliCredential
# 1) Create agents using AzureChatClient
chat_client = AzureChatClient(credential=AzureCliCredential())
writer = chat_client.create_agent(
instructions=(
"You are a concise copywriter. Provide a single, punchy marketing sentence based on the prompt."
),
name="writer",
)
reviewer = chat_client.create_agent(
instructions=(
"You are a thoughtful reviewer. Give brief feedback on the previous assistant message."
),
name="reviewer",
)
Menyiapkan Orkestrasi Berurutan
Kelas SequentialBuilder membuat alur tempat agen memproses tugas secara berurutan. Setiap agen melihat riwayat percakapan lengkap dan menambahkan respons mereka:
from agent_framework import SequentialBuilder
# 2) Build sequential workflow: writer -> reviewer
workflow = SequentialBuilder().participants([writer, reviewer]).build()
Jalankan Alur Kerja Berurutan
Jalankan alur kerja dan kumpulkan percakapan akhir yang menunjukkan kontribusi setiap agen:
from agent_framework import ChatMessage, WorkflowCompletedEvent
# 3) Run and print final conversation
completion: WorkflowCompletedEvent | None = None
async for event in workflow.run_stream("Write a tagline for a budget-friendly eBike."):
if isinstance(event, WorkflowCompletedEvent):
completion = event
if completion:
print("===== Final Conversation =====")
messages: list[ChatMessage] | Any = completion.data
for i, msg in enumerate(messages, start=1):
name = msg.author_name or ("assistant" if msg.role == Role.ASSISTANT else "user")
print(f"{'-' * 60}\n{i:02d} [{name}]\n{msg.text}")
Sampel Output
===== Final Conversation =====
------------------------------------------------------------
01 [user]
Write a tagline for a budget-friendly eBike.
------------------------------------------------------------
02 [writer]
Ride farther, spend less—your affordable eBike adventure starts here.
------------------------------------------------------------
03 [reviewer]
This tagline clearly communicates affordability and the benefit of extended travel, making it
appealing to budget-conscious consumers. It has a friendly and motivating tone, though it could
be slightly shorter for more punch. Overall, a strong and effective suggestion!
Tingkat Lanjut: Menggabungkan Agen dengan Eksekutor Kustom
Orkestrasi berurutan mendukung penggabungan agen dengan eksekutor kustom untuk pemrosesan khusus. Ini berguna ketika Anda memerlukan logika kustom yang tidak memerlukan LLM:
Tentukan Pelaksana Kustom
from agent_framework import Executor, WorkflowContext, handler
from agent_framework import ChatMessage, Role
class Summarizer(Executor):
"""Simple summarizer: consumes full conversation and appends an assistant summary."""
@handler
async def summarize(
self,
conversation: list[ChatMessage],
ctx: WorkflowContext[list[ChatMessage]]
) -> None:
users = sum(1 for m in conversation if m.role == Role.USER)
assistants = sum(1 for m in conversation if m.role == Role.ASSISTANT)
summary = ChatMessage(
role=Role.ASSISTANT,
text=f"Summary -> users:{users} assistants:{assistants}"
)
await ctx.send_message(list(conversation) + [summary])
Membangun Alur Kerja Berurutan Campuran
# Create a content agent
content = chat_client.create_agent(
instructions="Produce a concise paragraph answering the user's request.",
name="content",
)
# Build sequential workflow: content -> summarizer
summarizer = Summarizer(id="summarizer")
workflow = SequentialBuilder().participants([content, summarizer]).build()
Output Sampel dengan Eksekutor Kustom
------------------------------------------------------------
01 [user]
Explain the benefits of budget eBikes for commuters.
------------------------------------------------------------
02 [content]
Budget eBikes offer commuters an affordable, eco-friendly alternative to cars and public transport.
Their electric assistance reduces physical strain and allows riders to cover longer distances quickly,
minimizing travel time and fatigue. Budget models are low-cost to maintain and operate, making them accessible
for a wider range of people. Additionally, eBikes help reduce traffic congestion and carbon emissions,
supporting greener urban environments. Overall, budget eBikes provide cost-effective, efficient, and
sustainable transportation for daily commuting needs.
------------------------------------------------------------
03 [assistant]
Summary -> users:1 assistants:1
Konsep Utama
- Konteks Bersama: Setiap peserta menerima riwayat percakapan lengkap, termasuk semua pesan sebelumnya
-
Order Matters: Agen-agen menjalankan secara ketat dalam urutan yang ditentukan dalam daftar
participants() - Peserta Fleksibel: Anda dapat mencampur agen dan pelaksana kustom dalam urutan apa pun
- Alur Percakapan: Setiap agen/pelaksana menambahkan ke percakapan, membangun dialog lengkap