Aracılığıyla paylaş


Microsoft Agent Framework İş Akışları Düzenlemeleri - Sıralı

Sıralı düzenlemede aracılar bir işlem hattında düzenlenir. Her acente sırayla görevi işlerken çıkışını sıralamadaki bir sonraki acenteye geçirir. Bu, belge gözden geçirme, veri işleme işlem hatları veya çok aşamalı mantık gibi her adımın önceki adıma göre derlendiği iş akışları için idealdir.

Sıralı Düzenleme

Öğrenecekler

  • Agent'lerin sıralı ardışık işlem hattı nasıl oluşturulur
  • Her birinin bir öncekinin çıktısı üzerine inşa edildiği aracıları zincirleme kullanmak
  • Özel görevler için aracıları özel olarak tasarlanmış yürütücülerle birleştirme
  • Konuşma akışını işlem hattı üzerinden izleme.

Ajanlarınızı Tanımlayın

Sıralı düzenlemede aracılar, her aracının sırayla görevi işlediği bir işlem hattında düzenlenir ve çıktıyı dizideki bir sonraki aracıya geçirir.

Azure OpenAI İstemcisini Ayarlama

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI.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();

Sırayla çalışacak özel aracılar oluşturun:

// 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));

Sıralı Orkestrasyonu Kurma

kullanarak AgentWorkflowBuilderiş akışını oluşturun:

// 3) Build sequential workflow
var workflow = AgentWorkflowBuilder.BuildSequential(translationAgents);

Sıralı İş Akışını Çalıştırma

İş akışını uygulayın ve olayları işleyin.

// 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 WorkflowOutputEvent outputEvt)
    {
        result = (List<ChatMessage>)outputEvt.Data!;
        break;
    }
}

// Display final result
foreach (var message in result)
{
    Console.WriteLine($"{message.Role}: {message.Content}");
}

Örnek Çıkış

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!

Önemli Kavramlar

  • Sıralı İşleme: Her bir temsilci, önceki temsilcinin çıkışını sırayla işler
  • AgentWorkflowBuilder.BuildSequential(): Bir dizi aracı kullanarak bir iş akışı oluşturur
  • ChatClientAgent: Belirli yönergelerle sohbet istemcisi tarafından desteklenen bir aracıyı temsil eder
  • StreamingRun: Olay akışı özellikleriyle gerçek zamanlı yürütme sağlar
  • Olay İşleme: Aracının ilerlemesini AgentRunUpdateEvent, tamamlanmasını WorkflowOutputEvent izleme

Sıralı orkestrasyonda, her aracı görevi sırayla yönetir ve çıkış, birinden diğerine akarak devam eder. İki aşamalı bir işlem için aracıları tanımlayarak başlayın:

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",
)

Sıralı Orkestrasyonu Kurma

Bu SequentialBuilder sınıfı, etmenlerin görevleri sırayla işlediği bir işlem hattı oluşturur. Her temsilci konuşma geçmişinin tamamını görür ve yanıtını ekler.

from agent_framework import SequentialBuilder

# 2) Build sequential workflow: writer -> reviewer
workflow = SequentialBuilder().participants([writer, reviewer]).build()

Sıralı İş Akışını Çalıştırma

İş akışını çalıştırın ve her bir ajanının katkısını gösteren son görüşmeyi toplayın.

from agent_framework import ChatMessage, WorkflowOutputEvent

# 3) Run and print final conversation
output_evt: WorkflowOutputEvent | None = None
async for event in workflow.run_stream("Write a tagline for a budget-friendly eBike."):
    if isinstance(event, WorkflowOutputEvent):
        output_evt = event

if output_evt:
    print("===== Final Conversation =====")
    messages: list[ChatMessage] | Any = output_evt.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}")

Örnek Çıkış

===== 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!

Gelişmiş: Özel Yürütücülerle Ajanların Birleştirilmesi

Sıralı orkestrasyon, özel işlem gerektiren durumlar için aracıların özel yürütücülerle karıştırılmasını destekler. LLM gerektirmeyen özel bir mantığa ihtiyacınız olduğunda bu yararlı olur:

Özel Yürütücü Tanımlama

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])

Karma Sıralı İş Akışı Oluşturma

# 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()

Özel Yürütücü ile Örnek Çıktı

------------------------------------------------------------
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

Önemli Kavramlar

  • Paylaşılan Bağlam: Her katılımcı, önceki tüm iletiler de dahil olmak üzere konuşma geçmişinin tamamını alır
  • Order Matters: Ajanlar kesinlikle listede participants() belirtilen sırayla yürütülür
  • Esnek Katılımcılar: Aracıları ve özel yürütücüleri istediğiniz sırada karıştırabilirsiniz
  • Konuşma Akışı: Her aracı/uygulayıcı konuşmaya katılır ve tam bir diyalog oluşturur

Sonraki Adımlar