Compartilhar via


Agentes em fluxos de trabalho

Este tutorial demonstra como integrar agentes de IA em fluxos de trabalho usando o Agent Framework. Você aprenderá a criar fluxos de trabalho que aproveitam o poder de agentes especializados de IA para criação, revisão e outras tarefas colaborativas de conteúdo.

O que você construirá

Você criará um fluxo de trabalho que:

  • Usa o Serviço do Agente do Azure Foundry para criar agentes inteligentes
  • Implementa um agente de tradução francês que traduz a entrada para o francês
  • Implementa um agente de tradução espanhol que converte francês para espanhol
  • Implementa um agente de tradução em inglês que converte o espanhol de volta para o inglês
  • Conecta agentes em um pipeline de fluxo de trabalho sequencial
  • Transmite atualizações em tempo real enquanto agentes processam solicitações.
  • Demonstra a limpeza adequada de recursos para agentes do Azure Foundry

Conceitos abordados

Pré-requisitos

Etapa 1: Instalar pacotes NuGet

Primeiro, instale os pacotes necessários para seu projeto do .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

Etapa 2: Configurar o cliente do Azure Foundry

Configure o cliente do Azure Foundry com variáveis de ambiente e autenticação:

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 OpenAI client
        var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
            ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
        var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
        var persistentAgentsClient = new PersistentAgentsClient(endpoint, new AzureCliCredential());

Etapa 3: Criar método de fábrica do agente

Implemente um método auxiliar para criar agentes do Azure Foundry com instruções específicas:

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

Etapa 4: Criar agentes especializados do Azure Foundry

Crie três agentes de tradução usando o método auxiliar:

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

Etapa 5: Criar o fluxo de trabalho

Conecte os agentes em um fluxo de trabalho sequencial usando o WorkflowBuilder:

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

Etapa 6: Executar com Streaming

Execute o fluxo de trabalho com streaming para observar atualizações em tempo real de todos os agentes:

        // Execute the workflow
        await using StreamingRun run = await InProcessExecution.RunStreamingAsync(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())
        {
            if (evt is AgentResponseUpdateEvent executorComplete)
            {
                Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}");
            }
        }

Etapa 7: Limpeza de recursos

Limpe corretamente os agentes do Azure Foundry após o uso:

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

Como funciona

  1. Instalação do cliente do Azure Foundry: usa PersistentAgentsClient com as credenciais da CLI do Azure para autenticação
  2. Criação de agente: cria agentes persistentes no Azure Foundry com instruções específicas para tradução
  3. Processamento Sequencial: o agente francês converte a entrada primeiro, depois o agente espanhol e, em seguida, o agente inglês
  4. Ativar padrão de token: agentes armazenam mensagens em cache e só processam quando recebem um TurnToken
  5. Atualizações de streaming: AgentResponseUpdateEvent fornece atualizações de token em tempo real à medida que os agentes geram respostas
  6. Gerenciamento de Recursos: limpeza adequada de agentes do Azure Foundry usando a API de Administração

Conceitos Principais

  • Serviço do Agente do Azure Foundry: agentes de IA baseados em nuvem com recursos avançados de raciocínio
  • PersistentAgentsClient: Cliente para criar e gerenciar agentes no Azure Foundry
  • WorkflowEvent: eventos de saída (type="output") contêm dados de saída do agente (AgentResponseUpdate para streaming, AgentResponse para não streaming)
  • TurnToken: Sinal que dispara o processamento do agente após o cache de mensagens
  • Fluxo de trabalho sequencial: agentes conectados em um pipeline onde a saída flui de um para o outro

Implementação completa

Para obter a implementação completa deste fluxo de trabalho de agentes do Azure Foundry, consulte o exemplo FoundryAgent Program.cs no repositório do Agent Framework.

O que você construirá

Você criará um fluxo de trabalho que:

  • Usa AzureOpenAIResponsesClient para criar agentes inteligentes
  • Implementa um agente escritor que cria conteúdo com base em prompts
  • Implementa um agente revisor que fornece comentários sobre o conteúdo
  • Conecta agentes em um pipeline de fluxo de trabalho sequencial
  • Transmite atualizações em tempo real enquanto agentes processam solicitações.

Conceitos abordados

Pré-requisitos

  • Python 3.10 ou posterior
  • Agent Framework instalado: pip install agent-framework --pre
  • Respostas openai do Azure configuradas com variáveis de ambiente adequadas
  • Autenticação da CLI do Azure: az login

Etapa 1: Importar dependências necessárias

Comece importando os componentes necessários para fluxos de trabalho e agentes de respostas do Azure OpenAI:

import asyncio
import os

from agent_framework import AgentResponseUpdate, WorkflowBuilder
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential

Etapa 2: Criar um cliente de respostas openai do Azure

Crie um cliente compartilhado que você pode usar para construir vários agentes:

async def main() -> None:
    client = AzureOpenAIResponsesClient(
        project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
        deployment_name=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
        credential=AzureCliCredential(),
    )

Etapa 3: Criar agentes especializados

Crie dois agentes especializados para criação e revisão de conteúdo:

    # Create a Writer agent that generates content
    writer_agent = client.as_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_agent = client.as_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."
        ),
    )

Etapa 4: Criar o fluxo de trabalho

Conecte os agentes em um fluxo de trabalho sequencial usando o construtor:

        # Build the workflow with agents as executors
        workflow = WorkflowBuilder(start_executor=writer_agent).add_edge(writer_agent, reviewer_agent).build()

Etapa 5: Executar com Streaming

Execute o fluxo de trabalho com streaming para observar atualizações em tempo real de ambos os agentes:

    last_author: str | None = None

    events = workflow.run("Create a slogan for a new electric SUV that is affordable and fun to drive.", stream=True)
    async for event in events:
        if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
            update = event.data
            author = update.author_name
            if author != last_author:
                if last_author is not None:
                    print()
                print(f"{author}: {update.text}", end="", flush=True)
                last_author = author
            else:
                print(update.text, end="", flush=True)

Etapa 6: concluir a função principal

Encapsular tudo na função principal com a execução assíncrona adequada:

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

Como funciona

  1. Configuração do cliente: usa uma AzureOpenAIResponsesClient com credenciais da CLI do Azure para autenticação.
  2. Criação de Agente: cria agentes de Escritor e Revisor com base na mesma configuração do cliente.
  3. Processamento Sequencial: o Agente de Gravador gera conteúdo primeiro e, em seguida, passa-o para o Agente Revisor.
  4. Atualizações de streaming: eventos de saída (type="output") com AgentResponseUpdate dados fornecem atualizações de token em tempo real à medida que os agentes geram respostas.

Conceitos Principais

  • AzureOpenAIResponsesClient: cliente compartilhado usado para criar agentes de fluxo de trabalho com configuração consistente.
  • WorkflowEvent: eventos de saída (type="output") contêm dados de saída do agente (AgentResponseUpdate para streaming, AgentResponse para não streaming).
  • Fluxo de trabalho sequencial: agentes conectados em um pipeline em que a saída flui de um para o outro.

Implementação completa

Para obter a implementação de trabalho completa, consulte azure_ai_agents_streaming.py no repositório do Agent Framework.

Próximas etapas