Ottenere informazioni dettagliate sui dati da un'app di chat di Azure IA .NET
Introduzione allo sviluppo di intelligenza artificiale con un'app console .NET 8 per connettersi a un modellogpt-3.5-turbo
OpenAI. Si effettuerà la connessione al modello di intelligenza artificiale usando Semantic Kernel per analizzare i dati di escursionismo e fornire informazioni dettagliate.
Prerequisiti
- .NET 8.0 SDK - Installare .NET 8.0 SDK.
- Una chiave API da OpenAI per poter eseguire questo esempio.
- In Windows è necessario PowerShell
v7+
. Per convalidare la versione, eseguirepwsh
in un terminale. Dovrebbe restituire la versione corrente. Se restituisce un errore, eseguire il comando seguente:dotnet tool update --global PowerShell
.
Introduzione allo sviluppo di intelligenza artificiale con un'app console .NET 8 per connettersi a un modellogpt-3.5-turbo
OpenAI distribuito in Azure. Si effettuerà la connessione al modello di intelligenza artificiale usando Semantic Kernel per analizzare i dati di escursionismo e fornire informazioni dettagliate.
Prerequisiti
- .NET 8 SDK - Installare .NET 8 SDK.
- Una sottoscrizione di Azure: crearne una gratuitamente.
- Accedere al Servizio OpenAI di Azure.
- Interfaccia della riga di comando per sviluppatori di Azure (facoltativo): installare o aggiornare l'interfaccia della riga di comando per sviluppatori di Azure.
Ottenere il progetto di esempio
Clonare il repository di esempio:
È possibile creare un'app personalizzata seguendo la procedura descritta nelle sezioni in anticipo oppure clonare il repository GitHub che contiene le app di esempio completate per tutte le guide introduttive. Se si prevede di usare Azure OpenAI, il repository di esempio è strutturato anche come modello dell'interfaccia della riga di comando per sviluppatori di Azure in grado di effettuare automaticamente il provisioning di una risorsa OpenAI di Azure.
git clone https://github.com/dotnet/ai-samples.git
Creare il servizio Azure OpenAI
Il repository GitHub di esempio è strutturato come modello dell'interfaccia della riga di comando per sviluppatori di Azure (azd
), che azd
può essere usato per effettuare il provisioning del servizio Azure OpenAI e del modello.
Da un terminale o un prompt dei comandi passare alla
src\quickstarts\azure-openai
directory del repository di esempio.Eseguire il comando per effettuare il
azd up
provisioning delle risorse OpenAI di Azure. La creazione del Servizio Azure OpenAI e la distribuzione del modello possono richiedere alcuni minuti.azd up
azd
configura anche i segreti utente necessari per l'app di esempio, ad esempio l'endpoint OpenAI di Azure e il nome del modello.
Prova l'esempio di chat per escursionismo
Da un terminale o un prompt dei comandi passare alla directory
src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes
.Usare i comandi seguenti per configurare la chiave API di OpenAI come segreto per l'app di esempio:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
Usare il comando
dotnet run
per eseguire l'app:dotnet run
Da un terminale o un prompt dei comandi passare alla directory
semantic-kernel\02-HikerAI
.Usare il comando
dotnet run
per eseguire l'app:dotnet run
Suggerimento
Se viene visualizzato un messaggio di errore, è possibile che la distribuzione delle risorse di Azure OpenAI non sia stata completata. Attendere un paio di minuti e riprovare.
Esplorare il codice
L'applicazione usa il pacchetto Microsoft.SemanticKernel
per inviare e ricevere richieste a un servizio OpenAI.
L'intera applicazione è contenuta all'interno del file Program.cs. Le prime righe di codice impostano i valori di configurazione e consentono di ottenere la chiave OpenAI impostata in precedenza tramite il comando dotnet user-secrets
.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
Il servizio OpenAIChatCompletionService
facilita le richieste e le risposte.
// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);
Dopo aver creato il client OpenAIChatCompletionService
, l'app legge il contenuto del file hikes.md
e lo usa per fornire più contesto al modello aggiungendo una richiesta del sistema. Ciò influisce sul comportamento del modello e sui completamenti generati durante la conversazione.
L'applicazione usa il pacchetto Microsoft.SemanticKernel
per inviare e ricevere richieste a un servizio Azure OpenAI distribuito in Azure.
L'intera applicazione è contenuta all'interno del file Program.cs. Le prime righe di codice caricano segreti e valori di configurazione impostati automaticamente in dotnet user-secrets
durante il provisioning dell'applicazione.
// == 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"];
Il servizio AzureOpenAIChatCompletionService
facilita le richieste e le risposte.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, new DefaultAzureCredential());
Dopo aver creato il client OpenAIChatCompletionService
, l'app legge il contenuto del file hikes.md
e lo usa per fornire più contesto al modello aggiungendo una richiesta del sistema. Ciò influisce sul comportamento del modello e sui completamenti generati durante la conversazione.
// 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}");
Il codice seguente aggiunge una richiesta dell'utente al modello tramite la funzione AddUserMessage
. La funzione GetChatMessageContentAsync
indica al modello di generare una risposta in base alle richieste del sistema e dell'utente.
// 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'app aggiunge la risposta dal modello a chatHistory
per mantenere il contesto o la cronologia della chat.
// 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}");
Personalizzare le richieste del sistema o dell'utente per fornire domande e contesto diversi:
- Quante volte ho fatto un'escursione quando pioveva?
- Quante volte ho fatto un'escursione nel 2021?
Il modello genera una risposta pertinente a ogni richiesta in base agli input.
Pulire le risorse
Quando l'applicazione o le risorse di esempio non sono più necessarie, rimuovere la distribuzione corrispondente e tutte le risorse.
azd down
Risoluzione dei problemi
In Windows è possibile che vengano visualizzati i messaggi di errore seguenti dopo l'esecuzione di azd up
:
postprovision.ps1 è privo di firma digitale. Lo script non verrà eseguito nel sistema
Lo script postprovision.ps1 viene eseguito per impostare i segreti utente .NET usati nell'applicazione. Per evitare questo errore, eseguire il comando di PowerShell seguente:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Eseguire nuovamente il comando azd up
.
Un altro possibile errore:
'pwsh' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch. AVVISO: hook 'postprovision' non riuscito con codice di uscita: '1', Percorso: '.\infra\post-script\postprovision.ps1'. : codice di uscita: 1 L'esecuzione continuerà perché ContinueOnError è stato impostato su true.
Lo script postprovision.ps1 viene eseguito per impostare i segreti utente .NET usati nell'applicazione. Per evitare questo errore, eseguire manualmente lo script usando il comando di PowerShell seguente:
.\infra\post-script\postprovision.ps1
A questo punto, i segreti utente nelle app .NET basate su intelligenza artificiale sono stati configurati e possono essere testati.