Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nota
Este documento refere-se ao portal Microsoft Foundry (clássico).
Os agentes clássicos agora estão obsoletos e serão desativados em 31 de março de 2027. Use os novos agentes no geralmente disponível Microsoft Foundry Agents Service. Siga o guia de migração para atualizar suas cargas de trabalho.
Nota
Essa ferramenta só está disponível na 2025-05-15-preview API. É altamente recomendável migrar para usar a versão workflows da API 2025-11-15-preview.
Os agentes conectados no Serviço do Foundry Agent permitem dividir tarefas complexas em funções coordenadas e especializadas, sem a necessidade de um orquestrador personalizado ou lógica de roteamento codificado à mão. Com essa funcionalidade, você pode projetar sistemas em que um agente primário delega inteligentemente a subagentes criados com finalidade, simplificando fluxos de trabalho como suporte ao cliente, pesquisa de mercado, resumo jurídico e análise financeira.
Em vez de sobrecarregar um agente com muitas habilidades, você pode criar agentes focados e reutilizáveis que colaboram perfeitamente, dimensionando o desempenho e a manutenção.
Características
- Design de fluxo de trabalho simplificado: divida tarefas complexas entre agentes especializados para reduzir a complexidade e melhorar a clareza.
- Nenhuma orquestração personalizada é necessária: o agente principal usa a linguagem natural para rotear tarefas, eliminando a necessidade de lógica codificada.
- Extensibilidade fácil: adicione novos agentes conectados (por exemplo, tradução ou pontuação de risco) sem modificar o agente principal.
- Confiabilidade e rastreabilidade aprimoradas: atribua responsabilidades focadas a cada agente para facilitar a depuração e melhor auditoria.
- Opções de configuração flexíveis: Configure agentes usando uma interface sem código no portal do Foundry ou programaticamente por meio do SDK do Python.
Exemplo: criar um agente de revisão de contrato modular com agentes conectados
À medida que seus casos de uso aumentam em complexidade, você pode dimensionar sua solução de IA atribuindo responsabilidades específicas a vários agentes conectados. Isso permite que cada agente se especialize em uma tarefa estreita enquanto o agente principal coordena o fluxo de trabalho geral. Esse design modular aprimora a precisão, a manutenção e a rastreabilidade, especialmente para domínios pesados de documentos, como legal, conformidade e aquisição. Vamos percorrer um exemplo real de como criar um Assistente de Revisão de Contrato usando agentes conectados.
Visão geral da arquitetura
Agente principal – orquestrador de contratos
Atua como a interface central. Ele interpreta os prompts do usuário (como "resumir cláusulas", "comparar rascunhos" ou "verificar conformidade"), determina o tipo de tarefa e delega-o ao agente conectado apropriado.
Ferramentas Usadas: Nenhuma diretamente
Responsabilidades: Classificação e delegação de intenção
Descrição do agente de exemplo:
"Você é um assistente de revisão de contrato. Dependendo da consulta do usuário, determine se a tarefa envolve resumo de cláusula, comparação de documentos ou verificação de conformidade e rotear adequadamente."
Agente conectado 1: resumo da cláusula
Extrai seções principais (como Terminação, Indenidade ou Confidencialidade) de um contrato e as resume em linguagem simples.
Ferramentas usadas:
- Pesquisa de Arquivo para recuperar o contrato carregado
- Interpretador de Código para verificar o documento em busca de títulos de cláusula e resumir o conteúdo
Responsabilidades: Extração e resumo de informações
Descrição do agente de exemplo:
Extraia e resuma as cláusulas 'Rescisão', 'Termos de pagamento' e 'Indenização' do contrato fornecido.
Agente conectado 2: validador de conformidade
Verifica o contrato em relação aos padrões internos ou às diretrizes carregadas para identificar idiomas arriscados ou não compatíveis.
Ferramentas usadas:
- Pesquisa de Arquivos para acessar documentos de política interna ou modelos de contrato
- Ferramenta OpenAPI para chamar uma API de regras de conformidade interna
- Azure Functions ou Aplicativos Lógicos do Azure para executar cheques lógicos simples (por exemplo, presença de cláusula necessária ou validações de limiar)
Responsabilidades: Correspondência de políticas e sinalização de risco
Exemplo de instrução de prompt:
"Examine este documento em relação às diretrizes de conformidade da empresa e sinalize quaisquer desvios do modelo aprovado."
Limitações
- Os agentes conectados não podem chamar funções locais usando a ferramenta de chamada de função. Recomendamos usar a ferramenta OpenAPI ou Azure Functions em vez disso.
- No momento, não é possível garantir que as citações sejam passadas por agentes conectados. Você pode tentar usar a engenharia de prompt combinada com modelos diferentes para tentar melhorar a possibilidade de que as citações sejam geradas pelo agente principal, mas os resultados estão sujeitos à variabilidade.
- Os agentes conectados têm uma profundidade máxima de 2. Um agente pai pode ter vários irmãos subagentes, mas os subagentes não podem ter seus próprios subagentes. Exceder essa profundidade resulta em
Assistant Tool Call Depth Error.
Criando uma configuração de vários agentes
- Navegue até a página Agentes no portal
- Selecione um agente existente na lista ou crie um novo.
- Role para baixo até a seção Agentes conectados no painel configurado do agente e selecione Adicionar +.
Na caixa de diálogo exibida, escolha um agente para o agente principal para o qual delegar tarefas e descreva:
- Selecione um agente existente na lista suspensa. Esse é o agente conectado ao qual o agente principal delegará tarefas.
- Insira um nome exclusivo para o agente conectado (somente letras e sublinhados). Esse nome é usado para chamada de função no nível da API. Mantenha-o descritivo e legível pelo computador para maximizar a precisão do recall (por exemplo,
summarize_text, ).lookup_product_info - Adicione uma descrição clara de quando e por que o agente conectado deve ser invocado. Isso ajuda a orientar a tomada de decisão do agente principal sobre quando entregar tarefas a agentes conectados durante o runtime.
Selecione Adicionar +
Repita as etapas 3 a 5 para adicionar agentes especializados adicionais ao agente principal.
Depois que os agentes conectados aparecerem no painel de instalação, role para cima e selecione Experimentar no Playground
Use prompts de teste no Agent Playground para validar que o agente principal roteia corretamente as tarefas para os agentes conectados quando aplicável. Por exemplo, se você criou um agente principal chamado
research_agent, que não tem nenhuma ferramenta configurada e conectou um agente chamadostock_price_bot, tente um prompt como:"Qual é o preço atual das ações de Microsoft?"
O
research_agentdeve delegar esta solicitação astock_price_botcom base na descrição de roteamento que você definiu.
Usar o SDK do .NET
Nota
Isso mostra um uso síncrono. Você pode encontrar um exemplo assíncrono em GitHub
Para permitir que o Agente use um agente conectado, use ConnectedAgentToolDefinition junto com a ID do agente, o nome e uma descrição.
Primeiro, precisamos criar o cliente do agente e ler as variáveis de ambiente, que serão usadas nas próximas etapas.
var projectEndpoint = configuration["ProjectEndpoint"]; var modelDeploymentName = configuration["ModelDeploymentName"]; PersistentAgentsClient client = new(projectEndpoint, new DefaultAzureCredential());Em seguida, criaremos o agente
mainAgentprincipal e o agente conectadostockAgentusando o cliente do agente. Esse agente conectado será usado para inicializar oConnectedAgentToolDefinition.PersistentAgent stockAgent = client.Administration.CreateAgent( model: modelDeploymentName, name: "stock_price_bot", instructions: "Your job is to get the stock price of a company. If you don't know the realtime stock price, return the last known stock price." // tools: [...] tools that would be used to get stock prices ); ConnectedAgentToolDefinition connectedAgentDefinition = new(new ConnectedAgentDetails(stockAgent.Id, stockAgent.Name, "Gets the stock price of a company")); PersistentAgent mainAgent = client.Administration.CreateAgent( model: modelDeploymentName, name: "stock_price_bot", instructions: "Your job is to get the stock price of a company, using the available tools.", tools: [connectedAgentDefinition] );Agora, criaremos o thread, adicionaremos a mensagem, contendo uma pergunta para o agente e iniciaremos a execução.
PersistentAgentThread thread = client.Threads.CreateThread(); // Create message to thread PersistentThreadMessage message = client.Messages.CreateMessage( thread.Id, MessageRole.User, "What is the stock price of Microsoft?"); // Run the agent ThreadRun run = client.Runs.CreateRun(thread, agent); do { Thread.Sleep(TimeSpan.FromMilliseconds(500)); run = client.Runs.GetRun(thread.Id, run.Id); } while (run.Status == RunStatus.Queued || run.Status == RunStatus.InProgress); // Confirm that the run completed successfully if (run.Status != RunStatus.Completed) { throw new Exception("Run did not complete successfully, error: " + run.LastError?.Message); }Imprima as mensagens do agente no console em ordem cronológica.
Pageable<PersistentThreadMessage> messages = client.Messages.GetMessages( threadId: thread.Id, order: ListSortOrder.Ascending ); foreach (PersistentThreadMessage threadMessage in messages) { Console.Write($"{threadMessage.CreatedAt:yyyy-MM-dd HH:mm:ss} - {threadMessage.Role,10}: "); foreach (MessageContent contentItem in threadMessage.ContentItems) { if (contentItem is MessageTextContent textItem) { string response = textItem.Text; if (textItem.Annotations != null) { foreach (MessageTextAnnotation annotation in textItem.Annotations) { if (annotation is MessageTextUriCitationAnnotation urlAnnotation) { response = response.Replace(urlAnnotation.Text, $" [{urlAnnotation.UriCitation.Title}]({urlAnnotation.UriCitation.Uri})"); } } } Console.Write($"Agent response: {response}"); } else if (contentItem is MessageImageFileContent imageFileItem) { Console.Write($"<image from ID: {imageFileItem.FileId}"); } Console.WriteLine(); } }Limpe os recursos excluindo thread e agente.
agentClient.DeleteThread(threadId: thread.Id); agentClient.DeleteAgent(agentId: agent.Id); agentClient.DeleteAgent(agentId: connectedAgent.Id);
Criando uma configuração de vários agentes
Para criar uma configuração de vários agentes, siga estas etapas:
Inicialize o objeto cliente.
import os from azure.ai.projects import AIProjectClient from azure.ai.agents.models import ConnectedAgentTool, MessageRole from azure.identity import DefaultAzureCredential project_client = AIProjectClient( endpoint=os.environ["PROJECT_ENDPOINT"], credential=DefaultAzureCredential(), )Crie um agente que será conectado a um agente "principal".
stock_price_agent = project_client.agents.create_agent( model=os.environ["MODEL_DEPLOYMENT_NAME"], name="stock_price_bot", instructions="Your job is to get the stock price of a company. If you don't know the realtime stock price, return the last known stock price.", #tools=... # tools to help the agent get stock prices )Inicializar a ferramenta com a identificação, o nome e a descrição do agente conectado.
connected_agent = ConnectedAgentTool( id=stock_price_agent.id, name=stock_price_agent.name, description="Gets the stock price of a company" )Crie o agente principal que usará o agente conectado.
agent = project_client.agents.create_agent( model=os.environ["MODEL_DEPLOYMENT_NAME"], name="my-agent", instructions="You are a helpful agent, and use the available tools to get stock prices.", tools=connected_agent.definitions, ) print(f"Created agent, ID: {agent.id}")Crie um thread e adicione uma mensagem a ele.
thread = project_client.agents.threads.create() print(f"Created thread, ID: {thread.id}") # Create message to thread message = project_client.agents.messages.create( thread_id=thread.id, role=MessageRole.USER, content="What is the stock price of Microsoft?", ) print(f"Created message, ID: {message.id}")Crie uma tarefa e aguarde até que ela seja concluída.
# Create and process Agent run in thread with tools run = project_client.agents.runs.create_and_process(thread_id=thread.id, agent_id=agent.id) print(f"Run finished with status: {run.status}") if run.status == "failed": print(f"Run failed: {run.last_error}") # Delete the Agent when done project_client.agents.delete_agent(agent.id) print("Deleted agent") # Delete the connected Agent when done project_client.agents.delete_agent(stock_price_agent.id) print("Deleted connected agent")Imprima a resposta do agente. O agente principal compilará as respostas dos agentes conectados e fornecerá a resposta. as respostas do agente conectado só são visíveis para o agente principal e não para o usuário final.
# Print the Agent's response message with optional citation response_message = project_client.agents.messages.get_last_message_by_role( thread_id=thread.id, role=MessageRole.AGENT ) if response_message: for text_message in response_message.text_messages: print(f"Agent response: {text_message.text.value}") for annotation in response_message.url_citation_annotations: print(f"URL Citation: [{annotation.url_citation.title}]({annotation.url_citation.url})")
Publicar agentes conectados no Azure
Depois de testar seus agentes conectados, você pode publicá-los em Azure para uso em produção. O processo de publicação para agentes conectados tem uma diferença fundamental em relação à publicação de agentes individuais: o agente principal e todos os agentes conectados devem ser publicados separadamente como Aplicativos do Agente.
Considerações específicas de agentes conectados
- Publique cada agente individualmente: publique os agentes conectados primeiro e, em seguida, o agente principal. Cada um recebe um endpoint estável e uma identidade própria de Agente.
-
O roteamento continua a funcionar: Após a publicação, o agente principal roteia automaticamente para os agentes conectados publicados usando os IDs de agente no
ConnectedAgentToolDefinition. Nenhuma alteração de código é necessária. - Gerenciamento de identidade: os agentes conectados publicados recebem sua própria Identidade do Agente. Reconfigure as permissões para quaisquer recursos do Azure que os seus agentes conectados acessem, pois as permissões da identidade de desenvolvimento compartilhado não são transferidas.
Para obter instruções de publicação completas, incluindo como publicar agentes por meio do Portal ou da API REST, configuração de autenticação e consumo de agentes publicados, consulte Aplicativos de Agente no Microsoft Foundry.
Conteúdo relacionado
- Aplicações de Agente no Microsoft Foundry
- Conceitos de identidade do agente
- controle de acesso baseado em funções para Microsoft Foundry