Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a rövid útmutatóban megtudhatja, hogyan hozhat létre minimális AI-asszisztenst az OpenAI vagy az Azure OpenAI SDK-kódtárak használatával. Az AI-asszisztensek ügynöki funkciókkal segítik a felhasználókat a feladatok AI-eszközök és modellek használatával történő elvégzésében. Az alábbi szakaszokban a következőket fogja elsajátítani:
- Az AI-asszisztensek alapvető összetevői és fogalmai
- Asszisztens létrehozása az Azure OpenAI SDK használatával
- Az asszisztens képességeinek javítása és testreszabása
Előfeltételek
- Telepítse a .NET 8.0 vagy újabb verziót
- Visual Studio Code (nem kötelező)
- Visual Studio (nem kötelező)
- OpenAI-modell hozzáférési kulcsa
- Telepítse a .NET 8.0 vagy újabb verziót
- Visual Studio Code (nem kötelező)
- Visual Studio (nem kötelező)
- Hozzáférés egy Azure OpenAI-példányhoz az Azure Identity vagy egy hozzáférési kulcs használatával
Az AI-asszisztensek alapvető összetevői
Az AI-asszisztensek a felhasználóval folytatott beszélgetési szálakon alapulnak. A felhasználó egy beszélgetési szálon kéri az asszisztenst, amely arra utasítja az asszisztenst, hogy végezze el a feladatokat a rendelkezésére álló eszközökkel. Az asszisztensek feldolgozhatják és elemezhetik az adatokat, döntéseket hozhatnak, és interakcióba léphetnek a felhasználókkal vagy más rendszerekkel meghatározott célok elérése érdekében. A legtöbb asszisztens a következő összetevőket tartalmazza:
Komponens | Leírás |
---|---|
Asszisztens | Az Azure OpenAI-modelleket használó, beszélgetési szálakat kezelő és konfigurált eszközöket használó alapvető AI-ügyfél és logika. |
szál | Beszélgetési munkamenet egy asszisztens és egy felhasználó között. A szálak üzeneteket tárolnak, és automatikusan kezelik a csonkolást, hogy a tartalom illeszkedjen a modell környezetébe. |
Üzenet | Egy asszisztens vagy egy felhasználó által létrehozott üzenet. Az üzenetek tartalmazhatnak szöveget, képeket és más fájlokat. Az üzenetek listaként vannak tárolva a szálon. |
Fut | Egy asszisztens aktiválása a szál tartalma alapján történő futtatás megkezdéséhez. Az asszisztens a konfigurációjával és a szál üzeneteivel hajtja végre a feladatokat modellek és eszközök meghívásával. A futtatás részeként az asszisztens hozzáfűzi az üzeneteket a szálhoz. |
Lépések végrehajtása | Az asszisztens által a futtatás során végrehajtott lépések részletes listája. Az asszisztensek a futtatásuk során eszközöket hívhatnak vagy üzeneteket hozhatnak létre. A futtatási lépések vizsgálata lehetővé teszi, hogy megértse, hogyan jut el az asszisztens a végső eredményekhez. |
Az asszisztensek úgy is konfigurálhatók, hogy párhuzamosan több eszközt használjanak a feladatok elvégzéséhez, beleértve a következőket:
- Kódértelmező eszköz: Kód írása és futtatása tesztkörnyezetben.
- Függvény hívás: A kódban definiált helyi saját függvényeket futtatja.
- Fájlkeresési képességek: Kibővíti az asszisztenst a modellen kívüli ismeretekkel.
Ezeknek az alapvető összetevőknek és azok interakcióinak megértésével hatékony AI-asszisztenseket hozhat létre és szabhat testre az ön igényeinek megfelelően.
A .NET-alkalmazás létrehozása
A .NET-konzolalkalmazás létrehozásához és az asszisztensek használatához szükséges csomag hozzáadásához hajtsa végre az alábbi lépéseket:
Egy terminálablakban lépjen egy üres könyvtárra az eszközön, és hozzon létre egy új alkalmazást a
dotnet new
paranccsal:dotnet new console -o AIAssistant
Adja hozzá az OpenAI csomagot az alkalmazáshoz:
dotnet add package OpenAI --prerelease
Nyissa meg az új alkalmazást a választott szerkesztőben, például a Visual Studio Code-ban.
code .
Egy terminálablakban lépjen egy üres könyvtárra az eszközön, és hozzon létre egy új alkalmazást a
dotnet new
paranccsal:dotnet new console -o AIAssistant
Adja hozzá az Azure.AI.OpenAI csomagot az alkalmazáshoz:
dotnet add package Azure.AI.OpenAI --prerelease
Nyissa meg az új alkalmazást a választott szerkesztőben, például a Visual Studio Code-ban.
code .
Az AI-asszisztens ügyfél létrehozása
Nyissa meg a
Program.cs
fájlt, és cserélje le a fájl tartalmát a következő kódra a szükséges ügyfelek létrehozásához: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();
Hozzon létre egy memórián belüli mintadokumentumot, és töltse fel a
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);
A fájlkereső és kódértelmező eszközök engedélyezése a
AssistantCreationOptions
segítségével.// 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]), } } }, };
Hozza létre a
Assistant
és egy szálat a felhasználó és az asszisztens közötti interakciók kezeléséhez:// 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 });
Nyomtassa ki az üzeneteket, és mentse a létrehozott képet az asszisztenssel folytatott beszélgetésből:
// 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(); }
Keresse meg és nyissa meg a mentett lemezképet az alkalmazáskönyvtárban
bin
, amelynek az alábbihoz hasonlónak kell lennie: