Condividi tramite


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, eseguire pwsh 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

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.

  1. Da un terminale o un prompt dei comandi passare alla src\quickstarts\azure-openai directory del repository di esempio.

  2. 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

  1. Da un terminale o un prompt dei comandi passare alla directory src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes.

  2. 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>
    
  3. Usare il comando dotnet run per eseguire l'app:

    dotnet run
    
  1. Da un terminale o un prompt dei comandi passare alla directory semantic-kernel\02-HikerAI.

  2. 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.

Passaggi successivi