Shrnutí textu pomocí chatovací aplikace Azure AI s .NET
Začněte se sémantickým jádrem 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í těchto kroků zřiďte Azure OpenAI a zjistěte, jak používat sémantické jádro.
Začněte se sadou .NET Azure OpenAI SDK 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í těchto kroků zřiďte Azure OpenAI a zjistěte, jak používat sadu .NET Azure OpenAI SDK.
Požadavky
- .NET 8.0 SDK – Instalace sady .NET 8.0 SDK
- Předplatné Azure – Vytvoření předplatného zdarma
- Azure Developer CLI – Instalace nebo aktualizace 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
.
Nasazení prostředků Azure
Ujistěte se, že dodržujete požadavky , abyste měli přístup ke službě Azure OpenAI a rozhraní příkazového řádku Azure Developer CLI, a pak postupujte podle následujícího průvodce a nastavte ji s ukázkovou aplikací.
Klonování úložiště: dotnet/ai-samples
Z terminálu nebo příkazového řádku přejděte do adresáře Rychlý start .
Tím se zřídí prostředky Azure OpenAI. Vytvoření služby Azure OpenAI a nasazení modelu může trvat několik minut.
azd up
Poznámka:
Pokud už máte k dispozici službu Azure OpenAI, můžete nasazení přeskočit a použít tuto hodnotu v Program.cs, nejlépe z některého IConfiguration
.
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.
Ukázka souhrnu výhod pěší turistiky
- Z terminálu nebo příkazového řádku přejděte do
semantic-kernel\01-HikeBenefitsSummary
adresáře.
- Z terminálu nebo příkazového řádku přejděte do
azure-openai-sdk\01-HikeBenefitsSummary
adresáře.
Teď je čas vyzkoušet konzolovou aplikaci. Zadáním následujícího příkazu spusťte aplikaci:
dotnet run
Pokud se zobrazí chybová zpráva, že se nasazení prostředků Azure OpenAI nedokončily. Počkejte několik minut a zkuste to znovu.
Vysvětlení kódu
Naše aplikace používá Microsoft.SemanticKernel
balíček, který je k dispozici na NuGetu, k odesílání a přijímání požadavků do služby Azure OpenAI nasazené v Azure.
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.
// == Retrieve the local secrets saved during the Azure deployment ==========
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"];
// Create a Kernel containing the Azure OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(deployment, endpoint, key)
.Build();
Třída Kernel
usnadňuje požadavky a odpovědi pomocí AddAzureOpenAIChatCompletion
služby.
Kernel kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(deployment, endpoint, key)
.Build();
Kernel
Po vytvoření si přečteme obsah souboru benefits.md
a vytvoříme prompt
dotaz modelu, aby tento text sumarizovat.
// Create and print out the prompt
string prompt = $"""
Please summarize the the following text in 20 words or less:
{File.ReadAllText("benefits.md")}
""";
Console.WriteLine($"user >>> {prompt}");
Pokud chcete, aby model vygeneroval odpověď založenou InvokePromptAsync
na vypnutoprompt
, použijte funkci.
// Submit the prompt and print out the response
string response = await kernel.InvokePromptAsync<string>(prompt, new(new OpenAIPromptExecutionSettings() { MaxTokens = 400 }));
Console.WriteLine($"assistant >>> {response}");
Přizpůsobte si textový obsah souboru nebo délku souhrnu, abyste viděli rozdíly v odpovědích.
Vysvětlení kódu
Naše aplikace používá klientskou Azure.AI.OpenAI
sadu SDK, která je k dispozici na NuGetu, k odesílání a přijímání požadavků do služby Azure OpenAI nasazené v Azure.
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.
// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];
// == Creating the AIClient ==========
var endpoint = new Uri(openAIEndpoint);
var credentials = new AzureKeyCredential(openAiKey);
Třída OpenAIClient
usnadňuje požadavky a odpovědi. ChatCompletionOptions
určuje parametry, jak bude model reagovat.
var openAIClient = new OpenAIClient(endpoint, credentials);
var completionOptions = new ChatCompletionsOptions
{
MaxTokens = 400,
Temperature = 1f,
FrequencyPenalty = 0.0f,
PresencePenalty = 0.0f,
NucleusSamplingFactor = 0.95f, // Top P
DeploymentName = openAIDeploymentName
};
OpenAIClient
Po vytvoření klienta si přečteme obsah souboru benefits.md
. Pak pomocí ChatRequestUserMessage
třídy, kterou můžeme přidat do modelu, aby požadavek sumarizovat tento text.
string userRequest = """
Please summarize the the following text in 20 words or less:
""" + markdown;
completionOptions.Messages.Add(new ChatRequestUserMessage(userRequest));
Console.WriteLine($"\n\nUser >>> {userRequest}");
Pokud chcete, aby model vygeneroval odpověď založenou na požadavku uživatele, použijte GetChatCompletionsAsync
funkci.
ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAssistant >>> {assistantResponse.Content}");
Přizpůsobte si textový obsah souboru nebo délku souhrnu, abyste viděli rozdíly v odpovědích.
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
Další kroky
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro