Invoque funções .NET usando um modelo de IA
Neste início rápido, cria uma aplicação de chat AI do console .NET para se conectar a um modelo de IA com chamadas a funções locais ativadas. O aplicativo usa a biblioteca Microsoft.Extensions.AI para que você possa escrever código usando abstrações de IA em vez de um SDK específico. As abstrações de IA permitem que você altere o modelo de IA subjacente com alterações mínimas de código.
Observação
A Microsoft.Extensions.AI
biblioteca está atualmente em Prévia.
Pré-requisitos
- SDK do .NET 8.0 ou superior - Instale o SDK do .NET 8.0.
- Uma chave de API do OpenAI para que você possa executar este exemplo.
Pré-requisitos
- SDK do .NET 8.0 ou superior - Instale o SDK do .NET 8.
- Uma assinatura do Azure - Crie uma gratuitamente.
- Acesso ao serviço Azure OpenAI.
- CLI do Desenvolvedor do Azure (opcional) - Instalar ou atualizar a CLI do Desenvolvedor do Azure.
Observação
Você também pode usar do Kernel Semântico para realizar as tarefas neste artigo. O Semantic Kernel é um SDK leve e de código aberto que permite criar agentes de IA e integrar os modelos de IA mais recentes em seus aplicativos .NET.
Clone o repositório de exemplo
Você pode criar seu próprio aplicativo usando as etapas nas seções à frente ou pode clonar o repositório GitHub que contém os aplicativos de exemplo concluídos para todos os inícios rápidos. Se você planeja usar o Azure OpenAI, o repositório de exemplo também é estruturado como um modelo de CLI do Desenvolvedor do Azure que pode provisionar um recurso do Azure OpenAI para você.
git clone https://github.com/dotnet/ai-samples.git
Criar a aplicação
Conclua as etapas a seguir para criar um aplicativo de console .NET para se conectar a um modelo de IA.
Em um diretório vazio no computador, use o comando
dotnet new
para criar um novo aplicativo de console:dotnet new console -o FunctionCallingAI
Altere o diretório para a pasta do aplicativo:
cd FunctionCallingAI
Instale os pacotes necessários:
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Abra o aplicativo no código do Visual Studio ou seu editor de escolha
code .
Criar o serviço de IA
- CLI do Azure para Desenvolvedores
- Azure CLI
- Portal do Azure
O repositório GitHub de exemplo está estruturado como um modelo da CLI (azd
) para Desenvolvedores do Azure, que azd
pode ser usada para configurar o serviço e o modelo Azure OpenAI para si.
Em um terminal ou prompt de comando, navegue até o
src\quickstarts\azure-openai
diretório do repositório de exemplo.Execute o
azd up
comando para provisionar os recursos do Azure OpenAI. Pode levar vários minutos para criar o serviço Azure OpenAI e implantar o modelo.azd up
azd
também configura os necessários segredos de utilizador para a aplicação de exemplo, como o endpoint do Azure OpenAI e o nome do modelo.
Configurar o aplicativo
Navegue até a raiz do seu projeto .NET a partir de um terminal ou prompt de comando.
Execute os seguintes comandos para configurar sua chave de API OpenAI como um segredo para o aplicativo de exemplo:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key> dotnet user-secrets set ModelName <your-openai-model-name>
Adicionar o código do aplicativo
O aplicativo usa o Microsoft.Extensions.AI
pacote para enviar e receber solicitações para o modelo de IA.
No arquivo Program.cs, adicione o código a seguir para se conectar e autenticar no modelo AI. O
ChatClient
também é configurado para usar a invocação de função, o que permite que o modelo de IA chame funções .NET em seu código.using Microsoft.Extensions.Configuration; using Microsoft.Extensions.AI; using Azure.AI.OpenAI; using Azure.Identity; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string deployment = config["AZURE_OPENAI_GPT_NAME"]; IChatClient client = new ChatClientBuilder() .UseFunctionInvocation() .Use( new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .AsChatClient(deployment));
Observação
DefaultAzureCredential procura credenciais de autenticação a partir das suas ferramentas locais. Se você não estiver usando o modelo
azd
para provisionar o recurso do Azure OpenAI, precisará atribuir a funçãoAzure AI Developer
à conta usada para entrar no Visual Studio ou na CLI do Azure. Para mais informações, consulte Autenticar nos serviços de IA do Azure com o .NET.using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; using OpenAI; IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string? model = config["ModelName"]; string? key = config["OpenAIKey"]; IChatClient client = new ChatClientBuilder(new OpenAIClient(key).AsChatClient(model ?? "gpt-4o")) .UseFunctionInvocation() .Build(); // Add a new plugin with a local .NET function
Crie um novo
ChatOptions
objeto que contenha uma função embutida que o modelo de IA pode chamar para obter o clima atual. A declaração de função inclui um delegado para executar a lógica e parâmetros de nome e descrição para descrever a finalidade da função para o modelo de IA.var chatOptions = new ChatOptions { Tools = [AIFunctionFactory.Create((string location, string unit) => { // Here you would call a weather API // to get the weather for the location. return "Periods of rain or drizzle, 15 C"; }, "get_current_weather", "Get the current weather in a given location")] };
Adicione um prompt do sistema ao
chatHistory
para fornecer contexto e instruções ao modelo. Envie um prompt do usuário com uma pergunta que exija que o modelo de IA chame a função registrada para responder corretamente à pergunta.// System prompt to provide context. List<ChatMessage> chatHistory = [new(ChatRole.System, """ You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly. """)]; // Weather conversation relevant to the registered function. chatHistory.Add(new ChatMessage(ChatRole.User, "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like?")); Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); ChatResponse response = await client.GetResponseAsync(chatHistory, chatOptions); Console.WriteLine($"Assistant >>> {response.Text}");
Use o
dotnet run
comando para executar o aplicativo:dotnet run
O aplicativo imprime a resposta de conclusão do modelo de IA, que inclui dados fornecidos pela função .NET. O modelo de IA entendeu que a função registrada estava disponível e a chamou automaticamente para gerar uma resposta adequada.
Limpar recursos
Quando já não necessitar mais da aplicação ou dos recursos de exemplo, remova a implementação correspondente e todos os recursos.
azd down