Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här snabbstarten får du lära dig hur du skapar en minimal AI-assistent med hjälp av OpenAI- eller Azure OpenAI SDK-biblioteken. AI-assistenter tillhandahåller agentiska funktioner som hjälper användarna att utföra uppgifter med hjälp av AI-verktyg och modeller. I de kommande avsnitten får du lära dig följande:
- Grundläggande komponenter och begrepp för AI-assistenter
- Så här skapar du en assistent med Hjälp av Azure OpenAI SDK
- Så här förbättrar och anpassar du funktionerna i en assistent
Förutsättningar
- Installera .NET 8.0 eller senare
- Visual Studio Code (valfritt)
- Visual Studio (valfritt)
- En åtkomstnyckel för en OpenAI-modell
- Installera .NET 8.0 eller senare
- Visual Studio Code (valfritt)
- Visual Studio (valfritt)
- Åtkomst till en Azure OpenAI-instans via Azure Identity eller en åtkomstnyckel
Kärnkomponenter i AI-assistenter
AI-assistenter baseras på konversationstrådar med en användare. Användaren skickar uppmaningar till assistenten i en konversationstråd, som instruerar assistenten att utföra uppgifter med hjälp av de verktyg som den har tillgängliga. Assistenter kan bearbeta och analysera data, fatta beslut och interagera med användare eller andra system för att uppnå specifika mål. De flesta assistenter innehåller följande komponenter:
Komponent | Beskrivning |
---|---|
Assistent | Ai-kärnklienten och logiken som använder Azure OpenAI-modeller, hanterar konversationstrådar och använder konfigurerade verktyg. |
Tråd | En konversationssession mellan en assistent och en användare. Trådar lagrar meddelanden och hanterar automatiskt trunkering för att passa in innehåll i en modells kontext. |
Meddelande | Ett meddelande som skapats av en assistent eller en användare. Meddelanden kan innehålla text, bilder och andra filer. Meddelanden lagras som en lista i tråden. |
Springa | Aktivering av en assistent för att starta baserat på innehållet i tråden. Assistenten använder sin konfiguration och trådens meddelanden för att utföra uppgifter genom att anropa modeller och verktyg. Som en del av en process lägger assistenten till meddelanden i konversationen. |
Kör steg | En detaljerad lista över steg som assistenten vidtog som en del av ett genomförande. En assistent kan anropa verktyg eller skapa meddelanden under körningen. Genom att undersöka körsteg kan du förstå hur assistenten kommer till sina slutliga resultat. |
Assistenter kan också konfigureras för att använda flera verktyg parallellt för att utföra uppgifter, inklusive följande:
- kodtolkar verktyg: Skriver och kör kod i en sandboxat exekveringsmiljö.
- Funktion som anropar: Kör lokala anpassade funktioner som du definierar i koden.
- Filsökningsfunktioner: Utökar assistenten med kunskap utanför modellen.
Genom att förstå dessa kärnkomponenter och hur de interagerar kan du skapa och anpassa kraftfulla AI-assistenter för att uppfylla dina specifika behov.
Skapa .NET-appen
Slutför följande steg för att skapa en .NET-konsolapp och lägg till paketet som behövs för att arbeta med assistenter:
I ett terminalfönster navigerar du till en tom katalog på enheten och skapar en ny app med kommandot
dotnet new
:dotnet new console -o AIAssistant
Lägg till OpenAI--paketet i din app:
dotnet add package OpenAI --prerelease
Öppna den nya appen i valfri redigerare, till exempel Visual Studio Code.
code .
I ett terminalfönster navigerar du till en tom katalog på enheten och skapar en ny app med kommandot
dotnet new
:dotnet new console -o AIAssistant
Lägg till Azure.AI.OpenAI--paketet i din app:
dotnet add package Azure.AI.OpenAI --prerelease
Öppna den nya appen i valfri redigerare, till exempel Visual Studio Code.
code .
Skapa AI-assistentklienten
Program.cs
Öppna filen och ersätt innehållet i filen med följande kod för att skapa de klienter som krävs: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();
Skapa ett minnesinternt exempeldokument och ladda upp det till
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);
Aktivera funktioner för filsökning och kodtolkning via
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]), } } }, };
Skapa
Assistant
och en tråd för att hantera interaktioner mellan användaren och assistenten:// 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 });
Skriv ut meddelandena och spara den genererade bilden från konversationen med assistenten:
// 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(); }
Leta upp och öppna den sparade avbildningen i appkatalogen
bin
, vilket bör likna följande: