Compartilhar via


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

Pré-requisitos

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.

  1. Em um diretório vazio no computador, use o comando dotnet new para criar um novo aplicativo de console:

    dotnet new console -o FunctionCallingAI
    
  2. Altere o diretório para a pasta do aplicativo:

    cd FunctionCallingAI
    
  3. 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
    
  4. Abra o aplicativo no código do Visual Studio ou seu editor de escolha

    code .
    

Criar o serviço de IA

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.

  1. Em um terminal ou prompt de comando, navegue até o src\quickstarts\azure-openai diretório do repositório de exemplo.

  2. 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

  1. Navegue até a raiz do seu projeto .NET a partir de um terminal ou prompt de comando.

  2. 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.

  1. 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ção Azure 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
    
  2. 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")]
    };
    
  3. 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}");
    
  4. 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

Próximos passos