Anropa .NET-funktioner med hjälp av en AI-modell
I den här snabbstarten skapar du en .NET-konsol-AI-chattapp för att ansluta till en AI-modell med lokalt funktionsanrop aktiverat. Appen använder Microsoft.Extensions.AI
biblioteket så att du kan skriva kod med ai-abstraktioner i stället för ett specifikt SDK. MED AI-abstraktioner kan du ändra den underliggande AI-modellen med minimala kodändringar.
Kommentar
Biblioteket Microsoft.Extensions.AI
finns för närvarande i förhandsversion.
Förutsättningar
- .NET 8.0 SDK – Installera .NET 8.0 SDK.
- En API-nyckel från OpenAI så att du kan köra det här exemplet.
- I Windows krävs PowerShell
v7+
. Om du vill verifiera din version kör dupwsh
i en terminal. Den bör returnera den aktuella versionen. Om det returnerar ett fel kör du följande kommando:dotnet tool update --global PowerShell
.
Förutsättningar
- .NET 8 SDK – Installera .NET 8 SDK.
- En Azure-prenumeration – Skapa en kostnadsfritt.
- Åtkomst till Azure OpenAI-tjänsten.
- Azure Developer CLI (valfritt) – Installera eller uppdatera Azure Developer CLI.
Kommentar
Du kan också använda semantisk kernel för att utföra uppgifterna i den här artikeln. Semantisk kernel är en enkel SDK med öppen källkod som gör att du kan skapa AI-agenter och integrera de senaste AI-modellerna i dina .NET-appar.
Klona exempellagringsplatsen
Du kan skapa en egen app med hjälp av stegen i de kommande avsnitten, eller så kan du klona GitHub-lagringsplatsen som innehåller de färdiga exempelapparna för alla snabbstarter. Om du planerar att använda Azure OpenAI är exempelrepoen också strukturerad som en Azure Developer CLI-mall som kan etablera en Azure OpenAI-resurs åt dig.
git clone https://github.com/dotnet/ai-samples.git
Skapa appen
Slutför följande steg för att skapa en .NET-konsolapp för att ansluta till en AI-modell.
I en tom katalog på datorn använder du
dotnet new
kommandot för att skapa en ny konsolapp:dotnet new console -o FunctionCallingAI
Ändra katalog till appmappen:
cd FunctionCallingAI
Installera de paket som krävs:
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
Öppna appen i Visual Studio Code eller valfri redigerare
code .
Skapa AI-tjänsten
GitHub-exempellagringsplatsen är strukturerad som en Azure Developer CLI-mall (azd
) som azd
kan använda för att etablera Azure OpenAI-tjänsten och modellen åt dig.
Från en terminal eller kommandotolk navigerar du till
src\quickstarts\azure-openai
katalogen för exempeldatabasen.azd up
Kör kommandot för att etablera Azure OpenAI-resurserna. Det kan ta flera minuter att skapa Azure OpenAI-tjänsten och distribuera modellen.azd up
azd
konfigurerar också nödvändiga användarhemligheter för exempelappen, till exempel Azure OpenAI-slutpunkten och modellnamnet.
Konfigurera appen
Gå till roten för .NET-projet från en terminal eller kommandotolk.
Kör följande kommandon för att konfigurera din OpenAI API-nyckel som en hemlighet för exempelappen:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key> dotnet user-secrets set ModelName <your-openai-model-name>
Lägg till appkoden
Appen använder Microsoft.Extensions.AI
paketet för att skicka och ta emot begäranden till AI-modellen.
I filen Program.cs lägger du till följande kod för att ansluta och autentisera till AI-modellen.
ChatClient
Är också konfigurerad för att använda funktionsanrop, vilket gör att .NET-funktioner i koden kan anropas av AI-modellen.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));
Kommentar
DefaultAzureCredential söker efter autentiseringsuppgifter från din lokala verktygsuppsättning. Om du inte använder mallen
azd
för att etablera Azure OpenAI-resursen måste du tilldelaAzure AI Developer
rollen till det konto som du använde för att logga in i Visual Studio eller Azure CLI. Mer information finns i Autentisera till Azure AI-tjänster med .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));
Skapa ett nytt
ChatOptions
objekt som innehåller en infogad funktion som AI-modellen kan anropa för att hämta det aktuella vädret. Funktionsdeklarationen innehåller ett ombud för att köra logik- och namn- och beskrivningsparametrar för att beskriva syftet med funktionen för AI-modellen.// 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")] };
Lägg till en systemprompt till
chatHistory
för att tillhandahålla kontext och instruktioner till modellen. Skicka en användarprompt med en fråga som kräver att AI-modellen anropar den registrerade funktionen för att besvara frågan korrekt.// 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()}");
dotnet run
Använd kommandot för att köra appen:dotnet run
Appen skriver ut ett slutförandesvar från AI-modellen som innehåller data som tillhandahålls av .NET-funktionen. AI-modellen förstod att den registrerade funktionen var tillgänglig och anropade den automatiskt för att generera ett korrekt svar.
Rensa resurser
När du inte längre behöver exempelprogrammet eller resurserna tar du bort motsvarande distribution och alla resurser.
azd down