Richiamare le funzioni .NET usando un modello di intelligenza artificiale
In questa guida introduttiva si crea un'app di chat di intelligenza artificiale console .NET per connettersi a un modello di intelligenza artificiale con chiamate di funzioni locali abilitate. L'app usa la Microsoft.Extensions.AI
libreria 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 Microsoft.Extensions.AI
libreria è attualmente in anteprima.
Prerequisiti
- .NET 8.0 SDK - Installare .NET 8.0 SDK.
- Una chiave API da OpenAI per poter eseguire questo esempio.
- In Windows è necessario PowerShell
v7+
. Per convalidare la versione, eseguirepwsh
in un terminale. Dovrebbe restituire la versione corrente. Se restituisce un errore, eseguire il comando seguente:dotnet tool update --global PowerShell
.
Prerequisiti
- .NET 8 SDK - Installare .NET 8 SDK.
- Una sottoscrizione di Azure: crearne una gratuitamente.
- Accedere al Servizio OpenAI di Azure.
- Interfaccia della riga di comando per sviluppatori di Azure (facoltativo): installare o aggiornare l'interfaccia della riga di comando per sviluppatori di Azure.
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 un'app personalizzata seguendo la procedura descritta nelle sezioni in anticipo oppure clonare il repository GitHub che contiene le app di esempio completate per tutte le guide introduttive. Se si prevede di usare Azure OpenAI, il repository di esempio è strutturato anche come modello dell'interfaccia della riga di comando per sviluppatori di Azure in grado di effettuare automaticamente il provisioning di una risorsa OpenAI di Azure.
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.
In una directory vuota nel computer usare il
dotnet new
comando per creare una nuova app console:dotnet new console -o FunctionCallingAI
Modificare la directory nella cartella dell'app:
cd FunctionCallingAI
Installare i pacchetti necessari:
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
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 dell'interfaccia della riga di comando per sviluppatori di Azure (azd
), che azd
può essere usato per effettuare il provisioning del servizio Azure OpenAI e del modello.
Da un terminale o un prompt dei comandi passare alla
src\quickstarts\azure-openai
directory del repository di esempio.Eseguire il comando per effettuare il
azd up
provisioning delle risorse OpenAI di Azure. La creazione del Servizio Azure OpenAI e la distribuzione del modello possono richiedere alcuni minuti.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
Passare alla radice del progetto .NET da un terminale o da un prompt dei comandi.
Usare i comandi seguenti per configurare la chiave API di 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 Microsoft.Extensions.AI
pacchetto per inviare e ricevere richieste al modello di intelligenza artificiale.
Nel file Program.cs aggiungere il codice seguente per connettersi ed eseguire l'autenticazione al modello di intelligenza artificiale.
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 per effettuare il
azd
provisioning della risorsa OpenAI di Azure, è necessario assegnare ilAzure AI Developer
ruolo 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; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string model = config["ModelName"]; string key = config["OpenAIKey"]; IChatClient client = new ChatClientBuilder() .UseFunctionInvocation() .Use( new OpenAIClient(key) .AsChatClient(model));
Creare un nuovo
ChatOptions
oggetto contenente 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.// Add a new plugin with a local .NET function that should be available to the AI model 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")] };
Aggiungere un prompt di sistema a
chatHistory
per fornire il contesto e le 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()}"); var response = await client.CompleteAsync(chatHistory, chatOptions); chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents)); Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
Usare il comando
dotnet run
per eseguire l'app:dotnet run
L'app stampa una 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