Générer une application de conversation IA avec .NET
Prenez en main OpenAI et Semantic Kernel en créant une application de conversation simple de console .NET 8. L’application s’exécute localement et utilise le modèle OpenAI gpt-3.5-turbo
. Suivez ces étapes pour obtenir l’accès à OpenAI et découvrir comment utiliser Semantic Kernel.
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
.
Prenez en main OpenAI et Semantic Kernel en créant une application de conversation simple de console .NET 8. L’application s’exécute localement et se connecte au modèle OpenAI gpt-35-turbo
déployé dans Azure OpenAI. Suivez ces étapes pour approvisionner Azure OpenAI et apprendre à utiliser Semantic Kernel.
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.
- Azure Developer CLI : installez ou mettez à jour Azure Developer CLI.
- Accès auprès d’Azure OpenAI Service.
- 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
.
Récupération de l’exemple de projet
Clonez le référentiel GitHub contenant les exemples d’applications pour tous les démarrages rapides :
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.
Depuis un terminal ou une invite de commandes, accédez au répertoire src\quickstarts\azure-openai de l’exemple de référentiel.
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 la clé d’accès OpenAI.Remarque
Si vous rencontrez une erreur pendant le déploiement
azd up
, consultez la section Résolution des problèmes.
Essayer l’exemple HikerAI
À partir d’un terminal ou d’une invite de commandes, accédez au répertoire
openai\02-HikerAI
.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
azure-openai\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 envoyer et recevoir des demandes au service OpenAI.
Le code d’application est contenu dans le fichier Program.cs. Les premières lignes de code définissent les valeurs de la configuration et obtiennent la clé OpenAI précédemment définie en utilisant 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);
Explorer le code
L’application utilise le package Microsoft.SemanticKernel
pour envoyer et recevoir 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 récupèrent les secrets et les valeurs de configuration 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"];
string key = config["AZURE_OPENAI_KEY"];
Le service AzureOpenAIChatCompletionService
facilite les requêtes et les réponses.
// Create the Azure OpenAI Chat Completion Service
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);
Ajoutez une invite du système pour fournir davantage de contexte au modèle, ce qui influence le comportement du modèle et les saisies semi-automatiques générées pendant la conversation.
// Start the conversation with context for the AI model
ChatHistory chatHistory = new("""
You are a hiking enthusiast who helps people discover fun hikes in their area.
You are upbeat and friendly. 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.
""");
Ajoutez un message utilisateur à l’historique des conversations en tirant parti de la fonction AddUserMessage
. Utilisez la fonction GetChatMessageContentAsync
demander au modèle de générer une réponse basée sur l’invite du système et la demande de l’utilisateur.
// Add user message to chat history
chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?");
// Print User Message to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
// Get response
var response = await service.GetChatMessageContentAsync(
chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 });
Ajoutez la réponse à partir du mode pour conserver l’historique des conversations.
// Add response to chat history
chatHistory.Add(response);
// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Personnalisez l’invite système et le message utilisateur pour voir comment le modèle répond pour vous aider à trouver une randonnée qui vous plairait.
Nettoyer les ressources
Supprimez toutes les ressources et le déploiement correspondants lorsque vous n’avez plus besoin de l’exemple d’application ou des 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.