Betekintés az adataiba egy .NET Azure AI-csevegőalkalmazásból
Első lépések a Szemantic Kernel és a gpt-35-turbo
modell használatában egy egyszerű .NET 8.0-s konzolalkalmazásból. Az AI-modell használatával elemzéseket és információkat kaphat az előző túrákról. Ez egy helyileg futó egyszerű konzolalkalmazásból áll, amely felolvassa a fájlt hikes.md
, és elküldi a kérést egy Azure-előfizetésben üzembe helyezett Azure OpenAI-szolgáltatásnak, és megadja az eredményt a konzolon. Kövesse ezeket a lépéseket az Azure OpenAI kiépítéséhez, és ismerje meg a Szemantic Kernel használatát.
A .NET Azure OpenAI használatának első lépései egy gpt-35-turbo
egyszerű .NET 8.0-s konzolalkalmazásból származó modellel. Az AI-modell használatával elemzéseket és információkat kaphat az előző túrákról. Ez egy helyileg futó egyszerű konzolalkalmazásból áll, amely felolvassa a fájlt hikes.md
, és elküldi a kérést egy Azure-előfizetésben üzembe helyezett Azure OpenAI-szolgáltatásnak, és megadja az eredményt a konzolon. Kövesse az alábbi lépéseket az Azure OpenAI kiépítéséhez, és ismerje meg a .NET Azure OpenAI SDK használatát.
Előfeltételek
- .NET 8.0 SDK – A .NET 8.0 SDK telepítése
- Azure-előfizetés – Ingyenes létrehozás
- Azure Developer CLI – Az Azure Developer CLI telepítése vagy frissítése
- Hozzáférés az Azure OpenAI szolgáltatáshoz.
- Windows rendszeren a PowerShellre
v7+
van szükség. A verzió ellenőrzéséhez futtassapwsh
a terminálban. Az aktuális verziót kell visszaadnia. Ha hibát ad vissza, hajtsa végre a következő parancsot:dotnet tool update --global PowerShell
.
Az Azure-erőforrások üzembe helyezése
Győződjön meg arról, hogy az Azure OpenAI szolgáltatáshoz és az Azure Developer CLI-hez való hozzáférés előfeltételeit követi, majd a mintaalkalmazással való kezdéshez kövesse az alábbi útmutatót.
Az adattár klónozása: dotnet/ai-samples
Egy terminálból vagy parancssorból lépjen a rövid útmutatók könyvtárába .
Ez kiépítja az Azure OpenAI-erőforrásokat. Az Azure OpenAI szolgáltatás létrehozása és a modell üzembe helyezése több percet is igénybe vehet.
azd up
Feljegyzés
Ha már rendelkezik elérhető Azure OpenAI szolgáltatással, kihagyhatja az üzembe helyezést, és ezt az értéket használhatja a Program.cs, lehetőleg egy IConfiguration
.
Hibaelhárítás
Windows rendszeren a következő hibaüzenetek jelenhetnek meg a futtatás azd up
után:
A postprovision.ps1 nincs digitálisan aláírva. A szkript nem lesz végrehajtva a rendszeren
A postprovision.ps1 szkript végrehajtása az alkalmazásban használt .NET-felhasználói titkos kódok beállításához történik. A hiba elkerülése érdekében futtassa a következő PowerShell-parancsot:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Ezután futtassa újra a azd up
parancsot.
Egy másik lehetséges hiba:
A "pwsh" nem ismerhető fel belső vagy külső parancsként, kezelhető programként vagy kötegelt fájlként. FIGYELMEZTETÉS: A "postprovision" horog a következő kilépési kóddal meghiúsult: '1', Elérési út: '.\infra\post-script\postprovision.ps1'. : kilépési kód: 1 A végrehajtás folytatódik, mivel a ContinueOnError értéke igaz.
A postprovision.ps1 szkript végrehajtása az alkalmazásban használt .NET-felhasználói titkos kódok beállításához történik. A hiba elkerülése érdekében futtassa manuálisan a szkriptet a következő PowerShell-paranccsal:
.\infra\post-script\postprovision.ps1
A .NET AI-alkalmazások most már konfigurálva vannak a felhasználói titkos kulcsokkal, és tesztelhetők.
Próbálja ki a "Csevegés az előző túrákról" mintát
- Nyissa meg a
semantic-kernel\03-ChattingAboutMyHikes
könyvtárat egy terminálból vagy parancssorból.
- Nyissa meg a
azure-openai-sdk\03-ChattingAboutMyHikes
könyvtárat egy terminálból vagy parancssorból.
Itt az ideje kipróbálni a konzolalkalmazást. Az alkalmazás futtatásához írja be a következőt:
dotnet run
Ha hibaüzenetet kap, előfordulhat, hogy az Azure OpenAI-erőforrások nem fejezték be az üzembe helyezést. Várjon néhány percet, és próbálkozzon újra.
A kód megismerése
Az alkalmazás a Microsoft.SemanticKernel
NuGeten elérhető csomagot használja a kérések Azure-ban üzembe helyezett Azure OpenAI-szolgáltatásba való küldéséhez és fogadásához.
A teljes alkalmazás a Program.cs fájlban található. Az első több sornyi kód betölti azokat a titkos kulcsokat és konfigurációs értékeket, amelyek az dotnet user-secrets
alkalmazás kiépítése során lettek beállítva az Ön számára.
// == 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"];
A AzureOpenAIChatCompletionService
szolgáltatás megkönnyíti a kéréseket és a válaszokat.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);
AzureOpenAIChatCompletionService
Az ügyfél létrehozása után beolvasjuk a fájl hikes.md
tartalmát, és egy rendszerkérés hozzáadásával további kontextust biztosítunk a modellnek. Ez arra utasítja a modellt, hogy hogyan működjön a beszélgetés során.
// Provide context for the AI model
ChatHistory chatHistory = new($"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
{File.ReadAllText("hikes.md")}
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Ezután a függvény használatával hozzáadhat egy felhasználói üzenetet a AddUserMessage
modellhez.
Ha azt szeretné, hogy a modell a rendszerkérés és a felhasználói kérés alapján hozzon létre választ, használja a függvényt GetChatMessageContentAsync
.
// Start the conversation
chatHistory.AddUserMessage("Hi!");
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}");
A csevegési előzmények vagy környezet fenntartásához adja hozzá a modell válaszát a chatHistory
. Itt az ideje, hogy a felhasználói kérést az adatokról ismét az és GetChatMessageContentAsync
a AddUserMessage
függvény használatával.
// Continue the conversation with a question.
chatHistory.AddUserMessage("I would like to know the ratio of the hikes I've done in Canada compared to other countries.");
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}");
Testre szabhatja a rendszer kérését, és módosíthatja a kérést, és különböző kérdéseket tehet fel (például: Hányszor túrázott, amikor esett? Hányszor túrázott 2021-ben? stb.) a modell válaszának megtekintéséhez.
A kód megismerése
Az alkalmazás a Azure.AI.OpenAI
NuGeten elérhető ügyféloldali SDK használatával küld és fogad kéréseket egy Azure-ban üzembe helyezett Azure OpenAI-szolgáltatásnak.
A teljes alkalmazás a Program.cs fájlban található. Az első több sornyi kód betölti azokat a titkos kulcsokat és konfigurációs értékeket, amelyek az dotnet user-secrets
alkalmazás kiépítése során lettek beállítva az Ön számára.
// == 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);
Az OpenAIClient
osztály megkönnyíti a kéréseket és a válaszokat. ChatCompletionOptions
a modell válaszának paramétereit adja meg.
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
Az ügyfél létrehozása után beolvasjuk a fájl hikes.md
tartalmát, és egy rendszerkérés hozzáadásával további kontextust biztosítunk a modellnek. Ez arra utasítja a modellt, hogy hogyan működjön a beszélgetés során.
var systemPrompt =
"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
""" + markdown;
completionOptions.Messages.Add(new ChatRequestSystemMessage(systemPrompt));
Ezután hozzáadhat egy felhasználói üzenetet a modellhez az ChatRequestUserMessage
osztály használatával.
Ha azt szeretné, hogy a modell a rendszerkérés és a felhasználói kérés alapján hozzon létre választ, használja a függvényt GetChatCompletionsAsync
.
string userGreeting = """
Hi!
""";
completionOptions.Messages.Add(new ChatRequestUserMessage(userGreeting));
Console.WriteLine($"\n\nUser >>> {userGreeting}");
ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAI >>> {assistantResponse.Content}");
completionOptions.Messages.Add(new ChatRequestAssisstantMessage(assistantResponse.Content));
A csevegési előzmények vagy környezet fenntartásához adja hozzá a modell válaszát ChatRequestAssistantMessage
. Itt az ideje, hogy a felhasználói kérést az adatokról ismét az és GetChatCompletionsAsync
a ChatRequestUserMessage
függvény használatával.
var hikeRequest =
"""
I would like to know the ration of hike I did in Canada compare to hikes done in other countries.
""";
Console.WriteLine($"\n\nUser >>> {hikeRequest}");
completionOptions.Messages.Add(new ChatRequestUserMessage(hikeRequest));
response = await openAIClient.GetChatCompletionsAsync(completionOptions);
Testre szabhatja a rendszer kérését, és módosíthatja a kérést, és különböző kérdéseket tehet fel (például: Hányszor túrázott, amikor esett? Hányszor túrázott 2021-ben? stb.) a modell válaszának megtekintéséhez.
Az erőforrások eltávolítása
Ha már nincs szüksége a mintaalkalmazásra vagy erőforrásokra, távolítsa el a megfelelő üzembe helyezést és az összes erőforrást.
azd down
Következő lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: