Microsoft, yapay zeka ajanları için görselleştirme dili Flint’i duyurdu
(microsoft.github.io)- Flint, yapay zeka ajanlarının insanların düzenleyebileceği kısa tanımlarla ifade gücü yüksek grafikler oluşturmasına yardımcı olan bir görselleştirme ara dilidir
- Derleyici; veri ve anlamsal tipleri, grafik türünü ve kodlamaları yorumlayarak ölçek, eksen, aralık ve yerleşim gibi düşük seviyeli ayarları otomatik olarak doldurur
- 46 grafik türü ve 83 galeri örneği sunar; Vega-Lite, ECharts ve Chart.js ile render etmeyi destekler
- TypeScript / JavaScript ortamlarında npm ile kurulabilir; ajan iş akışlarında MCP sunucusu kullanılabilir
- Backend’lere özgü API farklılıklarını birleşik bir arayüzün arkasında gizleyerek, aynı tanımdan renderer değiştirmeyi veya grafik tasarımı değişikliklerini daha kolay yönetir
Flint’in çözmeyi hedeflediği sorun
- Flint, Microsoft Research projesidir; yapay zeka ajanlarının basit ve insanlar tarafından düzenlenebilir grafik tanımlarından grafikler üretmesi için tasarlanmış bir görselleştirme ara dilidir
- Tanım; veri, anlamsal tipler ve grafik tanımından oluşur
- Örnek tanımda
periodiçinYearMonth,totalUsersiçinQuantity,gameTypeveregioniçinCategorybelirtilir Line Chartiçinderegioncolumn’a,periodx’e,totalUsersy’ye,gameTypecolor’a bağlanarak bölgelere göre aylık aktif kullanıcı çizgi grafiği oluşturulur
- Örnek tanımda
- TypeScript / JavaScript ortamlarına npm ile kurulabilir
- Ajan iş akışlarında MCP sunucusu kullanılabilir
- gallery üzerinden 46 grafik türü ve 83 örnek görülebilir
Tanımı grafiğe dönüştürme yöntemi
- Flint, sıkıştırılmış bir tanımdan başlayarak Vega-Lite gibi backend’lerin yerel tanımlarını üretir ve gerekli düşük seviyeli ayrıntıları doldurarak grafiği render eder
- Anlamsal tipler, veri alanlarının anlamını ifade eder
- Örnekler
Rank,YearMonth,Delta,Temperaturegibi tipleri içerir - Flint buna dayanarak ayrıştırma, ölçek, eksen, biçimlendirme ve renk düzeni gibi grafik ayarlarını çıkarımlar
- Net yeni kullanıcıları oyuna ve aya göre gösteren bir heatmap’te; zaman değeri ayrıştırıcısı, eksen biçimlendirmesi, diverging renk düzeni ve orta nokta anlamsal tiplere göre belirlenir
- Örnekler
- Otomatik yerleşim optimizasyonu, esnek yerleşim modeli ve banking ilkelerine dayanır
- Derleyici boyut, aralık ve konumlandırmayı dinamik olarak yöneterek grafiğin canvas’a sığacak şekilde ayarlanmasını sağlar
- Gruplu çubuk grafiklerin sayısı arttığında canvas’ı genişletir ve band width’i azaltarak yoğun sürümün de canvas’a sığmasını sağlar
- Grafik tasarımı değişiklikleri, grafik türü değiştirme ve görsel kodlamaları yeniden bağlama yoluyla yönetilebilir
- 2000 ABD nüfus sayımındaki cinsiyet ve yaşa göre nüfus dağılımını gösteren faceted bar chart, pyramid chart’a dönüştürülürken kullanıcı yalnızca grafik türünü değiştirir; kalanını derleyici halleder
Render backend’leri ve kullanılabilirlik durumu
- Flint, Vega-Lite, ECharts, Chart.js genelinde 46 grafik türünü destekler
- Farklı API’leri ve programlama modellerini birleşik bir arayüzün arkasında gizler
- Vega-Lite’ta yerel sunburst olmadığında ECharts’a geçilebilir
- Bölge × gameType × game hiyerarşisini görselleştirmek için gruplu çubuk grafiğe kıyasla sunburst chart daha iyi bir alternatif olarak sunulur
- Flint açık kaynaklıdır ve hemen kullanılabilir
- Başlangıç noktası olarak GitHub ve galeri örnekleri sunulur
- Microsoft Research, Flint’i IDEAS Lab ve Renmin University of China ile iş birliği içinde geliştirdi
1 yorum
Hacker News yorumları
“Yapay zeka ajanları için” pazarlamasının neden gerekli olduğunu anlıyorum ama sonuçta grafikleri ifade etmeyi kolaylaştıran bir dil olması bile tek başına yeterince etkileyici ve kullanışlı
Sayfada da “ölçek, eksen, aralık ve yerleşim gibi ayrıntılı düşük seviyeli parametreler istemek yerine, Flint derleyicisi veriden, anlamsal türden, grafik türünden ve kodlamadan optimize edilmiş grafik ayarları çıkarır” deniyor
Ajan sistemlerinde yeni bir örüntü ortaya çıkıyor ve bu proje iyi bir örnek
LLM’in üretip devrettiği bir ara gösterim (IR) oluyor, bunun üstüne de derleyici ya da kod üretici gibi deterministik bir katman ekleniyor. Yakın gelecekte bu yapıyı daha sık göreceğimizi düşünüyorum
Sayfada yok ama veri görselleştirme üretirken erişilebilirliği tasarım aşamasında ele almak gerçekten önemli
Bu podcast’te bununla ilgili kısa bir röportaj güzel özetlenmiş: https://open.spotify.com/episode/18dHTAxCCeIaLOTch6tRld
Röportaj verilen kişi bu alanda oldukça tanınmış görünen Frank Elavsky ve erişilebilirlik denetimi için sezgisel kurallar, ilkeler ve yönergeler içeren Chartability projesini de oluşturmuş: https://chartability.github.io/POUR-CAF/
Takip için bir issue ekledim: https://github.com/microsoft/flint-chart/issues/48
Bunun Vega’nın kendisinden nasıl daha iyi ya da farklı olduğuna dair somut bir açıklama olup olmadığını merak ediyorum: https://vega.github.io/vega/docs/specification/
Vega zaten görselleştirme için ifade gücü yüksek bir DSL ve LLM eğitim verilerinde de epey yaygın biçimde yer alıyor olmalı
Flint daha yüksek seviyeli bir soyutlama olduğu için belirtim çok daha kısa ve basit; derleyici de düşük seviyeli kararları çıkararak iyi görünen grafikler oluşturuyor. Yani eskiden uzun bir program gerektiren iyi grafikleri artık ajanlar kısa bir programla oluşturabiliyor
“Basit grafik belirtimleri kararlı olabilir ama sistem varsayılanlarına dayandıkları için üretilen grafik kalitesi düşük olur; karmaşık belirtimler ise iyi görünen grafikler üretebilir ama çok ayrıntılı olduklarından ajanların bunları güvenilir biçimde işlemesi zordur” iddiasına pek katılmıyorum
Analiz ajanları geliştirdiğim az sayıdaki iş deneyiminde, LLM’lerin Python ve R ile görselleştirmeleri oldukça iyi ürettiği beni etkilemişti. Küçük açık ağırlıklı modeller için de durum aynıydı ve belirsiz kısımları biraz yineleyerek düzeltince dezavantajlar çoğu zaman ortadan kalkıyordu. Bu iddiayı destekleyen ya da sorunun nerede ortaya çıktığını gösteren bir araştırma çizgisi olup olmadığını merak ediyorum
Benim deneyimimde Claude ve ChatGPT ggplot tarzı şeyleri iyi üretiyor ama özelleştirme arttıkça biraz karmaşıklaşıyor
“Ölçek, eksen, aralık, yerleşim gibi uzun ve düşük seviyeli parametreler” açıklaması, Microsoft’un burada iki farklı şeyi birbirine karıştırdığı izlenimini veriyor.
LLM’ler kodun düşük seviyeli ya da uzun olup olmadığını aslında çok da umursamıyor; assembly ya da SPIR-V’yi de gayet iyi okuyabiliyorlar. Asıl sorun görsel kompozisyon. LLM’ler insanlar gibi “görmediği” için, görsel karşılaştırma yoluyla mekânsal düzeni anlamak onlar için doğal değil; bunu aşmak için de LLM’nin akıl yürütüp anlayabileceği, kod biçimindeki görselleştirmeler gibi bir temsil sunmak gerekiyor. Yani yapı, derin biçimde iç içe geçmiş ya da gizli durumu çıkarsamayı gerektiren bir şey olmadığı sürece sorun yok.
Ayrıca Flint’in JSON içinde string anahtar merkezli tip kullanma kararına katılmak zor. Gerçek spesifikasyona bakınca bunun pekala insanların yazması kolay bir TypeScript kütüphanesi olarak da yapılabileceği görülüyor; bence bu çok daha iyi olurdu. Sonradan kaynağa gerçekten baktığımda, yalnızca belgelere bakıp varsaydığım mockup’tan çok daha olgun ve rafine olduğunu gördüm; ama “string anahtarlı JSON’a karşı gerçek generics tabanlı yazım yüzeyi” yönündeki temel şikayetim hâlâ duruyor.
chartTypekısmının, şablonların daha genişletilebilir olması gerektiği için çok zarif olmadığını düşünüyorum. Buranın düzeltilmesi gerekiyor.Diğer kısımlarda ise görselleştirme ya da diyagram kütüphanelerinin JSON kullanması oldukça yaygın. Çünkü farklı render bağlamlarına kolayca taşınabiliyor.
İlgili yazı: https://www.openui.com/blog/stop-making-ai-write-json
LLM öngörülebilirliğini artıran özel DSL’lerle ilgileniyorum ve Microsoft gibi bir devin de bunu anlamış görünmesi sevindirici. https://slangify.org/examples içindeki Contacts örneği, VCARD ile JCARD arasında çift yönlü dönüşüm yaparken özel bir DSL’in nasıl kolayca oluşturulabildiğini gösteriyor.
“İyi bir derleyicinin ele alması gereken görsel kararları açıkça belirtmeye zorluyor” denince, Graphviz tam da aynı nedenle var değil mi diye düşündürüyor.
Bildirimsel dil olarak JSON kullanmaları, LLM’lerin JSON’la iyi çalıştığını kabul etsem bile, bunun insanlar için tüketmesi rahat bir sözdizimi olduğu anlamına gelmiyor.
Flint, ajanların ölçek, eksen, sıfır tabanı, adım boyutu gibi düşük seviyeli parametreleri atlayabilmesi için kasıtlı olarak tasarlanmış. Bunlar iyi görünen grafikler için çok önemli öğeler ve derleyici bunları dinamik olarak optimize ediyor. Bu yüzden AI ajanları için kullanımı daha kolay oluyor.
Ek bir biçim öğesi olarak anlamsal tipler kullanmak çok faydalı. Çünkü birçok format boilerplate’ini kısa biçimde kodlayabiliyor.
Flint tip kayıt defterini paylaşılabilir ya da genişletilebilir yapma planları olup olmadığını merak ediyorum. Neden bunun doğrudan veri özelliğinin kendisi olarak bırakılmadığını da merak ediyorum. Vega-Lite üzerinde daha üst düzey bağlı grafikler kurarken neredeyse aynı spesifikasyona ulaşmıştım.
Bu projenin esas amacını pek anlayamıyorum. GPT-3.5 zamanından beri LLM’ler tek seferde matplotlib üretebiliyor gibiydi.
Veri görselleştirmede LLM’leri çok kullandım ve özel bir sorun yaşamadım. Ajanların görselleştirme üretiminde tam olarak nerede zorlandığını ve Flint’in bunu nasıl çözdüğünü gösteren örnekler merak ettiriyor.
Ama bunu son kullanıcıya yönelik bir araca koyduğunuzda, iyi görünen grafik üretiminde %80 başarı oranı ciddi bir sorun hâline gelmeye başlıyor. Veri analizi sistemleri geliştirirken bunu yaşadım. Doğrudan matplotlib ya da Vega-Lite üretmesini istediğinizde, aynı anda istikrar, ifade gücü, maliyet, süre ve token kullanımını sağlamak zorlaşıyor; bu yüzden bazı kararları derleyiciye taşıyıp üretim maliyetini düşürürken ifade gücünü koruyan bir orta yol olarak bu dili tasarladılar.
Proje sayfası: https://microsoft.github.io/flint-chart/
MCP ayarı: https://microsoft.github.io/flint-chart/#/mcp