Megosztás a következőn keresztül:


Minimális AI-asszisztens létrehozása a .NET használatával

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

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:

  1. 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
    
  2. Adja hozzá az OpenAI csomagot az alkalmazáshoz:

    dotnet add package OpenAI --prerelease
    
  3. Nyissa meg az új alkalmazást a választott szerkesztőben, például a Visual Studio Code-ban.

    code .
    
  1. 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
    
  2. Adja hozzá az Azure.AI.OpenAI csomagot az alkalmazáshoz:

    dotnet add package Azure.AI.OpenAI --prerelease
    
  3. 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

  1. 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();
    
  2. 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);
    
  3. A fájlkereső és kódértelmező eszközök engedélyezése a AssistantCreationOptionssegí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]),
                }
            }
        },
    };
    
  4. 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
        });
    
  5. 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:

    Az AI-modell által létrehozott vizualizációt bemutató grafikon.

Következő lépések