Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida introduttiva si apprenderà come creare un assistente di intelligenza artificiale minimo usando le librerie OpenAI o Azure OpenAI SDK. Gli assistenti di intelligenza artificiale forniscono funzionalità agentiche per aiutare gli utenti a completare le attività usando strumenti e modelli di intelligenza artificiale. Nelle sezioni successive si apprenderà quanto segue:
- Componenti di base e concetti degli assistenti di intelligenza artificiale
- Come creare un assistente usando Azure OpenAI SDK
- Come migliorare e personalizzare le funzionalità di un assistente
Prerequisiti
- Installare .NET 8.0 o versione successiva
- Visual Studio Code (facoltativo)
- Visual Studio (facoltativo)
- Chiave di accesso per un modello OpenAI
- Installare .NET 8.0 o versione successiva
- Visual Studio Code (facoltativo)
- Visual Studio (facoltativo)
- Accesso a un'istanza di Azure OpenAI tramite Identità di Azure o una chiave di accesso
Componenti di base degli assistenti di intelligenza artificiale
Gli assistenti di intelligenza artificiale si basano sui thread conversazionali con un utente. L'utente invia richieste all'assistente su un thread di conversazione, che indirizza l'assistente a completare le attività usando gli strumenti disponibili. Gli assistenti possono elaborare e analizzare i dati, prendere decisioni e interagire con utenti o altri sistemi per raggiungere obiettivi specifici. La maggior parte degli assistenti include i componenti seguenti:
| Componente | Descrizione |
|---|---|
| Assistente | Il client e la logica di intelligenza artificiale di base che usano modelli OpenAI di Azure, gestiscono i thread di conversazione e usano gli strumenti configurati. |
| Discussione | Sessione di conversazione tra un assistente e un utente. I thread archivia i messaggi e gestiscono automaticamente il troncamento per adattare il contenuto nel contesto di un modello. |
| Messaggio | Messaggio creato da un assistente o da un utente. I messaggi possono includere testo, immagini e altri file. I messaggi vengono archiviati come elenco nel thread. |
| Esegui | Attivazione di un assistente per iniziare l'esecuzione in base al contenuto del thread. L'assistente usa la configurazione e i messaggi del thread per eseguire attività chiamando modelli e strumenti. Nell'ambito di un processo, l'assistente aggiunge messaggi al thread. |
| Esegui passaggi | Elenco dettagliato dei passaggi eseguiti dall'assistente durante un'operazione. Un assistente può chiamare strumenti o creare messaggi durante l'esecuzione. L'esame dei passaggi di esecuzione consente di comprendere come l'assistente ottiene i risultati finali. |
Gli assistenti possono anche essere configurati per l'uso di più strumenti in parallelo per completare le attività, tra cui:
- strumento dell'interprete del codice: scrive ed esegue codice in un ambiente di esecuzione in modalità sandbox.
- Funzione che chiama: esegue funzioni personalizzate locali definite nel codice.
- capacità di ricerca di file: potenzia l'assistente con conoscenze provenienti dall'esterno del modello.
Comprendendo questi componenti di base e il modo in cui interagiscono, è possibile creare e personalizzare potenti assistenti di intelligenza artificiale per soddisfare le esigenze specifiche.
Creare l'app .NET
Completare i passaggi seguenti per creare un'app console .NET e aggiungere il pacchetto necessario per lavorare con gli assistenti:
In una finestra del terminale passare a una directory vuota nel dispositivo e creare una nuova app con il comando
dotnet new:dotnet new console -o AIAssistantAggiungi il pacchetto OpenAI all'app:
dotnet add package OpenAIAprire la nuova app nell'editor preferito, ad esempio Visual Studio Code.
code .
In una finestra del terminale passare a una directory vuota nel dispositivo e creare una nuova app con il comando
dotnet new:dotnet new console -o AIAssistantAggiungere il pacchetto Azure.AI.OpenAI all'app:
dotnet add package Azure.AI.OpenAIAprire la nuova app nell'editor preferito, ad esempio Visual Studio Code.
code .
Creare il client assistente di intelligenza artificiale
Aprire il
Program.csfile e sostituire il contenuto del file con il codice seguente per creare i client necessari:using OpenAI; using OpenAI.Assistants; using OpenAI.Files; using Azure.AI.OpenAI; using Azure.Identity; // Create the OpenAI client OpenAIClient openAIClient = new("your-apy-key"); // For Azure OpenAI, use the following client instead: AzureOpenAIClient azureAIClient = new( new Uri("your-azure-openai-endpoint"), new DefaultAzureCredential()); #pragma warning disable OPENAI001 AssistantClient assistantClient = openAIClient.GetAssistantClient(); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();Creare un documento di esempio in memoria e caricarlo nel
OpenAIFileClient:// Create an in-memory document to upload to the file client using Stream document = BinaryData.FromBytes(""" { "description": "This document contains the sale history data for Contoso products.", "sales": [ { "month": "January", "by_product": { "113043": 15, "113045": 12, "113049": 2 } }, { "month": "February", "by_product": { "113045": 22 } }, { "month": "March", "by_product": { "113045": 16, "113055": 5 } } ] } """u8.ToArray()).ToStream(); // Upload the document to the file client OpenAIFile salesFile = fileClient.UploadFile( document, "monthly_sales.json", FileUploadPurpose.Assistants);Abilitare le funzionalità di ricerca file e gli strumenti per l'interpretazione del codice tramite il
AssistantCreationOptions:// Configure the assistant options AssistantCreationOptions assistantOptions = new() { Name = "Example: Contoso sales RAG", Instructions = "You are an assistant that looks up sales data and helps visualize the information based" + " on user queries. When asked to generate a graph, chart, or other visualization, use" + " the code interpreter tool to do so.", Tools = { new FileSearchToolDefinition(), // Enable the assistant to search and access files new CodeInterpreterToolDefinition(), // Enable the assistant to run code for data analysis }, ToolResources = new() { FileSearch = new() { NewVectorStores = { new VectorStoreCreationHelper([salesFile.Id]), } } }, };Creare il
Assistante un thread per gestire le interazioni tra l'utente e l'assistente:// Create the assistant Assistant assistant = assistantClient.CreateAssistant("gpt-4o", assistantOptions); // Configure and create the conversation thread ThreadCreationOptions threadOptions = new() { InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions); // Sent the prompt and monitor progress until the thread run is complete do { Thread.Sleep(TimeSpan.FromSeconds(1)); threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); } while (!threadRun.Status.IsTerminal); // Get the messages from the thread run var messages = assistantClient.GetMessagesAsync( threadRun.ThreadId, new MessageCollectionOptions() { Order = MessageCollectionOrder.Ascending });Stampare i messaggi e salvare l'immagine generata dalla conversazione con l'assistente:
// Process the messages from the assistant await foreach (ThreadMessage message in messages) { // Print out the messages from the assistant Console.Write($"[{message.Role.ToString().ToUpper()}]: "); foreach (MessageContent contentItem in message.Content) { if (!string.IsNullOrEmpty(contentItem.Text)) { Console.WriteLine($"{contentItem.Text}"); if (contentItem.TextAnnotations.Count > 0) { Console.WriteLine(); } // Include annotations, if any foreach (TextAnnotation annotation in contentItem.TextAnnotations) { if (!string.IsNullOrEmpty(annotation.InputFileId)) { Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}"); } if (!string.IsNullOrEmpty(annotation.OutputFileId)) { Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}"); } } } // Save the generated image file if (!string.IsNullOrEmpty(contentItem.ImageFileId)) { OpenAIFile imageInfo = fileClient.GetFile(contentItem.ImageFileId); BinaryData imageBytes = fileClient.DownloadFile(contentItem.ImageFileId); using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png"); imageBytes.ToStream().CopyTo(stream); Console.WriteLine($"<image: {imageInfo.Filename}.png>"); } } Console.WriteLine(); }Individuare e aprire l'immagine salvata nella directory dell'app
bin, simile alla seguente: