Alıştırma - Azure OpenAI için .NET SDK'sını yükleme ve ilk uygulamanızı oluşturma

Tamamlandı

Metin ve sohbet tamamlamaları hakkında bilgi edindiğimize göre, bunları kullanan temel bir uygulama oluşturalım.

Yürüyüşçülerin patikalar önererek açık havada keşfetmesine yardımcı olan bir kuruluşta çalışıyorsunuz. Öneri işlevselliğine konuşma yapay zekası eklemeyi düşünüyor ve bir prototip oluşturmak istiyorsunuz.

GPT-35-Turbo modeli tarafından sağlanan Sohbet Tamamlama API'sini kullanmanız gerektiğine karar verirsiniz.

Azure OpenAI kaynağını oluşturma

İlk adım, Azure OpenAI kaynağını oluşturmak ve modeli dağıtmaktır. Şimdi bu alıştırmada GPT-3 Turbo modelini kullanalım. Belge notlarında belirtildiği gibi, GPT-3.5 Turbo Sohbet Tamamlamaları API'sini kullanır ve kullanım örneğimiz için mükemmeldir.

Önkoşullar

  • Bir Azure aboneliği

  • İstenen abonelikte Azure OpenAI'ye erişim izni verildi

    Şu anda bu hizmete erişim yalnızca uygulama tarafından sağlanmaktadır. adresinden formu https://aka.ms/oai/accesstamamlayarak Azure OpenAI'ye erişim için başvurabilirsiniz.

  • Azure CLI yüklü

Kaynak oluşturma ve model dağıtma

Kaynağı oluşturmak ve modeli dağıtmak çok adımlı bir işlemdir. Azure portalını kullanmaktan daha hızlı olabileceğinden Azure CLI'yi kullanın. Ancak isterseniz Azure portalını kullanabileceğinizi unutmayın.

  1. az login Henüz yapmadıysanız oturum açmak için komutunu çalıştırın.

  2. Yeni bir Azure kaynağı oluşturduğunuzda, yeni bir kaynak grubu oluşturabilir veya mevcut bir kaynak grubunu kullanabilirsiniz. Bu komut, yeni bir kaynak grubunun nasıl oluşturulacağını gösterir. HikingConversations-RG adını kullanın, ancak istediğiniz adı değiştirebilir veya mevcut bir grubun adını kullanabilirsiniz.

    az group create \
    --name HikingConversations-RG \
    --location eastus
    
    az group create `
    --name HikingConversations-RG `
    --location eastus
    
  3. Aşağıdaki komutu çalıştırarak HikingConversations-RG kaynak grubunda bir OpenAI kaynağı oluşturun. OpenAI kaynağına HikingConversationsAI adını verin.

    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. Ardından GPT-35-Turbo modelini oluşturduğumuz OpenAI kaynağına dağıtmak istiyoruz. Model dağıtımını HikingRecommendationTurbo olarak çağırın. Kaynak grubu adı olarak HikingConversations-RG, OpenAI kaynak adı olarak HikingConversationsAI kullandığımızı unutmayın. Farklı değerler kullandıysanız bu değerleri değiştirdiğinizden emin olun.

    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. Kaynak ve model oluşturulduktan sonra.NET SDK'sının Azure OpenAI kaynağına erişebilmesi için temel URL'yi ve erişim anahtarlarını almalıyız. Uç nokta ve birincil API anahtarlarını almak ve bunları daha sonra kullanmak üzere not almak için şu komutları kullanın:

    Uç nokta

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

    Birincil API anahtarı

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

Konsol uygulamasını oluşturma ve OpenAI SDK'sını ekleme

Bir sonraki adımda çıplak kemikli bir .NET Konsol uygulaması oluşturmak ve Azure OpenAI SDK'sını eklemek istiyoruz.

  1. Aşağıdaki komutu çalıştırarak HikingConversationsAI adlı yeni bir .NET uygulaması oluşturun.

    dotnet new console -n HikingConversationsAI
    
  2. Yeni oluşturulan HikingConversationsAI dizinine geçin.

    cd HikingConversationsAI
    
  3. Ardından Azure Open AI SDK'sını ekleyin.

    dotnet add package Azure.AI.OpenAI --prerelease
    
  4. Projeyi VS Code veya Visual Studio'da açın.

  5. Program.cs dosyasında var olan tüm kodu silin.

  6. Program.cs en üstüne ekleyinusing Azure.AI.OpenAI;.

  7. Program.cs en üstüne ekleyinusing Azure;.

  8. Azure OpenAI kaynağının uç noktası, birincil API anahtarı ve dağıttığınız modelin adını içeren üç sınıf düzeyinde değişken ekleyin.

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

    Yukarıdaki adımlarda dağıtıma HikingRecommendationTurbo adını verdik. Farklı bir değer kullandıysanız bunun yerine bunu kullandığınızdan emin olun.

  9. Son olarak, Azure OpenAI kaynağıyla iletişim kurmak için gereken sınıfın örneğini oluşturun.

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

Sistem istemini oluşturma

Şimdi modele ilk yönergeleri sağlayacak ilk sistem rolü istemini oluşturalım.

  1. İlk olarak modele yürüyüş önerilerinde bulunurken konuşma sırasında nasıl davranmasını istediğinizi belirten bir istem oluşturun.

    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. Ardından modele gönderilecek ve modelden gönderilecek tüm iletileri tutmak için bir List<ChatMessage> oluşturun.

    List<ChatMessage> chatHistory = new();
    
  3. Ardından yeni SystemChatMessage bir nesne oluşturup listeye ekleyin chatHistory . öğesini Sistem rolünden gelecek şekilde ayarlayacağız ChatMessage .

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

Konuşmayı başlatma

Ardından modele ilk iletiyi göndereceğiz ve konuşma başlatacağız.

  1. Kullanıcı için bir istem oluşturun ve bunu chatHistory kullanıcı iletisi olarak ekleyin.

    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. Şimdi nesneye ChatClient bir başvuru almanız gerekir. Bu nesne, modelle sohbet konuşmalarını kolaylaştırmakla sorumludur. Bu nedenle, Azure OpenAI İstemci nesnesine hangi modeli kullanmak istediğinizi söylemeniz gerekir.

    var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
    
  3. Daha sonra öğesini geçirerek sınıfının işlevini ChatClient çağırın.CompleteChatAsync chatHistory

    var response = await chatClient.CompleteChatAsync(chatHistory);
    
  4. Son olarak, modelin döndürdiği değeri okuyun.

    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  5. Şu ana kadar elimizde neler olduğunu görelim, terminale girerek dotnet run uygulamayı çalıştırabilirsiniz.

  6. Modelin userGreetingMessagefarklı şekilde nasıl yanıt verebileceğini görmek için değerini değiştirerek denemeler yapın.

Bir örnek çalıştırmada şunları aldık:

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?

Model belirsiz olduğundan farklı bir şey alabilir veya aynı girişle bile farklı bir çıkış üretebilirsiniz.

Konuşmaya devam etme

Konuşmaya yanıt ve ardından yanıtı çıkararak devam edelim.

  1. Konuşmanın bağlamını koruduğumuzdan emin olun, bu nedenle doğrudan chatHistory listeye geri gelen yanıtı ekleyin.

    var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text);
    
    chatHistory.Add(assistantMessage); 
    
  2. Ardından başka bir kullanıcı istemi oluşturun ve modele gönderin.

    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. Değişkenini hikeRequest farklı türde yürüyüşler istemek üzere değiştirerek denemeler yapabilirsiniz. Bir örnek çalıştırmada şu komutu aldık:

    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!
    

Özet

Artık yürüyüş önerileri sağlamaya yardımcı olacak konuşmalar oluşturmak için modelle birlikte Azure OpenAI SDK'sını gpt-35-turbo da kullanabiliriz. Şimdi modele gönderdiğimiz istemleri nasıl geliştirebileceğimizi görelim.