Microservice’i ChatGPT .Net 7.0 ile Çevirin

MERHABA,

Bugün ChatGPT ile günlük rutinimizi nasıl otomatikleştirebileceğimizden bahsedeceğiz. Kimlik avı simülatörleri için her gün Türkçe E-posta Şablonu oluşturuyoruz. Bu metin şablonunu ChatGPT’yi kullanarak otomatik olarak İngilizce, Almanca ve Fransızca’ya çevireceğiz.

1-)OpenAI Hesabı:

Öncelikle OpenAI Api’den bir hesap almanız gerekiyor Api Anahtarını API anahtarlarını görüntüle menüsünden alabilirsiniz.

API Keys Ekranınız aşağıdaki gibi olmalıdır.

2-) Veritabanı

Veritabanı Tabloları Oluşturalım:

Dil Türü :

CREATE  TABLE [dbo].[LanguageType]( 
[ID] [ int ] IDENTITY ( 1 , 1 ) NOT  NULL , 
[LanguageName] [nvarchar]( 50 ) NULL , 
[CreatedDate] [datetime] NULL , 
[IsDeleted] [bit] NULL , 
 CONSTRAINT [PK_LanguageType] BİRİNCİL ANAHTAR KÜMELENMİŞ 
( 
[ID] ASC
 ) İLE (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =  ON , ALLOW_PAGE_LOCKS =  ON ) ON [ PRIMARY ] 
) ON [ PRIMARY ] 
GO 

ALTER  TABLE [ dbo].[LanguageType] CONSTRAINT EKLE   [DF_LanguageType_CreatedDate]   DEFAULT (getdate()) FOR [CreatedDate] GO ALTER TABLE [dbo].[LanguageType] CONSTRAINT EKLE [ DF_LanguageType_IsDeleted]   DEFAULT (( 0 )) FOR [IsDeleted] GO


   
LanguageType’tan * seçeneğini seçin

Posta Şablonu:

  • MailText: Dize şablonu
  • ParentID: Bu ID’yi güncel TurkishContext ID’ye koyacağız. Türkçe Bağlam bizim ParentID’mizdir. Ve tercüme edilen diğer tüm diller bir çocuktur.
CREATE  TABLE [dbo].[MailTemplate]( 
[ID] [ int ] KİMLİK ( 1 , 1 ) NOT  NULL , 
[MailText] [nvarchar]( 500 ) NULL , 
[ParentID] [ int ] NOT  NULL , 
[LanguageID] [ int ] NULL , 
[CreatedDate] [datetime] NULL , 
[IsDeleted] [bit] NULL , 
 CONSTRAINT [PK_MailPhishingTemplate] BİRİNCİL ANAHTAR KÜMELENMİŞ 
( 
[ID] ASC
 ) İLE (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =  ON , ALLOW_PAGE_LOCKS =  ON ) ON [ PRIMARY ] 
) ON [ PRIMARY ] 
GO 

ALTER  TABLE [dbo].[MailTemplate] ADD   CONSTRAINT [DF_MailTemplate_CreatedDate]   DEFAULT (getdate()) FOR [CreatedDate] 
GO 

ALTER  TABLE [dbo].[MailTemplate] ADD   CONSTRAINT [DF_MailTemplate_IsDeleted]   VARSAYILAN (( 0 )) İÇİN [IsDeleted] DEĞİŞTİRME TABLOSUNA
 GİT [dbo].[MailTemplate]   KONTROL İLE KISITLAMA EKLE [FK_MailTemplate_LanguageType] YABANCI ANAHTAR([LanguageID]) REFERANSLAR [dbo].[LanguageType] ([ID]) ALTER TABLE'a gidin [dbo].[MailTemplate] KISITLAMAYI KONTROL EDİN [FK_MailTemplate_LanguageType] GO

     



  

3-) Türkçe Bağlamlı Abone Konsolu Uygulaması :

.Net 7.0 Konsol Uygulaması “ChatGPTInputText”i oluşturacağız ve aşağıda görüldüğü gibi DALChatGPT Projesini çözüme ekleyeceğiz. Bu uygulama için DB First yaklaşımını kullanacağız.

