Azure OpenAI Servislerini Kullanarak Oltalama Maili Yazma
Selamlar,
Bu makalede, Azure üzerindeki OpenAI Servisini nasıl oluşturucağımızı ve oltamala maili yazmak için gerekli parametreler ile bu servisleri nasıl kullanacağımızı hep beraber göreceğiz.
1-) Create Azure OpenAI: Azure üzerinde OpenAI servisi aranır ve aşağıdaki gibi bir ekran ile karşılaşılır. Resource Group ve Region seçildikten sonra bu servise bir isim verilip kullanılacak fiyat paketi seçilir.
2-) Netwok Seçimi: Güvenlik amaçlı Network erişimi belirlenir. Bu spesifik bir endpoint de olabilir ya da şu an seçili olan public network de olabilir.
3-) Taglerin Seçimi: Kaynakları kategorize etmek amaçlı kullanılan isimlendirmelerdir. Faturalama bu tagler üzerinden yapılmaktadır.
4-) Review + Submit: Bu son adımda yapılan tüm seçimler, bir rapor ekranında son birkez gösterilerek onay istenir. Create butonuna basıldıktan sonra, ilgili OpenAI servisi Azure üzerinde yaratılmış olunur.
Uygulamada ilgili Azure OpenAI servislerinin kullanılması için gerekli olan Credential Key1 ve Key2, aşağıdaki ekranda görüldüğü gibi “Resource Manageent / Keys and Endpoint” sekmesi altında görülebilir. Ayrıca Endpoint de, Client’ın oluşturulması esnasında kullanılacaktır.
Not: Ayrıca, Azure servislerini kullanacak olan makinanın IP’sine, yine Azure üzerinden yetki verilmesi gerekmektedir.
5-) *Deploy Model: Geldik en önemli kısımlardan birine. Model deployments sekmesine gelinir. Burada OpeanAI’ın kullanacağı model belirlenmektedir. Seçilecek model’e göre fiyatlandırma belirlenmektedir. Ayrıca “Deployment name” string olarak boşluksuz yazılmalıdır. İlgili Deployment name, string olarak ilerde kodun içinde de kullanılacaktır. Bu nedenle, aynı Api Key gibi bunun da bir kenara not edilmesinde fayda vardır.
Evet Azure üzerinde OpenAI servisi için gereli ayarlamalarımız yaptık. Şimdi sıra geldi .Net 8 projemizi yazmaya. Aşağıda görüldüğü gibi “AzureOpenAI” adında Console Application yaratılır.
Nuget’den henüz, Prerelase olan Azure.AI.Open AI kütüphanesi indirilir.
1-) Client Yaratma
Aşağıda görüldüğü gibi Azure OpenAI servisinin kullanılabilmesi için bir Client’ın oluşturulması gerekmektedir. Bunun için tanımlı endpoint ve Key1, makalenin başında tanımlanmış Azure Portal sayfasından alınmalıdır.
Son olarak, ilgili client altında birden fazla model tanımlanmış olabilir. Hangi Model’in kullanılacağının tanımlanması için, gene Portal sayfasında seçilen model için tanımlanan string “Deployment Name” GetChatClient() methoduna parametre olarak verilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using Azure; using Azure.AI.OpenAI; using OpenAI.Chat; string endpoint = "https://westeuai.openai.azure.com/"; string apiKey = "--YOUR AZURE OPENAI KEY1---"; // Create the client AzureOpenAIClient azureClient = new( new Uri(endpoint), new AzureKeyCredential(apiKey)); ChatClient chatClient = azureClient.GetChatClient("keepnet-deployment"); |
2-) ChatCompletion Modelin Custom Ayarları
Aşağıda görüldüğü gibi kullanılacak model için, kişiye ve ihtiyaca özgü ayarlamalar yapılmaktadır.
- MaximumToken sayısı yani kelime sayısı 2000 olarak tanımlanmıştır. Seçilen model tipine göre, herbir token için ücret kesilmektedir.
- FrequencyPenalty: 0 ile 2 arasında verilebilen bir değerdir. Verilen değere göre, tanımlanan metindeki herbir kelimenin o ana kadarki mevcut sıklıklarına göre cezalandırma işlemi yapılır. Bu da modelin aynı satırın, tekrarlanma olasılığını azaltır.
- Temperature: 0 ile 2 arasında herhangi bir değer olabilir. 0.8 gibi daha yüksek değerler çıktıyı daha rastgele hale getirirken 0.2 gibi daha düşük değerler çıktıyı daha odaklanmış ve deterministik hale getirir. Genellikle bu değerin veya “top_p” değerinin değiştirilmesi önerilir, ancak ikisinin birden değiştirilmesi önerilmez.
- PresencePenalty: -2 ile 2 arasındaki bir sayıdır. Pozitif değerler, yeni belirteçlerin metinde daha önce yer alıp almadığına göre cezalandırılır ve modelin yeni konulardan bahsetme olasılığını artırır.
1 2 3 4 5 6 7 |
var chatCompletionOptions = new ChatCompletionOptions { MaxTokens = 2000, FrequencyPenalty = 0, Temperature = (float?)0.7, PresencePenalty = 0 }; |
3-) ChatCompletin’in Tanımlanması Ve OpenAI’dan cevabın alınması
ChatCompletion’de, 3 tip MesajRolü bulunmaktadır.
- System: Yapay zekaya bir role ya da tanımlama yapılarak tarama havuzunun kısıtlanması, olasılıkların azaltıp daha hızlı ve doğru cevap dönülmesi amaçlanmıştır.
- User: Yapay zekadan talepler bu mesaj tipinde bulunulur.
- Assistant: Yapay zekanın bize geri döndüğü propmtlardır.
Aşağıda görüldüğü gibi önce ChatGPT’ye, yardımcı bir asistan olduğu İngilizce söylenmiştir. Daha sonra bize verdiği cevap tanımlanmıştır. Böylece chat geçmişi yazılarak, en sağlıklı cevaba erişmek istenmiştir. Daha sonra istenen oltlama mailinin içeriği tanımlanmıştır ve en sonunda cevap, asenkron olarak beklenilmişitir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
ChatCompletion completion = await chatClient.CompleteChatAsync( [ // System messages represent instructions or other guidance about how the assistant should behave new SystemChatMessage("You are a helpful assistant.."), // User messages represent user input, whether historical or the most recen tinput new UserChatMessage("Hi, can you help me?"), // Assistant messages in a request represent conversation history for responses new AssistantChatMessage("Of course! How can I help you?"), new UserChatMessage("Write an email to Bora Kasmer offering the recipient a chance to win a $50\r\nAmazon gift card when they click a link to complete an employee satisfaction survey. Let the connection path be https://borakasmer.com?id=5. Create a beautifully formatted output using HTML and CSS.") ], chatCompletionOptions); |
4-) Dönen Sonucun Konsol’a yazılması:
Aşağıda görüldüğü gibi, dönen sonuç 2 farklı şekilde konsol’a yazdırılmıştır.
1 2 3 4 5 6 7 8 |
Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}"); //OR foreach (ChatMessageContentPart result in completion.Content) { Console.WriteLine(result.Text); } Console.ReadLine(); |
Sonuç: İstek İngilizce sorulduğu için, oluşturulan oltalama maili de ayrıca bir dil tanımlanmadığı için ingilizcedir.
Geldik bir makalenin daha sonuna. Bu makalede AzureOpenAI servisleri ile istediğimiz bir oltalama mailini şu an için en yeni olan “GPT-4o” modeli ile yapay zekaya yazdırdık..Unutulmamalıdır ki “Azure.AI.Open AI kütüphanesi” henüz beta sürümündedir. Yani ilerleyen dönemlerde var olan servislerde değişiklikler olabileceği gibi, gereken ihtiyaçlara göre yeni servisler de gelebilmektedir.
ChatGPT’nin yakın zamanda biz geliştiricilerin yerini alabileceğini düşünmüyorum. Ama bunu bir araç olarak kullanarak, daha az eforla, kısa sürede, daha çok, daha doğru işler için kullanabileceğimizi düşünüyorum.
Yeni bir makalede görüşmek üzere hepinize hoşçakalın.
Tüm Kod (Program.cs):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
using Azure; using Azure.AI.OpenAI; using OpenAI.Chat; string endpoint = "https://westeuai.openai.azure.com/"; string apiKey = "--YOUR AZURE OPENAI KEY1---"; // Create the client AzureOpenAIClient azureClient = new( new Uri(endpoint), new AzureKeyCredential(apiKey)); ChatClient chatClient = azureClient.GetChatClient("keepnet-deployment"); var chatCompletionOptions = new ChatCompletionOptions { MaxTokens = 2000, FrequencyPenalty = 0, Temperature = (float?)0.7, PresencePenalty = 0 }; ChatCompletion completion = await chatClient.CompleteChatAsync( [ // System messages represent instructions or other guidance about how the assistant should behave new SystemChatMessage("You are a helpful assistant.."), // User messages represent user input, whether historical or the most recen tinput new UserChatMessage("Hi, can you help me?"), // Assistant messages in a request represent conversation history for responses new AssistantChatMessage("Of course! How can I help you?"), new UserChatMessage("Write an email to Bora Kasmer offering the recipient a chance to win a $50\r\nAmazon gift card when they click a link to complete an employee satisfaction survey. Let the connection path be https://borakasmer.com?id=5. Create a beautifully formatted output using HTML and CSS.") ], chatCompletionOptions); Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}"); //OR foreach (ChatMessageContentPart result in completion.Content) { Console.WriteLine(result.Text); } Console.ReadLine(); |
Son Yorumlar