Rozšíření OpenAI pomocí nástrojů a spuštění místní funkce pomocí .NET
Začněte s AI vytvořením jednoduché konzolové chatovací aplikace .NET 8. Aplikace se spustí místně a použije model OpenAI gpt-3.5-turbo
pomocí nástrojů k rozšíření schopností modelu voláním místní metody .NET. Pomocí těchto kroků získáte přístup k OpenAI a naučíte se používat sémantické jádro.
Požadavky
- .NET 8.0 SDK – Nainstalujte sadu .NET 8.0 SDK.
- Klíč rozhraní API z OpenAI , abyste mohli tuto ukázku spustit.
- Ve Windows se vyžaduje PowerShell
v7+
. Pokud chcete ověřit svou verzi, spusťtepwsh
v terminálu. Měla by vrátit aktuální verzi. Pokud vrátí chybu, spusťte následující příkaz:dotnet tool update --global PowerShell
.
Začněte s AI vytvořením jednoduché konzolové chatovací aplikace .NET 8. Aplikace se spustí místně a použije model OpenAI gpt-35-turbo
nasazený do účtu Azure OpenAI. Pomocí nástrojů rozšiřuje možnosti modelu voláním místní metody .NET. Pomocí těchto kroků zřiďte Azure OpenAI a zjistěte, jak používat sémantické jádro.
Požadavky
- .NET 8 SDK – Nainstalujte sadu .NET 8 SDK.
- Předplatné Azure – Vytvořte si ho zdarma.
- Azure Developer CLI – Nainstalujte nebo aktualizujte Azure Developer CLI.
- Přístup ke službě Azure OpenAI
- Ve Windows se vyžaduje PowerShell
v7+
. Pokud chcete ověřit svou verzi, spusťtepwsh
v terminálu. Měla by vrátit aktuální verzi. Pokud vrátí chybu, spusťte následující příkaz:dotnet tool update --global PowerShell
.
Získání ukázkového projektu
Naklonujte úložiště GitHub, které obsahuje ukázkové aplikace pro všechny rychlé starty:
git clone https://github.com/dotnet/ai-samples.git
Vytvoření služby Azure OpenAI
Ukázkové úložiště GitHubu je strukturované jako šablona Azure Developer CLI (azd
), která azd
umožňuje zřídit službu Azure OpenAI a model za vás.
Z terminálu nebo příkazového řádku přejděte do adresáře src\quickstarts\azure-openai ukázkového úložiště.
Spuštěním
azd up
příkazu zřiďte prostředky Azure OpenAI. Vytvoření služby Azure OpenAI a nasazení modelu může trvat několik minut.azd up
azd
také nakonfiguruje požadované tajné kódy uživatelů pro ukázkovou aplikaci, jako je přístupový klíč OpenAI.Poznámka:
Pokud během
azd up
nasazení dojde k chybě, přejděte do části pro řešení potíží .
Vyzkoušejte ukázku pro pěší turistiku.
Z terminálu nebo příkazového řádku přejděte do
azure-openai\04-HikerAIPro
adresáře.Spuštěním následujících příkazů nakonfigurujte klíč rozhraní API OpenAI jako tajný klíč pro ukázkovou aplikaci:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet run
Spuštění aplikace pomocí příkazu:dotnet run
Z terminálu nebo příkazového řádku přejděte do
azure-openai\04-HikerAIPro
adresáře.dotnet run
Spuštění aplikace pomocí příkazu:dotnet run
Tip
Pokud se zobrazí chybová zpráva, možná se nasazení prostředků Azure OpenAI nedokončily. Počkejte několik minut a zkuste to znovu.
Vysvětlení kódu
Aplikace používá Microsoft.SemanticKernel
balíček k odesílání a přijímání požadavků do služby OpenAI.
Celá aplikace je obsažena v souboru Program.cs . Prvních několik řádků konfiguračních hodnot sady kódu a získání klíče OpenAI, který byl dříve nastaven pomocí dotnet user-secrets
příkazu.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
Třída Kernel
usnadňuje požadavky a odpovědi pomocí AddOpenAIChatCompletion
služby.
// Create a Kernel containing the OpenAI Chat Completion Service
IKernelBuilder b = Kernel.CreateBuilder();
Kernel kernel = b
.AddOpenAIChatCompletion(model, key)
.Build();
Aplikace používá Microsoft.SemanticKernel
balíček k odesílání a přijímání požadavků do služby OpenAI.
Celá aplikace je obsažena v souboru Program.cs . Prvních několik řádků kódu načte tajné kódy a konfigurační hodnoty, které byly nastaveny ve dotnet user-secrets
vámi během zřizování aplikace.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];
Třída Kernel
usnadňuje požadavky a odpovědi pomocí AzureOpenAIChatCompletion
služby.
// Create a Kernel containing the Azure OpenAI Chat Completion Service
IKernelBuilder b = Kernel.CreateBuilder();
Kernel kernel = b
.AddAzureOpenAIChatCompletion(deployment, endpoint, key)
.Build();
ImportPluginFromFunctions
Funkce a CreateFromMethod
definují místní funkci, kterou bude model volat.
// Add a new plugin with a local .NET function that should be available to the AI model
// For convenience and clarity of into the code, this standalone local method handles tool call responses. It will fake a call to a weather API and return the current weather for the specified location.
kernel.ImportPluginFromFunctions("WeatherPlugin",
[
KernelFunctionFactory.CreateFromMethod(
([Description("The city, e.g. Montreal, Sidney")] string location, string unit = null) =>
{
// 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")
]);
kernel
Po vytvoření klienta použije kód výzvu systému k poskytnutí kontextu a ovlivnění tónu a obsahu dokončení. Všimněte si, jak se v příkazovém řádku systému zvýrazní počasí.
ChatHistory chatHistory = new("""
You are a hiking enthusiast who helps people discover fun hikes in their area.
You are upbeat and friendly. Good weather is important for a good hike.
Only make recommendations if the weather is good or if people insist.
You introduce yourself when first saying hello. When helping people out,
you always ask them for this information to inform the hiking recommendation you provide:
1. Where they are located
2. What hiking intensity they are looking for
You will then provide three suggestions for nearby hikes that vary in length
after you get that information. You will also share an interesting fact about the local
nature on the hikes when making a recommendation.
""");
Aplikace také přidá do modelu zprávu uživatele pomocí AddUserMessage
funkce. Funkce GetChatMessageContentAsync
odešle do modelu historii chatu, aby vygenerovala odpověď založenou na systémové a uživatelské výzvě.
chatHistory.AddUserMessage("""
Is the weather is good today for a hike?
If yes, I live in the greater Montreal area and would like an easy hike.
I don't mind driving a bit to get there. I don't want the hike to be over 10 miles round trip.
I'd consider a point-to-point hike.
I want the hike to be as isolated as possible. I don't want to see many people.
I would like it to be as bug free as possible.
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Přizpůsobte si výzvu systému a uživatelskou zprávu, abyste viděli, jak model reaguje, aby vám pomohl najít trasu, která se vám bude líbit.
Vyčištění prostředků
Pokud už ukázkovou aplikaci nebo prostředky nepotřebujete, odeberte odpovídající nasazení a všechny prostředky.
azd down
Odstraňování potíží
Ve Windows se můžou po spuštění azd up
zobrazit následující chybové zprávy:
postprovision.ps1 není digitálně podepsán. Skript se v systému nespustí.
Skript postprovision.ps1 se spustí a nastaví tajné kódy uživatele .NET používané v aplikaci. Pokud se chcete této chybě vyhnout, spusťte následující příkaz PowerShellu:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Pak příkaz spusťte azd up
znovu.
Další možná chyba:
"pwsh" není rozpoznán jako interní nebo externí příkaz, operovatelný program nebo dávkový soubor. UPOZORNĚNÍ: "postprovision" hook selhal s ukončovacím kódem: '1', Cesta: '.\infra\post-script\postprovision.ps1'. : ukončovací kód: 1 Provádění bude pokračovat, protože ContinueOnError byl nastaven na hodnotu true.
Skript postprovision.ps1 se spustí a nastaví tajné kódy uživatele .NET používané v aplikaci. Pokud se chcete této chybě vyhnout, spusťte skript ručně pomocí následujícího příkazu PowerShellu:
.\infra\post-script\postprovision.ps1
Aplikace .NET AI teď mají nakonfigurované tajné kódy uživatelů a dají se testovat.