Aşağıdaki kütüphaneleri Nuget Manager’dan DALChatGPT Projesine ekleyin.

Aşağıda görüldüğü gibi “ ChatGPT ” Database’inden DALChatGPT projesi kapsamında ChatDBContext’i oluşturacağız . “DalChatGPT” klasörü altında “scaffold” komutunu çalıştıracağız.

dotnet ef dbcontext scaffold "Sunucu=.;Veritabanı=ChatGPT;Trusted_Connection=True; 
Encrypt =False" Microsoft.EntityFrameworkCore.SqlServer -o Entities 
--context-dir "Entities\DbContexts" --no-pluralize -c ChatGPTContext
Bu Son Çözüm Resmi

ChatGPTInputText/Program.cs :

  • Öncelikle DB işlemleri için Proje Referansı olarak DALChatGPT’yi ekleyin.
  • RabbitMQ Kanalına EmialTemplate eklemek için Nuget’ten RabbitMQ.Client’i ekleyin.
  • Dahili RabbitMQ kullanıyorsanız yerel makinenizde RabbitMQ hizmetini başlatmayı unutmayın.
  • Konsoldan dize E-posta Şablonu alın
Console.Write( "Çeviri E-posta Şablonunu Yaz: " ); 
var textTRTemplate = Console.ReadLine();
  • Bu bölüm E-posta Şablonunu DB’ye kaydetmek için kullanılır. Öncelikle SqlDB bağlantısı ile “ <ChatGBTContext> ” ekleyerek servise hazırlayacağız . Daha sonra “ ChatGPTContext ” i almak için “BuilderServiceProvider”ı kullanacağız.
deneyin
 { 
    //DB 
    var hizmetlerini kaydet = new ServiceCollection(); 
    services.AddDbContext<ChatGPTContext>(options => options.UseSqlServer( "Server=.;Database=ChatGPT;Trusted_Connection=True;TrustServerCertificate=True;" )); 

    var serviceProvider = services.BuildServiceProvider(); 
    ChatGPTContext _chatGPTContext = serviceProvider.GetService<ChatGPTContext>();
  • MailTemplate Entity’ye veri olarak hazırlanacağız. “ParentId” sıfır çünkü bu bir çocuk değil bu bir ebeveyn Türkçe Posta Şablonu. “LanguageID” bir numaralandırmadır. Varsayılan Türkçe Dilini ayarladık.
  • MailTemplate “data”sını “_chatGPTContext.MailTemplate” içeriğine ekleyeceğiz. Ve verileri SQL sunucusuna kaydetmek için SaveChanges()’ı eşzamansız olarak çağıracağız.
  var data = new DALChatGPT.Entities.MailTemplate() 
    { 
        MailText = textTRTemplate, 
        IsDeleted = false , 
        CreatedDate = DateTime.Now, 
        ParentId = 0 , 
        LanguageId = ( int )LanguageType.Türkçe 
    }; 
    var sonuç = bekliyor _chatGPTContext.MailTemplate.AddAsync(data); 
    wait _chatGPTContext.SaveChangesAsync(); 
    Console.WriteLine( $"Posta Şablonu Başarıyla Kaydedildi Kimlik: {data.Id} " ); 
    //---------------------------

Enum.cs/LanguageType:

  public  enum LanguageType 
    { 
        Türkçe= 1 , 
        İngilizce= 2 , 
        Almanca= 3 , 
        Fransızca= 4
     }
  • Artık kaydedilen MailTemplate’i RabbitMQ kanalında yayınlamanın zamanı geldi. Öncelikle RabbitMQ bağlantı stringi ile ConnectionFactory’yi oluşturacağız. Daha sonra anahtar kelimeyi Kapsamlı olarak “kullanarak” bir bağlantı ve kanal oluşturacağız.
//RabbitMQ Ekle 
    var fabrika = new ConnectionFactory() { HostName = "localhost" }; 
    kullanarak ( var bağlantı = fabrika.CreateConnection()) 
    kullanarak ( var kanal = bağlantı.CreateModel()) 
    {
  • Yerel RabbitMQ’da bir EmailTemplate kanalı oluşturacağız.
  1. “sıra” : Kanal Adı
  2. “ dayanıklı” : Verinin hafızada mı yoksa fiziksel olarak mı saklanacağı belirlenir.
  3. “exclusive”: “exclusive” parametresi ile diğer bağlantılarla kullanılmasına izin verilir.
  4. “autoDelete”: Kuyruk silinmiş olarak işaretlenmiş ve tüm tüketicilerin kullanımı bitmişse, son tüketici iptal edilmişse veya kanal kapatılmışsa silme işlemi yapılamaz. Bu gibi durumlarda normalde “autoDelete” ve delete yöntemi çalıştırılır. Böylece ilgili kuyruklar silinir.
  5. “argümanlar”: Bu anahtar kelimeler , belirtilen borsalarla ilgili tanımlanacak parametrelerdir. Bu uygulamada Exchange tanımlanmamıştır.
  • EmailTemplate varlığını “ System.Text.Json ” kullanarak serileştirip byte[] dizisine dönüştürüp body parametresine ayarlayacağız.
channel.QueueDeclare(queue: "EmailTemplate" , 
                                 dayanıklı: false , 
                                 özel: false , 
                                 autoDelete: false , 
                                 argümanlar: null ); 
        var şablonVeri = JsonSerializer.Serialize(data); 
        var body = Encoding.UTF8.GetBytes(templateData);
  • “TemplateData”yı “EmailTemplate” kanalında yayınlayacağız.
        channel.BasicPublish(exchange: "" , 
                                routingKey: "EmailTemplate" , 
                                basicProperties: null , 
                                body: body); 

        Console.WriteLine( $"Mail Şablonu RabbitMQ EmailTemplate Kanalına Ekleyin" ); 
    } 
    //----------------
 } 
catch (Exception ex) 
{ 
    Console.Write( $"Hata Mesajı: {ex.Message } " ); 
}

Program.cs : Abone (Tam Kodlar):

ChatGPTInputText'i kullanma ; DALChatGPT.Entities.DbContexts'i 
kullanma ; Microsoft.EntityFrameworkCore'u 
kullanarak ; Microsoft.Extensions.DependencyInjection'ı 
kullanma ; RabbitMQ.Client 
kullanarak ; 
System.Text'i kullanarak ; 
System.Text.Json'u kullanarak ; 

Console.Write( "Çeviri E-posta Şablonunu Yaz: " ); 
var textTRTemplate = Console.ReadLine(); 

deneyin
 { 
    //DB 
    var hizmetlerini kaydet = new ServiceCollection(); 
    services.AddDbContext<ChatGPTContext>(options => options.UseSqlServer( "Server=.;Database=Test;Trusted_Connection=True;TrustServerCertificate=True;" )); 

    var serviceProvider = services.BuildServiceProvider(); 
    ChatGPTContext _chatGPTContext = serviceProvider.GetService<ChatGPTContext>(); 

    var data = new DALChatGPT.Entities.MailTemplate() 
    { 
        MailText = textTRTemplate, 
        IsDeleted = false , 
        CreatedDate = DateTime.Now, 
        ParentId = 0 , 
        LanguageId = ( int )LanguageType.Türkçe 
    }; 
    var sonuç = bekliyor _chatGPTContext.MailTemplate.AddAsync(data); 
    wait _chatGPTContext.SaveChangesAsync(); 
    Console.WriteLine( $"Posta Şablonu Başarıyla Kaydedildi Kimlik: {data.Id} " ); 
    //---------------------------- 

    //RabbitMQ Ekle 
    var fabrika = new ConnectionFactory() { HostName = "localhost" }; 
    kullanma ( var bağlantı = fabrika.CreateConnection()) 
    kullanma ( var kanal = bağlantı.CreateModel()) 
    { 
        kanal.QueueDeclare(queue: "EmailTemplate" , 
                                 dayanıklı: yanlış , 
                                 özel: yanlış , 
                                 autoDelete: false , 
                                 argümanlar: null ); 
        var şablonVeri = JsonSerializer.Serialize(data); 
        var body = Encoding.UTF8.GetBytes(templateData); 

        channel.BasicPublish(exchange: "" , 
                                routingKey:"EmailTemplate" , 
                                basicProperties: null , 
                                body: body); 

        Console.WriteLine( $"Mail Şablonu RabbitMQ EmailTemplate Kanalına Ekleyin" ); 
    } 
    //----------------
 } 
catch (Exception ex) 
{ 
    Console.Write( $"Hata Mesajı: {ex.Message } " ); 
}

Yapay zeka insanlık olarak üzerinde çalıştığımız en derin konulardan biri. Ateşten ya da elektrikten daha derindir.” — Sundar Pichai (CEO, Google)

Tüketici ve ChatGPT Konsol Uygulamasını Çevirin:

EmailTemplate verilerini kuyruktan almak için yeni bir ConsoleApplication oluşturacağız ve bunu ChatGPT ile çoklu dile[En, Ge, Fr] çevireceğiz.

Öncelikle aşağıdaki iki kütüphaneyi ekleyeceğiz. OpenAI kütüphanesini aşağıdaki NuGet koduyla ekleyebilirsiniz. [ Resmi olmayan ] Betalgo.OpenAI.Gpt3. Daha fazla bilgiyi burada bulabilirsiniz Bu kütüphaneyi E-posta Şablonlarını diğer dillere çevirmek için kullanacağız. “ Gpt3 kütüphanesini kullanabilmek için .Net 6.0 veya üzeri .Net frameworklerini kullanmanız gerekmektedir ” Son olarak  RabbitMQ.Client” kütüphanesi diğer konsol uygulaması ile aynıdır. Bu kütüphane ile RabbitMQ tüketicisini yazacağız.

Betalgo.OpenAI.GPT3 Kurulum Paketi

Veritabanı Bağlamı: Bu bağlamı tüm DB işlemleri için kullanacağız.

  • DALChatConsumer sınıf kitaplığını DBContext çözümüne ekleyin.
  • Diğer Konsol Uygulamaları gibi aşağıdaki kitaplıkların aynısını yükleyin.
  • Aşağıda görüldüğü gibi “ ChatGPT ” Veritabanından DALChatConsumer projesi altında ChatDBContext’i oluşturacağız . Daha önce olduğu gibi “DalChatConsumer” klasörü altında “scaffold” komutunu çalıştıracağız.
dotnet ef dbcontext scaffold "Sunucu=.;Veritabanı=ChatGPT;Trusted_Connection=True; 
Encrypt =False" Microsoft.EntityFrameworkCore.SqlServer -o Entities 
--context-dir "Entities\DbContexts" --no-pluralize -c ChatGPTContext
Çözümün Bu Nihai Sonucu
  1. Öncelikle “ Eposta Şablonu ” kanalını dinlemek için RabbitMQ Consumer oluşturacağız .
 statik  eşzamansız Görev Ana ( string [] args )
         {
             var fabrika = new ConnectionFactory() { Ana BilgisayarAdı = "localhost" }; 
            kullanma ( var bağlantı = fabrika.CreateConnection())
             kullanma ( var kanal = bağlantı.CreateModel())
            {
                kanal.QueueDeclare(queue: "EmailTemplate" ,
                                     dayanıklı: yanlış ,
                                     özel: yanlış ,
                                     autoDelete: false ,
                                     argümanlar: null ); 

                var tüketici = new EventingBasicConsumer(kanal);

2. RabbitMQ kanalından bir “ Eposta Şablonu ” aldığımızda , verileri “MailTemplate”e seri durumdan çıkaracağız. Daha sonra OpenAIService’i kendi “API Key”iniz ile kullanarak “ gpt3 ” oluşturacağız . Ve son olarak, Şablona çeviri için tüm LanguageType numaralandırmalarında döngü oluşturacağız.

Not: “Varsayılan Türkçe dilini ortadan kaldırmayı unutmayın. Çünkü kök dildir. Ve bunu zaten DB’ye kaydettik”

tüketici.Received += (model, ea) => 
                { 
                    var body = ea.Body.ToArray(); 
                    var veri = Encoding.UTF8.GetString(body); 
                    MailTemplate mailTemplate = JsonSerializer.Deserialize<MailTemplate>(data); 
                    Console.WriteLine( " [x] Alınan Posta Şablonu Kimliği: {0}" , mailTemplate.Id); 

                    //ChatGPT 
                    var gpt3 = new OpenAIService( new OpenAiOptions() 
                    { 
                        ApiKey = "***OpenAI Api Anahtarınız***"
                     }); 
                    foreach (LanguageType lang in Enum.GetValues( typeof (LanguageType))) 
                    { 
                       if (lang == LanguageType.Türkçe) devam ; //Türkçeyi eleyin
Tüketici ve Abone

3. Şimdi kodu her dil için tekrarlamamak için TranslateTextByLanguage() yöntemini oluşturmamız gerekiyor. Ve bunu her LanguageType numaralandırması için arayacağız.

  • “ ComletionCreateRequest ” gpt3 kütüphanesi için çok önemli bir sınıftır. Bu sınıftaki tüm gpt3 ptoperties ayarlayacağız.
  • “ İstemi: ” Bu, gpt3’e soracağımız sorudur. MailText’i dil parametresi ile çevireceğiz.
  • “ Model ”: GBT3 öğrenme modelini seçmeliyiz. OpenAI kütüphanesinde pek çok öğrenme modeli var. Ama en pahalısı “ TextDavinciV3 ”. Ve aynı zamanda en başarılı olanıdır. Bu, bizim için metin üretebilen, önceden eğitilmiş bir modeldir.
  • “ Sıcaklık ”: OpenAI ChatGPT ve GPT-3 modellerinin rastgeleliğini ve dolayısıyla yanıtların yaratıcılığını yöneten bir parametresidir. Her zaman 0 ile 1 arasında bir sayıdır.
  • “ MaxTokens ”: Maksimum kelime sayısı. Jetonlar kelime parçaları olarak düşünülebilir. API, istemleri işlemeden önce girdi, belirteçlere bölünür. Bu belirteçler tam olarak kelimelerin başladığı veya bittiği yerden kesilmez; belirteçler sondaki boşlukları ve hatta alt kelimeleri içerebilir.
  • “ TopP ”: “Top p” parametresi, dil modelinin bir sonraki kelimeyi tahmin etmeye çalışırken kaç farklı kelime veya kelime öbeğini dikkate aldığını kontrol eden bir filtre gibidir. “Top p” değerini 0,5 olarak ayarlarsanız, dil modeli yalnızca bundan sonra gelebilecek en olası 50 kelimeyi veya kelime öbeğini dikkate alacaktır. Ancak “top p” değerini 0,9 olarak ayarlarsanız dil modeli en olası 90 kelimeyi veya kelime öbeğini dikkate alacaktır.
  • “ Frekans Cezası ”: Frekans cezası, bir kelimenin daha önce ne kadar çok kullanılmışsa tekrar seçilme şansını azaltarak çalışır. Varlık cezası, bir kelimenin ne sıklıkla kullanıldığını değil, sadece kelimenin metinde bulunup bulunmadığını dikkate alır.
  • “ PresencePenalty ”: OpenAI Presence Penalty ayarı, kaynak malzemedeki tokenların varlığının modelin çıktısını ne kadar etkileyeceğini ayarlamak için kullanılır.
public  static  void  TranslateTextByLanguage ( OpenAIService gpt3, string mailText, LanguageType languageType, int parentID )
         {
             //İngilizce | Almanca | Fransızca 
            varcompleteResult = gpt3.Completions.CreateCompletion( new CompletionCreateRequest()
            {
                Prompt = $"Bunu {languageType} diline çevirebilir misiniz ? ' {mailText} '" ,
                Model = Models.TextDavinciV3,
                Temperature = 0.7F ,
                MaxTokens = 512 ,
                TopP = 1 ,
                Frekans Cezası = 0 ,
                Varlık Cezası = 0
             });
SqlDB MailTemplate Tablosu

4. “ if (completionResult.Result.Successful) ” : OpenAI’den başarılı bir sonuç alırsak sonuçtan ilk tercihi alıp DB’yi LanguageID ve ParentID ile kaydedeceğiz. Eğer hata alırsak bir istisna atıp log yazacağız.

 if (completionResult.Result.Successful) 
            { 
                var resultText =completeResult.Result.Choices.FirstOrDefault().Text.Trim(); 

                //DB Operaitons 
                var services = new ServiceCollection(); 
                services.AddDbContext<ChatGPTContext>(options => options.UseSqlServer( "Server=.;Database=ChatGPT;Trusted_Connection=True;TrustServerCertificate=True;" )); 

                var serviceProvider = services.BuildServiceProvider(); 
                ChatGPTContext _chatGPTContext = serviceProvider.GetService<ChatGPTContext>(); 

                var data = new DALChatConsumer.Entities.MailTemplate() 
                { 
                    MailText = resultText, 
                    IsDeleted = false , 
                    CreatedDate = DateTime.Now, 
                    ParentId = parentID, 
                    LanguageId = ( int )languageType 
                }; 
                var sonuç = _chatGPTContext.MailTemplate.Add(data); 
                _chatGPTContext.SaveChanges(); 
                Console.WriteLine( $"Posta Şablonu Başarıyla Kaydedildi.. Language {languageType} , ID: {data.Id} " ); 
                //------------------
             } 
            else
             { 
                if (completionResult.Result.Error == null ) 
                { 
                    throw  new Exception( "Bilinmeyen Hata" ); 
                } 
                Console.WriteLine( $" {completionResult.Result.Error.Code} : {completionResult.Result.Error.Message} " ); 
            } 
        }

“ChatGPT korkutucu derecede iyi. Tehlikeli derecede güçlü yapay zekadan çok uzakta değiliz.” —Elon Musk

Tam Demo Çeviri ChatGPT Mikro Hizmeti

Program.cs: Tüketici(Tam Kodlar):

OpenAI.GPT3.Manager'ları kullanma ; 
OpenAI.GPT3'ü kullanarak ; Sistemi 
kullanarak ; OpenAI.GPT3.ObjectModels.RequestModels'i 
kullanma ; OpenAI.GPT3.ObjectModels'ı 
kullanma ; System.Threading.Tasks'ı 
kullanma ; RabbitMQ.Client 
kullanarak ; RabbitMQ.Client.Events'i 
kullanarak ; 
System.Text'i kullanarak ; 
System.Text.Json'u kullanarak ; DALChatConsumer.Entities 
kullanarak ; 
System.Linq'i kullanarak ; DALChatConsumer.Entities.DbContexts'i 
kullanarak ; Microsoft.Extensions.DependencyInjection'ı 
kullanma ; Microsoft.EntityFrameworkCore'u 
kullanarak ; 

namespace  ChatGPT
 { 
    dahili  sınıf  Program
     { 
        statik  async Görev Ana ( string [] args )
         { 
            var fabrika = new ConnectionFactory() { Ana BilgisayarAdı = "localhost" }; 
            kullanma ( var bağlantı = fabrika.CreateConnection()) 
            kullanma ( var kanal = bağlantı.CreateModel()) 
            { 
                kanal.QueueDeclare(queue: "EmailTemplate" , 
                                     dayanıklı: yanlış , 
                                     özel: yanlış , 
                                     autoDelete: false , 
                                     argümanlar: null ); 

                var tüketici = new EventingBasicConsumer(kanal); 
                tüketici.Received += (model, ea) => 
                { 
                    var body = ea.Body.ToArray(); 
                    var veri = Encoding.UTF8.GetString(body); 
                    MailTemplate mailTemplate = JsonSerializer.Deserialize<MailTemplate>(data); 
                    Console.WriteLine( " [x] Alınan Posta Şablonu Kimliği: {0}" , mailTemplate.Id); 

                    //ChatGPT 
                    var gpt3 = new OpenAIService( new OpenAiOptions() 
                    { 
                        ApiKey = "***OpenAI Api Anahtarınız***"
                     }); 
                    foreach (LanguageType lang in Enum.GetValues( typeof (LanguageType))) 
                    {
                        if (lang == LanguageType.Türkçe) devam et ; //Türkçe
                         TranslateTextByLanguage'ı ortadan kaldırın(gpt3, mailTemplate.MailText, lang, mailTemplate.Id); 
                    } 
                }; 
                channel.BasicConsume(queue: "EmailTemplate" , 
                                    autoAck: true , 
                                    tüketici: tüketici); 
                Console.WriteLine( "Posta Şablonu Sırası Dinleniyor..." ); 
                Console.WriteLine( "Çıkmak için [enter] tuşuna basın." ); 
                Console.ReadLine(); 
            }            
        } 

        public  static  void  TranslateTextByLanguage ( OpenAIService gpt3, string mailText, LanguageType languageType, int parentID )
         { 
            //İngilizce | Almanca | Fransızca 
            varcompleteResult = gpt3.Completions.CreateCompletion( new CompletionCreateRequest() 
            { 
                Prompt = $"Bunu {languageType} diline çevirebilir misiniz ? ' {mailText} '" , 
                Model = Models.TextDavinciV3, 
                Temperature = 0.7F , 
                MaxTokens = 512 , 
                TopP = 1 , 
                Frekans Cezası = 0 , 
                Varlık Cezası = 0
             }); 

            if (completionResult.Result.Successful) 
            { 
                var resultText =completeResult.Result.Choices.FirstOrDefault().Text.Trim(); 

                //DB Operaitons 
                var services = new ServiceCollection(); 
                services.AddDbContext<ChatGPTContext>(options => options.UseSqlServer( "Server=.;Database=ChatGPT;Trusted_Connection=True;TrustServerCertificate=True;" )); 

                var serviceProvider = services.BuildServiceProvider(); 
                ChatGPTContext _chatGPTContext = serviceProvider.GetService<ChatGPTContext>(); 

                var data = new DALChatConsumer.Entities.MailTemplate() 
                { 
                    MailText = resultText, 
                    IsDeleted = false ,
                    CreatedDate = DateTime.Now, 
                    ParentId = parentID, 
                    LanguageId = ( int )languageType 
                }; 
                var sonuç = _chatGPTContext.MailTemplate.Add(data); 
                _chatGPTContext.SaveChanges(); 
                Console.WriteLine( $"Posta Şablonu Başarıyla Kaydedildi.. Language {languageType} , ID: {data.Id} " ); 
                //------------------
             } 
            else
             { 
                if (completionResult.Result.Error == null ) 
                { 
                    throw  new Exception( "Bilinmeyen Hata" ); 
                } 
                Console.WriteLine( $" {completionResult.Result.Error.Code} : {completionResult.Result.Error.Message} " ); 
            } 
        } } 
    }

Çözüm:

Bu yazımızda bazı Türkçe metinleri ChatGPT ile diğer dillere çevirmeye çalıştık. Event Sourcing Mikro Hizmetleri için “Message Broker” (RabbitMQ) kullandık. Basit abone ve tüketici hizmetleri yazdık. Tüm DB Operasyonları için Entity’yi kullandık. Bir Enum Listesinde döngü yaptık ve Türkçe metni dinamik olarak enum listesindeki diğer dillere çevirdik. Çeviri için yeni bir dil eklemek istiyorsanız tek yapmanız gereken ilgili dili Enum’a yeni bir öğe olarak eklemek ve LanguageType tablosuna bir kayıt daha eklemek. Bu kadar..

İlk olarak resmi OpenAI Api’yi kullanmak için Python ile ChatGPT mikro servisini yazdım ama sonuçta “ Betalgo.OpenAI.GPT3 ” ü buldum . Bu muhteşem .Net kütüphanesi için “ Tolga Kayhan ” a teşekkürler .

OpenAI’nin biz geliştiricilerin bugünlerde kullanabileceği en başarılı araçlardan biri olduğunu düşünüyorum. Pek çok farklı yeteneğe sahip olan bu alet, benim gibi eski çağlardan beri her şeyi gördüğüne inanan bir dinozoru bile hayrete düşürdü 🙂

Son

Hiçbir şirket, yapay zekayı uygulamadan veya en azından yapay zekayı ve topladıkları verileri daha iyi kavramak için nasıl kullanılabileceğini anlamadan gelecekte hayatta kalamayacak.” — David Gasparyan (Phonexa Başkanı)

Bir sonraki yazıya kadar görüşmek üzere.

“Buraya kadar okuduysanız öncelikle sabrınız ve desteğiniz için teşekkür ederim. Daha fazlası için hepinizi bloguma davet ediyorum ! ”

Kaynak:

Leave a Reply

Your email address will not be published. Required fields are marked *