Akıllı ChatBot Uygulamaları Geliştirme 1: Bot Framework

Son zamanların en sıcak konularından ChatBot’lar hayatımızın bir parçası olmaya başladı.

Burada aklımıza gelen en önemli sorular, bir bot yapay zekâ ile birlikte ne kadar zeki olabilir? Botlar Türkçe konuşmaları anlayabilirler mi? Botların desteklediği kanallar ve yöntemler akıllara gelen ilk konular.

Bu soruları giderebilmek için bu yazı dizisiyle beraber sizlere basit örnek üzerinden Bot Framework yapısını, LUIS.AI ile bir cümle içerisinde söylenilmek istenilen aksiyonun anlaşılması ve de Türkçe dil anlamanın sağlanması konularını ele alacağız.

Bu ilk yazıda BotFramework yapısını anlayabilmek için Şehir-Plaka Kodu Arama örneği olan https://github.com/ikivanc/TRPlateBot kod örneğimi inceleyebilirsiniz.

Microsoft Bot Framework, Chat Bot (Dijital Asistan) uygulamaları geliştirmek için sunulan ve sizlerin pek çok kanala aynı anda tek bir kod yapısı ile bot uygulaması geliştirmenizi sağlayan bir framework’tür.

Bu uygulamada basit olarak Bot uygulamasının temelini anlamak için plaka kodundan, şehir ismini bulabileceğiniz bu örnek üzerinden inceleyeceğiz.

Burada cümle değil komut bazlı çalışacağı için, klasik console uygulamalarından çok da bir farklı olmayan şekilde çalışacaktır.

Kod’u inceleme

MessagesController.cs içerisinde Post methodu’nun altındaki kod yapımız aşağıdaki gibi olacaktır.

//Bu kod parçası sadece komut-cevap olarak çalışır
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
City cm = new City();

//Girilen içerik sadece sayı ise Plaka kodu olduğunu anlayarak, şehir adını arıyor.
if (activity.Text.All(char.IsDigit))
{
string cityName = cm.getCityNamebyPlateNumber(Convert.ToInt32(activity.Text));

string message = $”Sorguladığınız {activity.Text} plaka kodu {cityName} iline aittir.”;
if (cityName == null) message = $”Sorguladığınız {activity.Text} sorgu kayıtlarımızda bulunamadı”;
Activity reply = activity.CreateReply(message);
await connector.Conversations.ReplyToActivityAsync(reply);
}
else
{
//Girilen içerik sadece yazı ise Şehir adı olduğunu varsayarak, plaka kodunu arıyor.
int pNumber = cm.getPlateNumberbyCity(activity.Text);

string message = $”Sorguladığınız {activity.Text}  ilinin plaka kodu: {pNumber}”;
if (pNumber == 0) message = $”Sorguladığınız {activity.Text} sorgu kayıtlarımızda  bulunamadı”;
Activity reply = activity.CreateReply(message);
await connector.Conversations.ReplyToActivityAsync(reply);
}
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;

Kod’un emülatör üzerinde çalışması

Bu uygulamadan da görüleceği gibi ChatBot uygulamalarını if-else kalıpları içerisinde parse ederek soru cevap şeklinde botlar geliştirebiliriz, ama bu botları geliştirmek klasik konsol uygulamasını geliştirip bunlarla iletişim kurmaktan farksız olacaktır. Bu yüzden sonraki yazılarda bu botlara zeki özelliklerin nasıl katılacağını görebiliriz.