Kategori: Uncategorized

Yeni Bir Dönem Giriyoruz, Otomatize Edilmesi Olası Botlar Oluşturmak İçin İnsan Bazlı Botlar Kullanma Dönemi

E Ticaret Sitelerinin bir tanesinin laptop sayfalrında gezerken, aniden sağ altta artık klasikleşmiş hale gelen destek chat paneli ile karşılaştım. Orada Canlı olarak isteklerinize göre yanıt veren bir marka uzmanı bulunmakta idi. Ona istediğim özellikle ve kullanım alanlarını söylüyordum o da yanıtlar veriyordu. Hatta oldukça robotik ve yeterli veri toplandığında otomatize edilebilir gibi görünüyordu. Konuşurken acaba bir conversational botla mı konuşuyorum diye de düşündüm.

E Ticaret siteleri eğer 6 ay insan çalıştırma maaliyetine katlanır ve yeterli veriyi toplayabilirler ise gerçekten her konuda ellerinde yüzlerce satış danışması olacak. Burada E-Ticaret özelinde conversational olarak müşterisinde en kaliteli ve fazla veri çeken E-Ticaret öne geçecek gibi gözükmektedir.

Kısacası Bilgisayarlar ile olan iletişimimiz GUI devriminden sonra bir daha değişmekte ve daha insancıl hale bürünmeye başlayacka. Bu duruma en hızlı adapte olan şirketler de rekabet avantajına sahip olacaklar. Bakalım. Toplayabildiğiniz kadar gerçek iletişim verisi toplayın ve kullanıcılarınızı bu konuda teşvik edin, benim önerim budur.

OpenAI Dil Modelinin Yapabildikleri ve Yapamadıkları

Evet ChatGPT ile birlikte hemen hemen herkesin hayatına giren inanılmaz güçlü ve neredeyse her konuda yanıt verebilen modeller gerçekten iş hayatımıza yeni bir boyut kattı. Bakalım biz Chat-GPT ile neler yapabiliriz ve neler yapamayız?

Öncelikle Cron gibi Expression gibi mümkün olduğunca dili basit ve doğal dilde söylemesi zorlaşabilecek bir yapıyı kurmayı denedim.

const response = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: "Write Cron Expression:  every 30 minute",
  max_tokens: 10,
  temperature: 0.2,
});

şeklinde işlem yaptığımızda karşımıza beklediğimiz:

text: ‘\n\n0 0/30 * * * *’ doğru sonuç ile karşılaşmaktayız.

Peki evet doğru gözüküyor ancak daha önce Cron kullanmamış biri bunu nasıl doğrulayabilir. Şöyle yani üretilen metnin doğruluğunu nasıl test edebiliriz. Bu doğrulama Generated Textlerin hepsinde olacak ve önemli gözükmektedir.

Bunun için Dotnet ortamında Brady Holdt tarafında yazılmış CronDescriptor Librarysini kullanabiliriz. Örnek olarak:

var optionForCronText = new Options();
optionForCronText.Locale = "en";

var description = CronExpressionDescriptor.ExpressionDescriptor.GetDescription("0 0/30 * * * *",optionForCronText);
Console.WriteLine($"{description}"); //Every 30 minutes

Evet Deneysel olarak tek tek test ederek sonuca ulaşabiliriz. Yalnız şunu da söylemek lazım, klasik normal caseleri test et, edge caseleri test, bir kaç random test et yapısı burada çalışmayacaktır .Üretilen her Cron Expression:’ı ayrı ayrı doğrulamak gereklidir. Şöyleki 100 tane doğru Doğal dilden Cron’a çevirme yapsada 101.’yi doğru yapacağını asla garanti edemeyiz. Üstelik Api’den değil Chat Gpt’den üretir isek içindeki Randomness’ı da kontrol edemediğimiz için çeşitli yanlışlıklara yol açabilir.

Evet 10 tane daha Expression ürettikten sonra bayağı iyi çalışıyor diyebiliyorum.

Peki daha zor, İçinde Geometri olan bir problem olan Point in Polygon problemi ve bu problemi Dünya haritası üzerinde yapmasını istiyorum. Şöyleki dünya üzerinde noktalar vereceğim ve bana nasıl sonuçlar vereceğine bakacağım.

async function useAsHardMapTask(latitude,longtitude){
  const response1 = await openai.createCompletion({
    model: "text-davinci-003",
    prompt: latitude+","+longtitude+" latitude, Longtitude in Which city.",
    max_tokens: 20,
    temperature: 0.2,
  });
  return response1;
  }

İlk Olarak Isparta’dan bir nokta veriyorum: 38.07982787709612, 31.371001078866897

Yanıt maalesef hayal kırıklığı: Noktanın İzmir’de olduğunu söylüyor.:

‘\n\nThis location is in the city of Izmir, Turkey.’

Ardından Edirne Üzerinde bir nokta verdiğmizde:

41.67440351039774, 26.547041433535238

‘\n\nThis location is in the city of Alexandroupoli, Greece.’,

yanıtı ile karşılaşmaktayız.

Sonuç olarak GPT-3 gerçekten inanılmaz bir dil modeli ancak halen daha bir dil modeli. Sınırları bilmek ve iş yaşamında kullanırken mkutlaka doğrulayarak kullanmak gereklidir. Hatta şöyle söyleyeyim direkt son kullanıcya input verecek bir sistemde bile bu modeli kontrol etmeden kullanmayı tercih etmem.

Ve evet insan gibi düşünmüyor. Halen daha elindeki text’e yanıt üreten bir dil modeli. Yaptığı şey hala bir anlama ve dolayısı ile anlamlandırma işlevi değil. Halen dah bir şey anladığı yok, sadece cevap veriyor ve artık o kadar iyi cevap veriyor ki işimizde yarıyor 🙂

Son olarak Dil modelinden üretilen yapıyı işinide kullanmak istiyorsanız mutlaka ama MUTLAKA doğrulayarak kullanmalsınız 🙂

Vue-Query ile Api Callermızda Fault-Tolerancy’yi ve Kontrol Edileblirliği Arttırmak

Marina Mosti’nin şu yazısını okurken:

https://www.vuemastery.com/blog/advanced-data-fetching-in-vue-w-tanstack-query

benim de böyle sorunlar ile karşılaştığımı ve değişik çözümler ürettiğimi anladım.

Kütüphane ile Vue.js Appimizin başarısız olması karşısında yeniden denemesi, veri eskidiğinde yenilenmesi gibi işlemleri çok kolaybir şekilde yapabilir hale geliyoruz.

Örnek olarak klasik Todo Örnepini kullanacak olursak:

import { useQuery } from "vue-query";
import axios from "axios";



export default () => {
  return useQuery({
    queryKey: ["todoID"],
    cacheTime:1000*6,
    queryFn: () =>{ 
      const random=Math.random()*10
      return axios.get("https://jsonplaceholder.typicode.com/todos/"+parseInt(random))
      }
    ,
    select: (response) => response.data // extract data from axios response
  });
};

Yukarıdaki gibi bir query oluşturabiliriz. Cache Time’ı istediğimiz gibi belirleyebildiğimiz için kullanması da oldukça kolay olmakta. Aynı şekilde retry miktarını ve retry delayini de istedğimiz gibi değiştirebilmekteyiz. Çok önemli ve mutlaka çalışması gereken querylerde retry miktarını 10,15’e kadar çıkararak belki de müşterinin bir çalışmıyor demesini bertaraf bile edebiliriz.

Şurada da default valueler güzel bir şekilde tanımlanmış:

https://vue-query.vercel.app/#/guides/important-defaults

Vue Componentimizde kullanmak için ise:

<template>
  <div class="main" v-if="!isLoading"> 
      <h1>{{data}}</h1>
  </div>
  <div v-else class="loading">
      <div>Yükleniyor... </div>
       </div>  
</template>
<script setup>
import faketodosComposable from "../composables/faketodosComposable";
const { isLoading, isError, data, error }=faketodosComposable()
</script>

Composition Api ile birlikte çalışmakta ve gerçekten iyi sonuç vermektedir. Pinia Storeunda vb kullanmak istediğimde sadece Setup’ta kullanılır diye bir hata aldım. Belirtilen şekli ile kullanmak ise gerçekten başarılı ve bir çok işi bir anda yapması ile gönlümüzü kazanıyor.

Azure Functions Node.js üzerinde CosmosDb’ye Output Bindingine Veri yazmak.

Belirtilen şekilde çeşitli output bindinglerimize veri sağlayabilmekteyiz. Bunu için context.bindings.output ile yapabilmekteyiz:

context.bindings.outputDocument={col1:col1,col2:col2}

Ardından cosmosDb bağlantımızı yapıyoruz ve verileri yazmaya başlıyoruz:

Aşağıdaki yapıda hem kullanıcıya istediği cevabı veren hem de cosmos db ile verinin sürekliliği sağlayan bir fonksiyon oluşturabilmekteyiz: