Obtenir des insights sur vos données à partir d’une application de conversation .NET AI
Prise en main du développement IA à l’aide d’une application console .NET 8 pour se connecter à un modèle OpenAI gpt-3.5-turbo
. Vous allez vous connecter au modèle IA à l’aide de Semantic Kernel pour analyser les données de randonnée et fournir des insights.
Prérequis
- Kit de développement logiciel (SDK) .NET 8.0 : installez le Kit de développement logiciel (SDK) .NET 8.0.
- Une clé API d’OpenAI pour pouvoir exécuter cet échantillon.
- Sur Windows, PowerShell
v7+
est requis. Pour valider votre version, exécutezpwsh
dans un terminal. Elle doit retourner la version actuelle. Si une erreur est retournée, exécutez la commande suivante :dotnet tool update --global PowerShell
.
Prise en main du développement IA à l’aide d’une application console .NET 8 pour se connecter à un modèle OpenAI gpt-3.5-turbo
déployé sur Azure. Vous allez vous connecter au modèle IA à l’aide de Semantic Kernel pour analyser les données de randonnée et fournir des insights.
Prérequis
- Kit de développement logiciel (SDK) .NET 8 : installez le Kit de développement logiciel (SDK) .NET 8.
- Un abonnement Azure : créez-en un gratuitement.
- Accès auprès d’Azure OpenAI Service.
- Azure Developer CLI (facultatif) : installez ou mettez à jour Azure Developer CLI.
Récupération de l’exemple de projet
Clonez l’exemple de dépôt
Vous pouvez créer votre propre application à l’aide des étapes décrites dans les sections à l’avance, ou vous pouvez cloner le dépôt GitHub qui contient les exemples d’applications terminés pour tous les guides de démarrage rapide. Si vous envisagez d’utiliser Azure OpenAI, l’exemple de dépôt est également structuré en tant que modèle Azure Developer CLI qui peut approvisionner une ressource Azure OpenAI pour vous.
git clone https://github.com/dotnet/ai-samples.git
Créer le service Azure OpenAI
- Azure Developer CLI
- Azure CLI
- Portail Azure
L’exemple de référentiel GitHub est structuré en tant que modèle Azure Developer CLI (azd
), que azd
peut utiliser pour approvisionner le service et le modèle Azure OpenAI pour vous.
À partir d’un terminal ou d’une invite de commandes, accédez au
src\quickstarts\azure-openai
répertoire de l’exemple de dépôt.Exécutez la commande
azd up
pour approvisionner les ressources Azure OpenAI. La création du service Azure OpenAI et le déploiement du modèle peuvent prendre plusieurs minutes.azd up
azd
configure également les secrets utilisateur requis pour l’exemple d’application, comme le point de terminaison Azure OpenAI et le nom du modèle.
Essayez l’exemple de conversation de randonnée
À partir d’un terminal ou d’une invite de commandes, accédez au répertoire
src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes
.Exécutez les commandes suivantes pour configurer votre clé API OpenAI en tant que secret pour l’exemple d’application :
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
Utilisez la commande
dotnet run
pour exécuter l’application :dotnet run
À partir d’un terminal ou d’une invite de commandes, accédez au répertoire
semantic-kernel\02-HikerAI
.Utilisez la commande
dotnet run
pour exécuter l’application :dotnet run
Conseil
Si vous recevez un message d’erreur, c’est que le déploiement des ressources Azure OpenAI n’est peut-être pas terminé. Attendez quelques minutes et réessayez.
Explorer le code
L’application utilise le package Microsoft.SemanticKernel
pour échanger des demandes avec un service OpenAI.
Toute l’application est contenue dans le fichier Program.cs. Les premières lignes de code définissent les valeurs de configuration et obtiennent la clé OpenAI qui a été précédemment définie à l’aide de la commande dotnet user-secrets
.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
Le service OpenAIChatCompletionService
facilite les requêtes et les réponses.
// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);
Une fois le client OpenAIChatCompletionService
créé, l’application lit le contenu du fichier hikes.md
et l’utilise pour fournir davantage de contexte au modèle en ajoutant une invite du système. Cela influence le comportement du modèle et les achèvements générés pendant la conversation.
L’application utilise le package Microsoft.SemanticKernel
pour échanger des demandes avec un service Azure OpenAI déployé dans Azure.
Toute l’application est contenue dans le fichier Program.cs. Les premières lignes de code chargent les secrets et les valeurs de configuration qui ont été définis pour vous dans le dotnet user-secrets
pendant l’approvisionnement de l’application.
// == 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"];
Le service AzureOpenAIChatCompletionService
facilite les requêtes et les réponses.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, new DefaultAzureCredential());
Une fois le client OpenAIChatCompletionService
créé, l’application lit le contenu du fichier hikes.md
et l’utilise pour fournir davantage de contexte au modèle en ajoutant une invite du système. Cela influence le comportement du modèle et les achèvements générés pendant la conversation.
// 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}");
Le code suivant ajoute une invite utilisateur au modèle à l’aide de la fonction AddUserMessage
. La fonction GetChatMessageContentAsync
indique au modèle de générer une réponse basée sur les invites du système et de l’utilisateur.
// 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}");
L’application ajoute la réponse du modèle en tant que chatHistory
pour conserver le contexte ou l’historique des conversations.
// 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}");
Personnalisez les invites du système ou de l’utilisateur pour fournir différentes questions et contextes :
- Combien de fois ai-je fait de la randonnée quand il pleuvait ?
- Combien de fois ai-je fait de la randonnée en 2021 ?
Le modèle génère une réponse pertinente à chaque invite en fonction de vos entrées.
Nettoyer les ressources
Lorsque vous n’avez plus besoin de l’exemple d’application ou de ressources, supprimez le déploiement correspondant et toutes les ressources.
azd down
Résolution des problèmes
Sur Windows, vous risquez d’obtenir les messages d’erreur suivants après avoir exécuté azd up
:
postprovision.ps1 n’est pas signé numériquement. Le script ne s’exécute pas sur le système
Le script postprovision.ps1 est exécuté pour définir les secrets utilisateur .NET utilisés dans l’application. Pour éviter cette erreur, exécutez la commande PowerShell suivante :
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Réexécutez ensuite la commande azd up
.
Autre erreur possible :
« pwsh » n’est pas reconnu comme commande interne ou externe, programme exécutable ou fichier batch. AVERTISSEMENT : échec du hook « postprovision » avec le code de sortie : « 1 ». Chemin d’accès : « .\infra\post-script\postprovision.ps1 ». : code de sortie : 1. L’exécution continue puisque ContinueOnError est défini sur true.
Le script postprovision.ps1 est exécuté pour définir les secrets utilisateur .NET utilisés dans l’application. Pour éviter cette erreur, exécutez manuellement le script à l’aide de la commande PowerShell suivante :
.\infra\post-script\postprovision.ps1
Les applications IA .NET ont désormais des secrets utilisateur configurés et vous pouvez les tester.