Condividi tramite


Richiamare le funzioni .NET usando un modello di intelligenza artificiale

In questa guida introduttiva, creerai un'app di chat di intelligenza artificiale per console .NET, per connetterti a un modello di intelligenza artificiale con le chiamate di funzioni locali abilitate. L'app usa la libreria di Microsoft.Extensions.AI in modo da poter scrivere codice usando astrazioni di intelligenza artificiale anziché un SDK specifico. Le astrazioni di intelligenza artificiale consentono di modificare il modello di intelligenza artificiale sottostante con modifiche minime al codice.

Nota

La libreria Microsoft.Extensions.AI è attualmente in anteprima.

Prerequisiti

Prerequisiti

Nota

È anche possibile usare il Kernel Semantico per eseguire le attività in questo articolo. Semantic Kernel è un SDK leggero e open source che consente di creare agenti di intelligenza artificiale e integrare i modelli di intelligenza artificiale più recenti nelle app .NET.

Clonare il repository di esempio

È possibile creare la tua propria app seguendo la procedura descritta nelle sezioni successive oppure clonare il repository GitHub che contiene le app di esempio completate per tutte le guide rapide. Se prevedi di utilizzare Azure OpenAI, il repository di esempio è strutturato anche come modello CLI per sviluppatori Azure, capace di effettuare automaticamente il provisioning di una risorsa Azure OpenAI per te.

git clone https://github.com/dotnet/ai-samples.git

Creare l'app

Completare i passaggi seguenti per creare un'app console .NET per connettersi a un modello di intelligenza artificiale.

  1. In una directory vuota nel computer usare il comando dotnet new per creare una nuova app console:

    dotnet new console -o FunctionCallingAI
    
  2. Modificare la directory nella cartella dell'app:

    cd FunctionCallingAI
    
  3. Installare i pacchetti necessari:

    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. Aprire l'app in Visual Studio Code o nell'editor preferito

    code .
    

Creare il servizio di intelligenza artificiale

Il repository GitHub di esempio è strutturato come modello CLI per sviluppatori di Azure (azd), che azd può utilizzare per fornire il servizio e il modello Azure OpenAI.

  1. Da un terminale o un prompt dei comandi, navigare nella directory src\quickstarts\azure-openai del repository di esempio.

  2. Eseguire il comando azd up per effettuare il provisioning delle risorse OpenAI di Azure. Potrebbero essere necessari alcuni minuti per creare il servizio Azure OpenAI e distribuire il modello.

    azd up
    

    azd configura anche i segreti utente necessari per l'app di esempio, ad esempio l'endpoint OpenAI di Azure e il nome del modello.

Configurare l'app

  1. Passare alla radice del proprio progetto .NET da un terminale o dal prompt dei comandi.

  2. Eseguire i comandi seguenti per configurare la chiave API OpenAI come segreto per l'app di esempio:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    dotnet user-secrets set ModelName <your-openai-model-name>
    

Aggiungere il codice dell'app

L'app usa il pacchetto Microsoft.Extensions.AI per inviare e ricevere richieste al modello di intelligenza artificiale.

  1. Nel file Program.cs aggiungere il codice seguente per connettersi ed eseguire l'autenticazione al modello di intelligenza artificiale. Il ChatClient è configurato anche per l'uso della chiamata di funzione, che consente alle funzioni .NET nel codice di essere chiamate dal modello di intelligenza artificiale.

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

    Nota

    DefaultAzureCredential cerca le credenziali di autenticazione dagli strumenti locali. Se non si usa il modello di azd per effettuare il provisioning della risorsa OpenAI di Azure, è necessario assegnare il ruolo Azure AI Developer all'account usato per accedere a Visual Studio o all'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Eseguire l'autenticazione ai servizi di intelligenza artificiale di Azure con .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. Creare un nuovo oggetto ChatOptions che contiene una funzione inline che il modello di intelligenza artificiale può chiamare per ottenere il meteo corrente. La dichiarazione di funzione include un delegato per eseguire la logica e i parametri di nome e descrizione per descrivere lo scopo della funzione al modello di intelligenza artificiale.

    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. Aggiungere una richiesta di sistema al chatHistory per fornire contesto e istruzioni al modello. Inviare una richiesta dell'utente con una domanda che richiede al modello di intelligenza artificiale di chiamare la funzione registrata per rispondere correttamente alla domanda.

    // 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. Usare il comando dotnet run per eseguire l'app:

    dotnet run
    

    L'app stampa la risposta di completamento dal modello di intelligenza artificiale che include i dati forniti dalla funzione .NET. Il modello di intelligenza artificiale ha compreso che la funzione registrata è stata disponibile e chiamata automaticamente per generare una risposta corretta.

Pulire le risorse

Quando l'applicazione o le risorse di esempio non sono più necessarie, rimuovere la distribuzione corrispondente e tutte le risorse.

azd down

Passaggi successivi