Ćwiczenie — instalowanie zestawu .NET SDK dla usługi Azure OpenAI i tworzenie pierwszej aplikacji

Ukończone

Teraz, gdy mamy już wiedzę na temat uzupełniania tekstu i czatu, utwórzmy podstawową aplikację, która z nich korzysta.

Pracujesz dla organizacji, która pomaga turystom eksplorować na świeżym powietrzu, polecając szlaki. Rozważasz dodanie konwersacyjnej sztucznej inteligencji do funkcji rekomendacji i chcesz utworzyć prototyp.

Decydujesz, że musisz użyć interfejsu API uzupełniania czatu dostarczonego przez model GPT-35-Turbo.

Tworzenie zasobu usługi Azure OpenAI

Pierwszym krokiem jest utworzenie zasobu usługi Azure OpenAI i wdrożenie modelu. W tym ćwiczeniu użyjemy modelu GPT-3 Turbo. Jak zauważa dokumentacja, GPT-3.5 Turbo korzysta z interfejsu API uzupełniania czatów i doskonale sprawdza się w naszym przypadku użycia.

Wymagania wstępne

Tworzenie zasobu i wdrażanie modelu

Tworzenie zasobu i wdrażanie modelu jest procesem wieloetapowym. Użyj interfejsu wiersza polecenia platformy Azure, ponieważ może być szybszy niż w witrynie Azure Portal. Pamiętaj jednak, że możesz użyć witryny Azure Portal, jeśli chcesz.

  1. az login Uruchom polecenie , aby zalogować się, jeśli jeszcze tego nie zrobiono.

  2. Podczas tworzenia nowego zasobu platformy Azure możesz utworzyć nową grupę zasobów lub użyć istniejącej. To polecenie pokazuje, jak utworzyć nową grupę zasobów. Użyj nazwy HikingConversations-RG , ale możesz zastąpić wybraną nazwę lub użyć nazwy istniejącej grupy.

    az group create \
    --name HikingConversations-RG \
    --location eastus
    
    az group create `
    --name HikingConversations-RG `
    --location eastus
    
  3. Uruchom następujące polecenie, aby utworzyć zasób OpenAI w grupie zasobów HikingConversations-RG . Nazwij zasób OpenAI HikingConversationsAI.

    az cognitiveservices account create \
    -n HikingConversationsAI \
    -g HikingConversations-RG \
    -l eastus \
    --kind OpenAI \
    --sku s0
    
    az cognitiveservices account create `
    -n HikingConversationsAI `
    -g HikingConversations-RG `
    -l eastus `
    --kind OpenAI `
    --sku s0
    
  4. Następnie chcemy wdrożyć model GPT-35-Turbo w utworzonym zasobie OpenAI. Wywołaj wdrożenie modelu HikingRecommendationTurbo. Pamiętaj, że używamy elementu HikingConversations-RG jako nazwy grupy zasobów, HikingConversationsAI jako nazwy zasobu OpenAI, jeśli użyto różnych wartości, upewnij się, że zastąpisz te wartości.

    az cognitiveservices account deployment create \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --deployment-name HikingRecommendationTurbo \
    --model-name gpt-35-turbo \
    --model-version "0301" \
    --model-format OpenAI \
    --scale-settings-scale-type "Standard"
    
    az cognitiveservices account deployment create `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --deployment-name HikingRecommendationTurbo `
    --model-name gpt-35-turbo `
    --model-version "0301" `
    --model-format OpenAI `
    --scale-settings-scale-type "Standard"
    
  5. Po utworzeniu zasobu i modelu musimy uzyskać podstawowy adres URL i klucze dostępu, aby zestaw SDK platformy .NET mógł uzyskać dostęp do zasobu usługi Azure OpenAI. Użyj tych poleceń, aby uzyskać punkt końcowy i podstawowe klucze interfejsu API i zanotować je do późniejszego użycia:

    Punkt końcowy

    az cognitiveservices account show \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "properties.endpoint"
    
    az cognitiveservices account show `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "properties.endpoint"
    

    Podstawowy klucz interfejsu API

    az cognitiveservices account keys list \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "key1"
    
    az cognitiveservices account keys list `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "key1"
    

Tworzenie aplikacji konsolowej i dodawanie zestawu OpenAI SDK

Następnie chcemy utworzyć aplikację konsolową platformy .NET bez kości i dodać zestaw AZURE OpenAI SDK.

  1. Uruchom następujące polecenie, aby utworzyć nową aplikację platformy .NET o nazwie HikingConversationsAI.

    dotnet new console -n HikingConversationsAI
    
  2. Przejdź do nowo utworzonego katalogu HikingConversationsAI .

    cd HikingConversationsAI
    
  3. Następnie dodaj zestaw AZURE Open AI SDK.

    dotnet add package Azure.AI.OpenAI --prerelease
    
  4. Otwórz projekt w programie VS Code lub Visual Studio.

  5. W pliku Program.cs usuń cały istniejący kod.

  6. Dodaj using Azure.AI.OpenAI; do góry Program.cs.

  7. Dodaj using Azure; do góry Program.cs.

  8. Dodaj trzy zmienne na poziomie klasy, które przechowują odwołania do punktu końcowego zasobu usługi Azure OpenAI, klucza podstawowego interfejsu API i nazwy wdrożonego modelu.

    string openAIEndpoint = "<YOUR ENDPOINT URL VALUE>";
    string openAIAPIKey = "<YOUR PRIMARY API KEY VALUE>";
    string openAIDeploymentName = "HikingRecommendationTurbo";
    

    W powyższych krokach nazwaliśmy wdrożenie HikingRecommendationTurbo, jeśli użyto innej wartości, upewnij się, że używasz tej wartości.

  9. Na koniec utwórz wystąpienie klasy potrzebnej do komunikowania się z zasobem usługi Azure OpenAI.

    var endpoint = new Uri(openAIEndpoint);
    var credentials = new AzureKeyCredential(openAIAPIKey);
    var openAIClient = new AzureOpenAIClient(endpoint, credentials);
    

Tworzenie monitu systemowego

Utwórzmy początkowy monit o rolę systemu, który udostępni początkowe instrukcje dla modelu.

  1. Najpierw utwórz monit, który instruuje model, jak chcesz, aby działał podczas konwersacji podczas rekomendowania podwyżek.

    var systemPrompt = 
    """
    You are a hiking enthusiast who helps people discover fun hikes. You are upbeat and friendly. 
    You ask people what type of hikes they like to take and then suggest some.
    """;
    
  2. Następnie utwórz element , List<ChatMessage> aby przechowywać wszystkie komunikaty, które będą wysyłane do i z modelu.

    List<ChatMessage> chatHistory = new();
    
  3. Następnie utwórz nowy SystemChatMessage obiekt i dodaj go do chatHistory listy. Ustawimy wartość ChatMessage , która będzie pochodzić z roli System.

    SystemChatMessage systemMessage = ChatMessage.CreateSystemMessage(systemPrompt);
    
    chatHistory.Add(systemMessage);
    

Inicjowanie konwersacji

Następnie wyślemy pierwszą wiadomość do modelu, inicjując konwersację.

  1. Utwórz monit dla użytkownika i dodaj go do komunikatu chatHistory jako użytkownika.

    string userGreeting = """
    Hi there hiking recommendation bot! 
    Can't wait to hear what you have in store for me!
    """;
    
    UserChatMessage userGreetingMessage = ChatMessage.CreateUserMessage(userGreeting);
    chatHistory.Add(userGreetingMessage);
    
    Console.WriteLine($"User >>> {userGreeting}");
    
  2. Teraz musisz uzyskać odwołanie do ChatClient obiektu. Ten obiekt jest odpowiedzialny za ułatwianie rozmów na czacie z modelem. W związku z tym należy poinformować obiekt klienta usługi Azure OpenAI, który model wdrożony ma być używany.

    var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
    
  3. Następnie wywołaj CompleteChatAsync funkcję ChatClient klasy przekazującej chatHistoryelement .

    var response = await chatClient.CompleteChatAsync(chatHistory);
    
  4. Następnie odczytaj wartość zwróconą przez model.

    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  5. Zobaczmy, co mamy do tej pory, możesz uruchomić aplikację, wprowadzając dotnet run do terminalu.

  6. Poeksperymentuj userGreetingMessage, zmieniając wartość "s", aby zobaczyć, jak model może reagować inaczej.

W jednym przykładowym przebiegu otrzymaliśmy następujące elementy:

Hello! Great to hear from you. What type of hikes are you interested in? Do you enjoy easy scenic walks, challenging trails, or something in between? Do you prefer hikes with waterfalls, mountain views, or unique geological formations?

Możesz otrzymać coś innego, co model jest nieokreślony lub może wygenerować inne dane wyjściowe nawet przy użyciu tych samych danych wejściowych.

Kontynuowanie konwersacji

Kontynuujmy, odpowiadając na konwersację, a następnie wyświetlając odpowiedź.

  1. Upewnij się, że zachowujemy kontekst konwersacji, dlatego dodaj odpowiedź, która wróciła bezpośrednio do chatHistory listy.

    var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text);
    
    chatHistory.Add(assistantMessage); 
    
  2. Następnie utwórz kolejny monit użytkownika i wyślij go do modelu.

    var hikeRequest = 
    """
    I would like a strenuous hike near where I live that ends with
    a view that is amazing.
    """;
    
    Console.WriteLine($"User >>> {hikeRequest}");
    
    UserChatMessage hikeMessage = ChatMessage.CreateUserMessage(hikeRequest);
    
    chatHistory.Add(hikeMessage);
    
    response = await chatClient.CompleteChatAsync(chatHistory); 
    
    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  3. Możesz eksperymentować, zmieniając zmienną, hikeRequest aby zażądać różnych typów podwyżek. W jednym przykładowym przebiegu otrzymaliśmy:

    Great choice! If you're up for a challenge, I recommend checking out the hike to Poo Poo Point in Issaquah, Washington. The hike is 7.2 miles roundtrip, with an elevation gain of 1,858 feet, so it's definitely a workout. But the stunning views of Mount Rainier and the Cascade Mountains make it all worthwhile. Plus, you'll get to see paragliders taking off from Poo Poo Point. It's a popular hike, so I recommend going early to avoid crowds. Let me know if you need more information!
    

Podsumowanie

Teraz możemy użyć zestawu AZURE OpenAI SDK wraz z modelem gpt-35-turbo , aby utworzyć konwersacje, które pomagają w dostarczaniu zaleceń dotyczących turystyki pieszej. Następnie zobaczmy, jak możemy ulepszyć monity wysyłane do modelu.