TypeChat: Sohbet tabanlı yapay zeka platformu
(microsoft.github.io)- Mevcut uygulamalara doğal dil girdisi eklerken en büyük zorluk, kullanıcı niyetini yazılımın güvenebileceği bir yapıya dönüştürmektir; TypeChat bu noktayı TypeScript tipleriyle çözmeye çalışan bir kütüphanedir
- LLM’lerin serbest metin yanıtlarını ayrıştırmak istikrarsız olduğundan, TypeChat yanıtları JSON formatına yönlendirir ve şema doğrulaması ekleyerek uygulamanın işleyebileceği veriye dönüştürür
- TypeScript tipleri JSON yapısını ayrıntılı biçimde ifade edebilir ve LLM’lerin eğitim sürecinde çokça karşılaştığı bir format olduğu için yanıt şeması olarak kullanmaya uygundur
- Yanıt tipe uymuyorsa TypeScript derleyici hatası geri bildirim olarak yeniden verilip düzeltilmesi sağlanabilir; böylece sonradan işleme veya kullanıcı onayı öncesinde tip güvenliği artırılabilir
- TypeChat
npm install typechatile kurulabilir; MIT lisanslı açık kaynak olarak yayımlanmıştır ve OpenAI API ile Azure OpenAI Service entegrasyonu da sunar
Doğal dil isteklerini uygulamanın işleyebileceği veriye dönüştürme
- En yeni büyük dil modelleri sohbet asistanlarına kolayca bağlanabilse de, doğal dili mevcut uygulama arayüzlerine güvenilir biçimde entegre etmek ayrı bir meseledir
- TypeChat, kullanıcı isteklerini uygulamanın işleyebileceği bir biçime dönüştürmeye ve geliştiriciler ile kullanıcıların güvenebileceği işlemler yapılmasını sağlamaya odaklanır
- Yayımlanan kütüphane, kod tabanının tip tanımlarını kullanarak yapılandırılmış yapay zeka yanıtları elde eder ve tip güvenliğini hedefler
- Kurulum şu komutla yapılabilir
npm install typechat
Doğal dil ayrıştırma yerine JSON ve tip kullanımı
- LLM’ler temelde İngilizce gibi doğal dil konuşmalarına göre ayarlandığından, prompt’a “madde işaretli liste olarak yanıtla” gibi kurallar eklense bile genel yazılımların bunu güvenilir biçimde ayrıştırması zordur
- JSON ile yanıt vermesi istendiğinde, genellikle uygulamaların işlemesi kolay biçimde yanıt üretebilir
- Örnekte 1 adet “blueberry muffin” ve 1 adet “grande latte” isteği,
itemsdizisine sahip JSON’a dönüştürülür
- Örnekte 1 adet “blueberry muffin” ve 1 adet “grande latte” isteği,
- Basit örnekler yapıyı yönlendirmeye yardımcı olsa da, yapay zekanın ne döndürmesi gerektiğini yeterince tanımlamaz ve doğrulama ölçütü de sağlamaz
TypeScript tiplerini yanıt şeması olarak kullanma
- TypeChat, LLM’nin döndürmesi gereken JSON yapısını yönlendirmek için prompt’a TypeScript tiplerini dahil eder
- Örnek şemadaki
Responsetipiitems: Item[]içerir;Itemisename,quantity, isteğe bağlısizevenotesalanlarına sahiptir - TypeScript, JSON’u ayrıntılı biçimde açıklamak için uygundur; LLM’ler çok sayıda tip tanımıyla karşılaşmış olduğundan yanıt formatını yönlendirmede kullanışlıdır
- Yanıt tipe uymadığında, geçerli TypeScript kodu olan tip tanımları temel alınarak TypeScript derleyicisi tarafından doğrulanır
- Derleyici hata geri bildirimi, yanıtın düzeltilmesini yönlendirmek için kullanılır ve tipe uygun yanıt elde etme akışını daha sağlam hale getirir
TypeChat’in kullanım biçimi ve örnekler
- TypeChat, kullanıcı niyetini yapılandırılmış yanıta dönüştüren veri şeması yaklaşımında kullanılabilir
- Örnek kod, kullanıcı giriş cümlesinin duygusunu
negative,neutral,positiveseçeneklerinden biri olarak değerlendirenSentimentResponsearayüzünü tanımlar createLanguageModel(process.env)ile ortam değişkenleri tabanlı bir dil modeli oluşturur, şema dosyasını okur ve ardındancreateJsonTranslator<SentimentResponse>ile bir çevirici oluştururtranslator.translate(request)başarılı olursaresponse.data.sentimentçıktılanır; başarısız olursa hata mesajı çıktılanır- Veri şemasının yanı sıra, API şeması kullanılarak temel programlar da oluşturulabilir
- Kullanım biçimi docs ve examples sayfalarından görülebilir
Açık kaynak ve model bağımsızlığı
- TypeChat, MIT lisanslı açık kaynaktır ve GitHub üzerinde yayımlanmıştır
- Kolaylık için OpenAI API ve Azure OpenAI Service için varsayılan entegrasyonlar sağlar
- Tasarım hedefi model bağımsızlığıdır; sohbet tamamlama tarzı API’lerle kullanılabilen bir yaklaşımı hedefler
- TypeChat şu anda hem düzyazı hem de kodla eğitilmiş modellerde en iyi şekilde çalışır
- Paket npm üzerinde yer aldığından hemen denenebilir
2 yorum
Haha, haberi görünce paylaşmaya çalışmıştım ama yapay zekaya yetişemiyorum.
Hacker News görüşleri
Burada ne tür bir katma değer olduğunu pek göremiyorum
LLM'e gönderilen asıl mesaj burada: https://github.com/microsoft/TypeChat/blob/main/src/typechat...
Sonuçta sabit bir prompt ile yapılandırılmış veri döndürtüyor gibi görünüyor; üstüne biraz otomasyon ve satıcı bağımlılığı eklenmiş bir hâli. Bu tür LLM kütüphanelerinin çoğu, alttaki API'leri saran kaba API'lere daha yakın; aynı işi yapan bir script kolayca yazılabilir ve modelle kullanıcı gereksinimleri değiştikçe daha esnek olur
Örneğin prompt'u değiştirmek ya da Python sınıfları kullanmak istenirse, böyle bir kütüphane ile API çağrılarını ve metin şablonlarını kullanıcıya açan bir yaklaşım (https://github.com/hofstadter-io/hof/blob/_dev/flow/chat/llm...) arasında iş yükü açısından büyük fark var
https://github.com/microsoft/TypeChat/blob/main/src/typechat...
Aynı fikri denemiş biri olarak söyleyebilirim ki, 2. maddedeki heuristik nispeten basit tiplerde, yani derin iç içe geçmeyen kayıtlar ve diziler ile tip değişkenlerinin sınırlı kullanımında şaşırtıcı derecede iyi çalışıyor. LLM'e nispeten basit tiplerde değerler döndürmesini söyleyen prompt'larla bile faydalı uygulamalar yapılabiliyor; bu kütüphane de bu istek kalıbını doğrudan uygulama ihtiyacını azaltması ve TypeScript kod tabanlarıyla standart entegrasyon sunması açısından değerli
Yine de kütüphane kullanma yönü doğru gibi geliyor; hangi yaklaşımın yeterince olgunlaşacağını izlemeye devam ediyorum
Örneğin bir ürün hakkında serbest metinli 1000 anket yanıtınız varsa, bir şema oluşturup her biri için
TypeChatçalıştırarak bu serbest metinlerden bir veri kümesi elde edebilirsiniz. İnanılmaz derecede faydalıAnlamadığım bir nokta var
Geçerli bir yanıt gelmesini umup, son aşamaya hatalı yanıtları tespit eden bir doğrulayıcı ekleyip, modele lütfen istediğimiz sözdizimiyle cevap vermesi için yalvaran bu karmaşık sürecin neden gerektiğini anlamıyorum
İstenen biçime uyan token'lar örneklenirse geçerli JSON sözdizimi garanti edilebilir. Her seferinde en yüksek puanlı token'ı açgözlü biçimde seçmek yerine, istenen biçime uyan token'lar arasından puanı en yüksek olanı seçmek yeterli
Microsoft'un Guidance'ı bunu zaten yapıyor: https://github.com/microsoft/guidance
Ama OpenAI tüm token'ların tam puanlarını vermiyor, yalnızca en yüksek puanlı token'ı veriyor gibi görünüyor. Modeli yerelde çalıştırırsanız Guidance kullanmak basit, JSON'un her seferinde doğru olacağı garanti edilebilir ve üretim de daha hızlı olur; tuhaf gerçekten
Ayrıca bu yaklaşımla TypeScript tiplerinin tüm karmaşıklığını ifade etmek zor olabilir gibi geliyor
[0] https://www.snopes.com/fact-check/brown-out/
Model aslında başka token'lar üretmek isterken onu zorla
{koymaya mecbur bırakırsanız, sonrasında üretilen metnin kalitesi düşebilir. Emin değilim, sadece aklıma gelen bir ihtimalAçık kaynak bir LLM'i JSON ayrıştırma için ince ayar yaparak kullandım; yönlendirilmiş token örneklemesi olmadan bile kullanım durumuna göre 70B parametre fazla olabilir. Çok daha küçük modellerde de oldukça iyi sonuçlar gördüm ve küçük model ince ayarıyla yönlendirilmiş token örneklemesini birleştirmek ilginç olabilir
Ancak çok genel amaçlı uygulamalarda ince ayar kusursuz olmayabilir. Eğitim veri setinde öngörülmeyen girdiler gelirse sorun çıkabilir
Elbette web'de bunun pek anlamı yok. Fareyle birkaç ürüne tıklamak çok daha kolay
https://github.com/ggerganov/llama.cpp/pull/1773
Ben bir şey düşününce sanki Anders Hejlsberg gidip onu yapıyor gibi.
Yapılandırılmış istekler ve yanıtlar, LLM'lerin bir sonraki evrimi olarak %100 doğru görünüyor. İnsanlar zaten chatbotlardan bıkmaya başlıyor ve metin parse etme ya da prompt derdi olmadan herhangi bir backend'e takılabildiğinde müthiş olacak
TypeChat doğru yönde gidiyor gibi. “Mümkünse bu JSON girdisini olası eylemlerden birine eşleştir” gibi ek bir katman hayal edebiliyorum.
Botların, yani LLM vb.'nin gerçek kod katmanlarını birbirine bağladığı temiz bir hibrit gelecek görünüyor. Bazen toplama/etiketleme işinin bir parçası olur, bazen de girdiye yanıt veren kısmın bir parçası olur.
Genel olarak çok ilginç bir alan ama her şey o kadar hızlı ilerliyor ki henüz derinlemesine dalmadım. Bir sürü zeki insan çalışıyor, o yüzden tozun biraz yatışmasını beklemek gerektiğini düşünüyorum. Yine de hayalini kurduğum ev arayüzünü artık yapabilecek noktaya gelmişiz gibi görünüyor
Örneğin Java tüketicisi çevresinde sık sık değişen API payload'larını düşünün. Bankacılıkta, devasa JSON payload'ları ve Java backend ortamında akıl sağlığımı korumaya çalışırken ayrı bir NodeJS katmanı kurmuştum.
Eşleme, LLM'lerin parlayabileceği bir alan
Kışkırtıcı bir yorum yapacak olursam, yavaş yavaş AI'ın araçsallaşma aşamasına giriyoruz. İnsanlar bunun çok fazla gerçek değer üretmediğini fark ediyor ama AI'a fazlasıyla yatırım yapıldığı için para akmaya devam ediyor. Akademik makale çıkarmak için de iyi bir konu ve LangChain neredeyse şaka gibi ama seed turunda 10 milyon dolar aldı.
DeFi/crypto bu aşamadan 2 yıl önce geçti. Birkaç yıl boyunca tuhaf bir limbo hali sürecek, sonra insanlar yavaş yavaş AI'ın bir ürün değil özellik olduğunu, uygulama alanının sınırlı kaldığını ve dünyayı kurtarmayacağını fark edecek. Tüm edge case'ler yüzünden otonom araçlar yapılamayacak, insan öldürebileceği için ameliyat da yapamayacak.
Copilot gibi en kullanışlı AI araçlarının bile olsa olsa çevresel düzeyde faydalı olduğunu hep söyledim. En iyi ihtimalle Google'da birkaç tıkla yapacağınız işi azaltır, ajanlar ise hiç de “zeki” değil. Birkaç yıl önce chatbot[1] ile benzer bir balon yaşandı, bugün ise kimse umursamıyor. “Metaverse” çok daha kısa sürdü ama aynı sürü psikolojisi işledi. “Bir sonraki büyük şey” denip sonra öyle olmadığının görülmesi gibi.
[1] https://venturebeat.com/business/facebook-opens-its-messenger...
Otonom araçlar ve ameliyat gibi AI için en zor kullanım örneklerini seçmişsin. Çoğu insanın işi ölüm kalım meselesi değil, bu yüzden otomasyon için çok uygun. Ölüm kalım içeren mesleklerde insan unsuru kalsa bile bunların AI ajanlarıyla güçlendirilmesi çok muhtemel. Örneğin ameliyatı insan yapsa bile, doktor ya da hemşirenin AI ile birlikte teşhis koyması zorunlu hale gelebilir.
Birkaç yıl önceki chatbot balonuyla bugünü gerçekten karşılaştırıyor musun? ChatGPT birkaç ay içinde 100 milyon kullanıcıya ulaştı ve gerçekten çok sayıda insan kullandı. Birkaç yıl önceki chatbot balonunun ise neredeyse hiç görünürlüğü yoktu.
Copilot vb.'nin sadece çevresel fayda sağladığını söylemen, şu an en kötü sürümlerine bakıyor olmandan kaynaklanıyor. ChatGPT benim hayatımı değiştirdi ve henüz kod bile çalıştırmıyor. Code Interpreter bunu yapıyor ama ben daha denemedim.
2030 civarında insanlar muhtemelen artık kod yazmayacak; makinelere prompt verip AI ajanlarını yönlendirecek. O zamana kadar çoğu işin de otomatikleşmesi kuvvetle muhtemel.
AI sadece gelip geçici bir moda değil; tüm endüstrileri değiştirecek ve bu insanların düşündüğünden çok daha hızlı olacak. AI'ın sonuçlarını metaverse ile karşılaştırarak küçümseyen bu alaycı yaklaşım saçma ve hayal gücünden yoksun. Özellikle AI ajanları tarafında yapılacak çok iş var ama muhtemelen insanların düşündüğünden çok daha hızlı oraya ulaşacağız ve etkisi devasa olacak
Yine de AlphaGo'nun kötü hamleler “halüsinasyon” gördüğü durumdan dünyanın en iyi Go oyuncusu haline gelmesi uzun sürmemişti. Dil modellerinde de bu mümkün olursa, GPT-x bugünkü tüm tartışmaları süpürüp atabilir
GPT-4, yetkin bir kişinin kendi becerilerinin genel olarak işe yaradığı ama alan bilgisinin zayıf olduğu yan işlerde inanılmaz yardımcı oluyor.
10 yıldır kod yazıyorum ve yakın zamanda ilk kez makine öğrenmesi öğrenmeye başladım; her gün GPT-4 kullanıyorum ve son derece memnunum.
Elbette pürüzlü tarafları bazen can sıkıcı olabiliyor. Benim için yönetilebilir seviyede ve büyük bir zahmet değil. Görmezden gelmeye ya da etrafından dolaşmaya alıştım; bu tür araçları kullanmanın gerçekten bir becerisi var.
Sunulan değerin artmaya devam edeceğini düşünüyorum. Daha alçakta duran meyvelerin ve orta yükseklikteki meyvelerin hepsini bile toplamış değiliz
Modern AI, pratikte çoğunlukla LLM'ler, ekonominin neredeyse tüm sektörlerine anında ve geniş ölçekte uygulanabiliyor. Bu yüzden zaten pek çok kişi özellikler geliştirip yayımlıyor. Bu teknolojide muazzam bir değer var. Dünyayı tamamen değiştirir mi? Hayır. Ama yeni ürün kategorileri oluşturacak ve mevcut ürünlerin yeteneklerinin büyük bir bölümünü kökten iyileştirecek kadar güçlü
Apple, Google, Amazon ve Microsoft’un sesli asistanları arasında neden hâlâ hizmetlerine LLM entegre eden olmadığını ve OpenAI’ın neden kendi sesli asistanını çıkarmadığını anlayamıyorum.
Ayrıca RSS gibi, web siteleri AI etkileşimi için standart bir URL yayımlasa ve TypeChat ile arayüzlerini açsa, bu yönde epey ilerleme kaydedilebilir gibi görünüyor.
Yine de ses tabanlı bir LLM’den çok, gerçekten eylem gerçekleştirme yeteneğinin değeri daha büyük. Örneğin Alexa’da, akıllı ev kontrolünü öngörülebilir ve hata ayıklanabilir biçimde ele alan bir sisteme ihtiyaç var. Yoksa insanlar sinir oluyor.
Bunun kesinlikle mümkün olduğunu düşünüyorum, ama Alexa ya da Siri gibi mevcut sistemler, hatta daha az kullanılan Cortana da, yıllardır daha zayıf modellerin üzerine pek çok hook ve API kullanan kurallar ve yazılımlarla inşa edildi. Bunu çalışır hale getirmek için mevcut kaliteyi koruyarak iyileştirmek ve aynı anda sistemin ana parçalarını baştan aşağı yenilemek gerekiyor; bu yüzden zaman alıyor.
Üstelik bu tür asistanlar doğrudan para kazanmıyor, çoğu zaman zarar ettiriyor. Telefon, alışveriş gibi başka yollarla para kazanabilen veya işlerini itebilen büyük şirketler için değerli; bu yüzden startup’ların bunu yapması için teşvik az.
Geçmişte hem Cortana hem Alexa tarafında çalıştım ve LLM’deki gelişmelerden yola çıkarak sıfırdan yeni bir sürüm yapmayı da çok düşündüm. Teknoloji genel olarak sezgiseldi ve artık mümkün hale gelen yeni kullanım senaryosu fikirleri de vardı, ama işe yarayan bir iş modeli bulamadım. O yüzden şu anda tamamen başka bir şey yapıyorum.
Yalnız bunun için bulut tabanlı bir API kullanmak fazla rahatsız edici, bu yüzden ev içindeki bir sunucuda çalışan bir çözüm istiyorum. Aynı zamanda konuşmayı tanıma ve yanıt süresi çok hızlı olmalı; bekliyormuşum gibi hissettirmemeli.
Kişisel asistan DIY denemelerini birkaç kez gördüm ama hep epey yüksek gecikme vardı; sık kullanılsa insanı çabuk sinirlendirir gibi geliyor.
{ "name": "grande latte" }gibi bir yanıt almanın kolay olduğundan bahsedilen bir kısım var.Ama tip
Item = { name: string; ... size?: string; }ise, bununname: "grande latte"sonucunu nasıl engellediğini pek anlamıyorum.Örnek yanıtta
"size": 16var ve buna “oldukça iyi” deniyor, ama aslında istenen tipi bile döndürmüyor. Muhtemelen örnekte bir yazım hatası var; öyleyse fikrin kendisi hoş görünüyor.sizealanınınumberolarak tanımlayan farklı bir şema kullanılmıştı. Şemayı değiştirdim ama prompt’u yeniden çalıştırmadım; şimdi düzeltilmiş olmalı.Başta bir
namestring alanı istemiyor olabilirsiniz.{ name: “kahverengi olan”, size: “espresso fincanı boyu”, … }gibi değerler gelmesini engelleyemezsiniz; bu da aslında ham string’i parse etmek kadar kötü.Muhtemelen her alan için bilinen değerleri temsil eden büyük bir string union type istersiniz. Böylece LLM’i bunlardan birine uydurmaya zorlayabilirsiniz.
Ama bunun neden tip sözdizimine bağlanması gerektiğini de merak ediyorum. Böyle union tipleri runtime verisinden kurabilen Zod gibi bir yaklaşım daha uygun görünüyor.
Miktarın pozitif tam sayı olması ve kesirli olmaması gibi kısıtlar da gerekir. Elbette JSON değerlerini sonradan doğrulayabilirsiniz, ama o zaman kullanıcı iki tür hata görür: biri LLM’in akıcı insan diliyle verdiği hata, diğeri de “miktar değeri çok büyük” gibi tuhaf derecede teknik bir hata.
Bunu anlatmak için tip sözdizimi yanlış yerde duruyor gibi.
Verilen kodla sistemin “grande”yi 16’ya eşlemesinin bir yolu yok; ayrıca 16 başka bir yerde de kullanılıyor gibi görünmüyor.
LLM’i, tip denetimini geçen bir şey üretinceye kadar tekrar tekrar çalıştırıp hata mesajlarıyla yeniden prompt’luyor gibi görünüyor.
Şirin bir fikir ve işe yarayacak gibi, ama büyük modeller ve uzun giriş prompt’larında maliyet yüksek olabilir. Her senaryo için çözüm olmayabilir.
[1]: https://github.com/microsoft/guidance
Pazar yapılandırılmış çıktı istediğine göre, modellerin de o yöne doğru iyileşeceği varsayımı oldukça makul.
Bu hafta Laravel PHP için buna çok benzeyen ama kapsamı daha dar olan bir şey geliştirip yayınladım: https://github.com/adrenallen/ai-agents-laravel
Mühendislerin, ellerindeki LLM ile yeni bir “bot”u kolayca ayağa kaldırabilmesi gerektiğini düşünüyorum. Fonksiyonları ChatGPT’nin anlayabileceği bir biçime dönüştürmek, yanıtları işlemek ve sonra tekrar ayrıştırmak gibi çok sıkıcı işler var
Bu tür sistemleri kullanınca asıl olarak gerçek PHP kodu yazmaya ve birkaç net yorum eklemeye odaklanabiliyorsunuz; sonra bot bu kodu hangi görev olursa olsun doğrudan bir araç gibi kullanabiliyor
Ayrıca bu yaklaşım kod paylaşımını çok daha kolay hale getiriyor. Biri bir fonksiyon yazdığında, onu yeni bir bota alıp hemen kullanabiliyorsunuz. “LLM’in kullanıp anlayabilmesi için dönüştürme katmanını” ortadan kaldırması çok hoş ve geliştirme hızını ciddi biçimde artırıyor
Henüz kusursuz değil ama birbirimizin kodundan daha iyi yararlanmak istiyorsak sonunda her şeyin bu yöne gideceğini düşünüyorum. Bugün kod yazarken paket yöneticilerini nasıl kullanıyorsak, AI araçlarına özel bir paket yöneticisi olmasını isterdim. Mesela “hava durumu getir” kütüphanesini kurup botuma eklerim ve artık hava durumunu alabilir
Bir saniye, bu TypeScript tip tanımlarına karşı nesneleri çalışma zamanında doğrulama mı yapıyor? Bunu bağımsız bir kütüphane ya da özellik olarak dağıtabilirlerse, TypeScript kod tabanlarında API yanıt payload doğrulaması gibi işler için tam bir oyun değiştirici olabilir
https://github.com/microsoft/TypeChat/blob/4d34a5005c67bc494...
Burada
guidance[0] kullanılmaması çok şaşırtıcıZorunlu alanların tamamlanmasını önerebildiği için doğrulama[1] ihtiyacını azaltabilir ve sonuçta GPU zamanı da tasarruf ettirebilir gibi görünüyor
Bunun kesin bir nedeni vardır ama gerçekten bilmek isterim
Bir yandan da tam olarak böyle bir şey yapıyordum; Microsoft bir anda gelip öğle yemeğimi elimden almış gibi hissettirdi
[0] https://github.com/microsoft/guidance
[1] https://github.com/microsoft/TypeChat/blob/main/src/typechat...