Sdílet prostřednictvím


Agenti v pracovních postupech

Tento kurz ukazuje, jak integrovat agenty AI do pracovních postupů pomocí rozhraní Agent Framework. Naučíte se vytvářet pracovní postupy, které využívají sílu specializovaných agentů umělé inteligence pro vytváření, kontrolu a další úlohy spolupráce.

Co budete vytvářet

Vytvoříte pracovní postup, který:

  • Používá službu agenta Azure Foundry k vytváření inteligentních agentů.
  • Implementuje francouzského překladového agenta, který překládá vstup do francouzštiny.
  • Implementuje agenta překladu španělštiny, který překládá francouzštinu do španělštiny.
  • Implementuje agenta překladu v angličtině, který překládá španělštinu zpět do angličtiny.
  • Připojuje agenty v sekvenčním řetězci pracovního postupu.
  • Streamuje aktualizace v reálném čase, když agenti zpracovávají požadavky.
  • Demonstruje správné vyčištění prostředků pro agenty Azure Foundry.

Pokryté koncepty

Požadavky

Krok 1: Instalace balíčků NuGet

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

dotnet add package Azure.AI.Agents.Persistent --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.AzureAI --prerelease
dotnet add package Microsoft.Agents.AI.Workflows --prerelease

Krok 2: Nastavení klienta Azure Foundry

Nakonfigurujte klienta Azure Foundry s proměnnými prostředí a ověřováním:

using System;
using System.Threading.Tasks;
using Azure.AI.Agents.Persistent;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Workflows;
using Microsoft.Extensions.AI;

public static class Program
{
    private static async Task Main()
    {
        // Set up the Azure Foundry client
        var endpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new Exception("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
        var model = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_MODEL_ID") ?? "gpt-4o-mini";
        var persistentAgentsClient = new PersistentAgentsClient(endpoint, new AzureCliCredential());

Krok 3: Vytvoření metody agenta factory

Implementujte pomocnou metodu pro vytvoření agentů Azure Foundry s konkrétními pokyny:

    /// <summary>
    /// Creates a translation agent for the specified target language.
    /// </summary>
    /// <param name="targetLanguage">The target language for translation</param>
    /// <param name="persistentAgentsClient">The PersistentAgentsClient to create the agent</param>
    /// <param name="model">The model to use for the agent</param>
    /// <returns>A ChatClientAgent configured for the specified language</returns>
    private static async Task<ChatClientAgent> GetTranslationAgentAsync(
        string targetLanguage,
        PersistentAgentsClient persistentAgentsClient,
        string model)
    {
        var agentMetadata = await persistentAgentsClient.Administration.CreateAgentAsync(
            model: model,
            name: $"{targetLanguage} Translator",
            instructions: $"You are a translation assistant that translates the provided text to {targetLanguage}.");

        return await persistentAgentsClient.GetAIAgentAsync(agentMetadata.Value.Id);
    }
}

Krok 4: Vytvoření specializovaných agentů Azure Foundry

Pomocí pomocné metody vytvořte tři agenty překladu:

        // Create agents
        AIAgent frenchAgent = await GetTranslationAgentAsync("French", persistentAgentsClient, model);
        AIAgent spanishAgent = await GetTranslationAgentAsync("Spanish", persistentAgentsClient, model);
        AIAgent englishAgent = await GetTranslationAgentAsync("English", persistentAgentsClient, model);

Krok 5: Sestavení pracovního postupu

Připojte agenty v sekvenčním pracovním postupu pomocí nástroje WorkflowBuilder:

        // Build the workflow by adding executors and connecting them
        var workflow = new WorkflowBuilder(frenchAgent)
            .AddEdge(frenchAgent, spanishAgent)
            .AddEdge(spanishAgent, englishAgent)
            .Build();

Krok 6: Spuštění se streamováním

Spuštěním pracovního postupu se streamováním sledujte aktualizace ze všech agentů v reálném čase:

        // Execute the workflow
        await using StreamingRun run = await InProcessExecution.StreamAsync(workflow, new ChatMessage(ChatRole.User, "Hello World!"));

        // Must send the turn token to trigger the agents.
        // The agents are wrapped as executors. When they receive messages,
        // they will cache the messages and only start processing when they receive a TurnToken.
        await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
        await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
        {
            if (evt is AgentResponseUpdateEvent executorComplete)
            {
                Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}");
            }
        }

Krok 7: Vyčištění prostředků

Po použití správně vyčistíte agenty Azure Foundry:

        // Cleanup the agents created for the sample.
        await persistentAgentsClient.Administration.DeleteAgentAsync(frenchAgent.Id);
        await persistentAgentsClient.Administration.DeleteAgentAsync(spanishAgent.Id);
        await persistentAgentsClient.Administration.DeleteAgentAsync(englishAgent.Id);
    }

Jak to funguje

  1. Nastavení klienta Azure Foundry: Používá PersistentAgentsClient pomocí přihlašovacích údajů Azure CLI k autentizaci
  2. Vytvoření agenta: Vytvoří v Azure Foundry trvalé agenty s konkrétními pokyny pro překlad.
  3. Sekvenční zpracování: Francouzský agent nejprve překládá vstup, pak španělského agenta, pak anglického agenta.
  4. Vzor tokenu turn: Agenti ukládají zprávy do mezipaměti a zpracovávají pouze v případech, kdy obdrží TurnToken
  5. Aktualizace přenosu: AgentResponseUpdateEvent Umožňuje aktualizace tokenů v reálném čase, zatímco agenti generují odpovědi.
  6. Správa prostředků: Řádné vyčištění agentů Azure Foundry pomocí rozhraní API pro správu

Klíčové koncepty

  • Služba agenta Azure Foundry: Cloudoví agenti umělé inteligence s pokročilými možnostmi odůvodnění
  • PersistentAgentsClient: Klient pro vytváření a správu agentů v Azure Foundry
  • AgentResponseUpdateEvent: Streamování aktualizací v reálném čase během provádění agenta
  • TurnToken: Signál, který aktivuje zpracování agenta po ukládání zpráv do mezipaměti
  • Sekvenční pracovní postup: Agenti připojeni v potrubí, kde výstup proudí od jednoho k dalšímu

Dokončení implementace

Kompletní pracovní implementaci tohoto pracovního postupu agentů Azure Foundry najdete v ukázce FoundryAgent Program.cs v úložišti Agent Framework.

Co budete vytvářet

Vytvoříte pracovní postup, který:

  • Použití služby agenta Azure AI k vytvoření inteligentních agentů
  • Implementuje agenta Writer, který vytváří obsah na základě výzev.
  • Implementuje agenta revidujících, který poskytuje zpětnou vazbu k obsahu.
  • Připojuje agenty v sekvenčním řetězci pracovního postupu.
  • Streamuje aktualizace v reálném čase, když agenti zpracovávají požadavky.
  • Demonstruje správnou asynchronní správu kontextu pro klienty Azure AI.

Pokryté koncepty

Požadavky

  • Python 3.10 nebo novější
  • Nainstalovaná architektura agenta: pip install agent-framework-azure-ai --pre
  • Služba agenta Azure AI nakonfigurovaná se správnými proměnnými prostředí
  • Ověřování Azure CLI: az login

Krok 1: Import požadovaných závislostí

Začněte importem potřebných komponent pro agenty a pracovní postupy Azure AI:

import asyncio
from collections.abc import Awaitable, Callable
from contextlib import AsyncExitStack
from typing import Any

from agent_framework import AgentResponseUpdateEvent, WorkflowBuilder, WorkflowOutputEvent
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential

Krok 2: Vytvoření služby Azure AI Agent Factory

Vytvořte pomocnou funkci pro správu vytváření agenta Azure AI pomocí správného asynchronního zpracování kontextu:

async def create_azure_ai_agent() -> tuple[Callable[..., Awaitable[Any]], Callable[[], Awaitable[None]]]:
    """Helper method to create an Azure AI agent factory and a close function.

    This makes sure the async context managers are properly handled.
    """
    stack = AsyncExitStack()
    cred = await stack.enter_async_context(AzureCliCredential())

    client = await stack.enter_async_context(AzureAIAgentClient(async_credential=cred))

    async def agent(**kwargs: Any) -> Any:
        return await stack.enter_async_context(client.as_agent(**kwargs))

    async def close() -> None:
        await stack.aclose()

    return agent, close

Krok 3: Vytvoření specializovaných agentů Azure AI

Vytvořte dva specializované agenty pro vytváření obsahu a kontrolu:

async def main() -> None:
    agent, close = await create_azure_ai_agent()
    try:
        # Create a Writer agent that generates content
        writer = await agent(
            name="Writer",
            instructions=(
                "You are an excellent content writer. You create new content and edit contents based on the feedback."
            ),
        )

        # Create a Reviewer agent that provides feedback
        reviewer = await agent(
            name="Reviewer",
            instructions=(
                "You are an excellent content reviewer. "
                "Provide actionable feedback to the writer about the provided content. "
                "Provide the feedback in the most concise manner possible."
            ),
        )

Krok 4: Sestavení pracovního postupu

Připojte agenty v sekvenčním pracovním postupu pomocí fluent builderu:

        # Build the workflow with agents as executors
        workflow = WorkflowBuilder().set_start_executor(writer).add_edge(writer, reviewer).build()

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

Spusťte pracovní postup s přenosem dat, abyste mohli pozorovat aktualizace v reálném čase od obou agentů.

        last_executor_id: str | None = None

        events = workflow.run_stream("Create a slogan for a new electric SUV that is affordable and fun to drive.")
        async for event in events:
            if isinstance(event, AgentResponseUpdateEvent):
                # Handle streaming updates from agents
                eid = event.executor_id
                if eid != last_executor_id:
                    if last_executor_id is not None:
                        print()
                    print(f"{eid}:", end=" ", flush=True)
                    last_executor_id = eid
                print(event.data, end="", flush=True)
            elif isinstance(event, WorkflowOutputEvent):
                print("\n===== Final output =====")
                print(event.data)
    finally:
        await close()

Krok 6: Dokončení hlavní funkce

Zahrňte vše v hlavní funkci pomocí správného asynchronního spuštění.

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

Jak to funguje

  1. Nastavení klienta Azure AI: Používá AzureAIAgentClient se s přihlašovacími údaji Azure CLI pro ověřování
  2. Model služby Agent Factory: Vytvoří funkci továrny, která spravuje životní cyklus asynchronního kontextu pro více agentů.
  3. Sekvenční zpracování: Agent zapisovače nejprve vygeneruje obsah a pak ho předá agentovi revidujícímu.
  4. Aktualizace přenosu: AgentResponseUpdateEvent Umožňuje aktualizace tokenů v reálném čase, zatímco agenti generují odpovědi.
  5. Správa kontextu: Správné vyčištění prostředků Azure AI pomocí AsyncExitStack

Klíčové koncepty

  • Služba agenta Azure AI: Cloudová agenti AI s pokročilými možnostmi odůvodnění
  • AgentResponseUpdateEvent: Aktualizace streamování v reálném čase během spuštění agenta
  • AsyncExitStack: Správná správa asynchronních kontextů pro více prostředků
  • Model služby Agent Factory: Opakované vytvoření agenta se sdílenou konfigurací klienta
  • Sekvenční pracovní postup: Agenti připojeni v potrubí, kde výstup proudí od jednoho k dalšímu

Dokončení implementace

Kompletní funkční implementaci tohoto pracovního postupu agentů Azure AI najdete v ukázce azure_ai_agents_streaming.py v úložišti Agent Framework.

Další kroky