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.
Este tutorial demonstra como adicionar capacidade agente a um aplicativo CRUD de núcleo de ASP.NET baseado em dados existente. Ele faz isso usando duas abordagens diferentes: Microsoft Agent Framework e Foundry Agent Service.
Se seu aplicativo Web já tiver recursos úteis, como compras, reservas de hotéis ou gerenciamento de dados, é relativamente simples adicionar funcionalidade de agente ao seu aplicativo Web encapsulando essas funcionalidades como ferramentas (para o Microsoft Agent Framework) ou como um ponto de extremidade OpenAPI (para o Serviço do Foundry Agent). Neste tutorial, você começa com um simples aplicativo de lista to-do. Ao final, você poderá criar, atualizar e gerenciar tarefas com um agente em um aplicativo do Serviço de Aplicativo.
O Microsoft Agent Framework e o Foundry Agent Service permitem criar aplicativos Web agente com funcionalidades controladas por IA. A tabela a seguir mostra algumas das considerações e compensações:
| Consideration | Estrutura do Microsoft Agent | Serviço de Agente da Fábrica |
|---|---|---|
| Performance | Rápido (executado localmente) | Mais lento (serviço gerenciado e remoto) |
| Development | Código completo, controle máximo | Código baixo, integração rápida |
| Testing | Testes manuais/de unidade no código | Playground integrado para testes rápidos |
| Scalability | App-managed | Gerenciado pelo Azure, dimensionado automaticamente |
| Barreiras de segurança | Implementação personalizada necessária | Segurança de conteúdo integrada e moderação |
| Identidade | Implementação personalizada necessária | ID do agente embutido e autenticação |
| Enterprise | Integração personalizada necessária | Implantação embutida do Microsoft 365/Teams e chamadas de ferramentas integradas do Microsoft 365. |
Neste tutorial, você aprenderá como:
- Converta a funcionalidade de aplicativo existente em ferramentas para o Microsoft Agent Framework.
- Adicione as ferramentas a um agente do Microsoft Agent Framework e use-as em um aplicativo Web.
- Converta a funcionalidade de aplicativo existente em um endpoint OpenAPI para o Foundry Agent Service.
- Chame um agente do Foundry em um aplicativo Web.
- Atribua as permissões necessárias para conectividade de identidade gerenciada.
Prerequisites
- Uma conta do Azure com uma assinatura ativa – crie uma conta gratuitamente.
- Conta do GitHub para usar os Codespaces do GitHub – saiba mais sobre os codespaces do GitHub.
Abra o exemplo com codespaces
A maneira mais fácil de começar é usando o GitHub Codespaces, que fornece um ambiente de desenvolvimento completo com todas as ferramentas necessárias pré-instaladas.
Navegue até o repositório GitHub em https://github.com/Azure-Samples/app-service-agentic-semantic-kernel-ai-foundry-agent.
Selecione o botão Código , selecione a guia Codespaces e selecione Criar codespace no principal.
Aguarde alguns instantes para que o codespace seja inicializado. Quando estiver pronto, você verá um ambiente de desenvolvimento totalmente configurado no navegador.
Execute o aplicativo localmente:
dotnet runQuando você vir que seu aplicativo em execução na porta 5280 está disponível, selecione Abrir no Navegador e adicione algumas tarefas.
Revisar o código do agente
Ambas as abordagens usam o mesmo padrão de implementação, em que o agente é inicializado como um serviço (em Program.cs) em um provedor e injetado no respectivo componente Blazor.
O AgentFrameworkProvider é inicializado em Serviços/AgentFrameworkProvider.cs. O código de inicialização faz o seguinte:
- Cria um
IChatClientdo OpenAI do Azure usando oAzureOpenAIClient. - Obtém a instância
TaskCrudToolque encapsula a funcionalidade do aplicativo CRUD (em Ferramentas/TaskCrudTool.cs). OsDescriptionatributos nos métodos de ferramenta ajudam o agente a determinar como chamá-los. - Cria um agente de IA usando o
CreateAIAgent()com instruções e ferramentas registradas viaAIFunctionFactory.Create(). - Cria um tópico para que o agente mantenha a conversa durante a navegação.
// Create IChatClient
IChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deployment)
.AsIChatClient();
// Get TaskCrudTool instance from service provider
var taskCrudTool = sp.GetRequiredService<TaskCrudTool>();
// Create agent with tools
var agent = chatClient.CreateAIAgent(
instructions: @"You are an agent that manages tasks using CRUD operations.
Use the provided functions to create, read, update, and delete tasks.
Always call the appropriate function for any task management request.
Don't try to handle any requests that are not related to task management.
When handling requests, if you're missing any information, don't make it up but prompt the user for it instead.",
tools:
[
AIFunctionFactory.Create(taskCrudTool.CreateTaskAsync),
AIFunctionFactory.Create(taskCrudTool.ReadTasksAsync),
AIFunctionFactory.Create(taskCrudTool.UpdateTaskAsync),
AIFunctionFactory.Create(taskCrudTool.DeleteTaskAsync)
]);
// Create thread for this scoped instance (persists across navigation)
var thread = agent.GetNewThread();
return (agent, thread);
Sempre que o usuário envia uma mensagem, o componente Blazor (em Components/Pages/AgentFrameworkAgent.razor) chama Agent.RunAsync() com a entrada do usuário e o thread do agente. O thread do agente mantém o controle do histórico de chat.
var response = await this.Agent.RunAsync(sentInput, this.agentThread);
Implantar o aplicativo de exemplo
O repositório de exemplo contém um modelo da CLI do Desenvolvedor do Azure (AZD), que cria um aplicativo do Serviço de Aplicativo com identidade gerenciada e implanta seu aplicativo de exemplo.
No terminal, faça logon no Azure usando a CLI do Desenvolvedor do Azure:
azd auth loginSiga as instruções para concluir o processo de autenticação.
Implante o aplicativo do Serviço de Aplicativo do Azure com o modelo do AZD:
azd upQuando solicitado, dê as seguintes respostas:
Question Answer Insira um novo nome de ambiente: Digite um nome exclusivo. Selecione uma Assinatura do Azure para usar: Selecione a assinatura. Escolha um grupo de recursos a ser usado: Selecione Criar um grupo de recursos. Selecione um local para criar o grupo de recursos em: Selecione Suécia Central. Insira um nome para o novo grupo de recursos: Digite ENTER. Na saída do AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL fica assim na saída do AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Selecione o item de esquema OpenAPI para abrir o esquema OpenAPI gerado automaticamente no caminho padrão
/openapi/v1.json. Você precisará desse esquema mais tarde.Após a implantação bem-sucedida, você verá uma URL para seu aplicativo implantado.
Agora você tem um aplicativo do Serviço de Aplicativo com uma identidade gerenciada atribuída pelo sistema.
Criar e configurar o recurso microsoft foundry
No Portal Foundry, verifique se o botão de rádio New Foundry superior está definido como ativo e crie um projeto.
Implante um modelo de sua escolha (consulte o Início Rápido do Microsoft Foundry: Criar recursos).
Na parte superior da área de testes do modelo, copie o nome do modelo.
A maneira mais fácil de obter o endpoint do Azure OpenAI ainda é através do portal clássico. Selecione o botão de opção Novo Foundry e, em seguida, OpenAI do Azure; depois, copie a URL no ponto de extremidade do OpenAI do Azure para uso posterior.
Atribuir permissões necessárias
No menu superior do novo portal do Foundry, selecione Operar e, em seguida, selecione Administrador. Na linha do projeto foundry, você deverá ver dois links. O que está na coluna Nome é o recurso do projeto Foundry, e o que está na coluna Recurso pai é o recurso Foundry.
Selecione o recurso Foundry no recurso Pai e, em seguida, selecione Gerenciar esse recurso no portal do Azure. No portal do Azure, você pode atribuir acesso baseado em função para o recurso ao aplicativo Web implantado.
Adicione a seguinte função para a identidade gerenciada do aplicativo do Serviço de Aplicativos:
Recurso de destino Função necessária Necessário para Fundição Usuário dos Serviços Cognitivos OpenAI O serviço de conclusão de chat no Microsoft Agent Framework. Para obter instruções, confira Atribuir funções do Azure usando o portal do Azure.
Configurar variáveis de conexão em seu aplicativo de exemplo
Abra appsettings.json. Usando os valores copiados anteriormente do portal do Foundry, configure as seguintes variáveis:
Variable Description AzureOpenAIEndpointEndpoint do Azure OpenAI (copiado do portal clássico do Foundry). ModelDeploymentNome do modelo na implantação (copiado do ambiente de testes de modelos no novo portal Foundry). Note
Para manter o tutorial simples, você usará essas variáveis em appsettings.json em vez de substituí-las com configurações de aplicativo no Serviço de Aplicativo.
Note
Para manter o tutorial simples, você usará essas variáveis em appsettings.json em vez de substituí-las com configurações de aplicativo no Serviço de Aplicativo.
Entre no Azure com a CLI do Azure:
az loginIsso permite que a biblioteca de clientes da Identidade do Azure no código de exemplo receba um token de autenticação para o usuário conectado. Lembre-se de que você adicionou a função necessária para esse usuário anteriormente.
Execute o aplicativo localmente:
dotnet runQuando você vir Seu aplicativo em execução na porta 5280 está disponível, selecione Abrir no Navegador.
Selecione o link do Agente do Microsoft Agent Framework e o link do Serviço de Agente da Fábrica para experimentar a interface de bate-papo. Se você receber uma resposta, seu aplicativo estará se conectando com êxito ao recurso Microsoft Foundry.
De volta ao codespace do GitHub, implante as alterações do aplicativo.
azd upNavegue até o aplicativo implantado novamente e teste os agentes de chat.
Limpar os recursos
Quando terminar de usar o aplicativo, você poderá excluir os recursos do Serviço de Aplicativo para evitar incorrer em custos adicionais:
azd down --purge
Como o modelo do AZD não inclui os recursos do Microsoft Foundry, você precisa excluí-los manualmente, se desejar.