5 puan yazan GN⁺ 1 일 전 | 1 yorum | WhatsApp'ta paylaş
  • Chrome’a yerleşik Gemini Nano’ya doğal dil istekleri gönderen bir web API’sidir; soru-cevap, sınıflandırma, içerik filtreleme, takvim çıkarımı ve kişi bilgisi çıkarımı gibi işlerde kullanılabilir
  • Kullanımdan önce ayrı bir model indirme gerekir ve çalışması için desteklenen işletim sistemi, depolama alanı, GPU veya CPU belleği gibi çalışma koşullarının sağlanması gerekir
  • Oturumlar, LanguageModel.availability() ile kullanılabilirlik kontrol edildikten sonra create() ile hazırlanır; initialPrompts·append()·clone() ile bağlam sürdürülebilir veya dallandırılabilir
  • Girdi olarak text, image, audio alabilir; çıktı olarak şimdilik yalnızca text desteklenir; prompt() tamamlanmış yanıtı, promptStreaming() ise akış halinde yanıtı döndürür
  • responseConstraint tabanlı yapılandırılmış çıktı, bağlam penceresi yönetimi, izin politikası ve çok modlu işleme dahil olmak üzere, tarayıcı içinde cihaz üzerinde yapay zekayı ele alan bir yürütme modeli sunar

Genel Bakış

  • Chrome’a yerleşik Gemini Nano’ya doğal dil istekleri gönderen bir API olarak çalışır ve web sayfası tabanlı soru-cevap, makale sınıflandırma, içerik filtreleme, takvim çıkarımı ve kişi bilgisi çıkarımı gibi kullanım senaryolarını mümkün kılar
  • API Chrome’a yerleşik olsa da modelin ayrı olarak indirilmesi gerekir; ilk kullanımdan önce Google’ın Üretken Yapay Zeka Yasaklı Kullanımlar Politikası incelenmelidir
  • Üretken yapay zekayı kullanmadan önce People + AI Guidebook kaynağına göz atılması önerilir
  • TypeScript tiplemeleri @types/dom-chromium-ai paketiyle alınabilir
  • Chrome Extensions geliştiricilerinin süresi dolmuş aiLanguageModelOriginTrial origin trial yetkisini kaldırması gerekir

Donanım ve Çalışma Koşulları

  • Prompt API·Summarizer API·Writer API·Rewriter API·Proofreader API, Chrome’da yalnızca belirli koşullar sağlandığında çalışır
  • Desteklenen işletim sistemleri Windows 10/11, macOS 13+, Linux ve ChromeOS’tur; ChromeOS desteği Chromebook Plus cihazlarda Platform 16389.0.0 ve üzeri sürümlerde sunulur
  • Android için Chrome, iOS ve Chromebook Plus olmayan cihazlardaki ChromeOS, Gemini Nano tabanlı API’leri henüz desteklemez
  • Chrome profilinin bulunduğu diskte en az 22 GB boş alan gerekir
  • Model GPU veya CPU üzerinde çalışabilir
    • GPU için 4 GB’tan fazla VRAM gerekir
    • CPU için en az 16 GB RAM ve 4 veya daha fazla CPU çekirdeği gerekir
    • Ses girdisi kullanan Prompt API için GPU gereklidir
  • Ağ bağlantısı yalnızca ilk model indirme sırasında sınırsız veya tarifeli olmayan bir bağlantı gerektirir
    • Sonrasında modeli kullanmak için ağ bağlantısı gerekmez
    • Model kullanılırken veriler Google’a veya üçüncü taraflara gönderilmez
  • Model boyutu tarayıcı güncellemelerine göre değişebilir; güncel boyut chrome://on-device-internals üzerinden görülebilir
  • İndirme sonrasında boş alan 10 GB’ın altına düşerse model cihazdan kaldırılır; koşullar yeniden sağlandığında tekrar indirilir

Başlangıç ve Model Hazırlığı

  • Kullanılabilirlik LanguageModel.availability() ile kontrol edilebilir
  • availability() çağrısına daha sonra prompt() veya promptStreaming() içinde kullanılacaklarla aynı seçenekler verilmelidir
    • Bazı modeller belirli modaliteleri veya dilleri desteklemeyebilir; bu yüzden seçeneklerin eşleşmesi önemlidir
  • Model indirme ve oturum oluşturma, user activation doğrulandıktan sonra create() ile başlatılır
  • İndirme sürüyorsa ilerleme olayları alınarak kullanıcıya indirme durumu gösterilmelidir
  • localhost üzerinde Chrome bayrakları etkinleştirilirse yerleşik AI API’leri kullanılabilir
    • chrome://flags/#optimization-guide-on-device-model
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • Sonrasında Relaunch veya Chrome’un yeniden başlatılması gerekir
    • Hata alınırsa localhost sorun giderme bölümüne bakılabilir

Oturum Oluşturma ve Temel Ayarlar

  • Oturumlar LanguageModel.create() ile oluşturulur
  • Chrome Extensions için Prompt API’de topK ve temperature değerleri oturum bazında seçenek olarak ayarlanabilir
    • Varsayılan ve azami değerler LanguageModel.params() ile görülebilir
    • Bu özellik yalnızca Chrome Extensions veya sampling parameters origin trial kullanıldığında geçerlidir
  • params(), defaultTopK, maxTopK, defaultTemperature, maxTemperature değerlerini döndürür
  • Yeni bir oturum başlatılırken topK ve temperature ya ikisi birlikte belirtilmeli ya da ikisi de atlanmalıdır
  • create(), signal alanı üzerinden AbortSignal alarak oturumu iptal edebilir

Bağlam ve Prompt Yapısı

  • initialPrompts ile önceki konuşma bağlamı eklenerek tarayıcı yeniden başlatıldıktan sonra kaydedilmiş oturum sürdürülebilir
  • Prompt dizisine system, user, assistant rolleri birlikte eklenebilir
  • Son assistant mesajına prefix: true verilirse yanıtın bir kısmı önceden doldurularak belirli bir çıktı biçimi yönlendirilebilir
    • Örneğin TOML kod bloğunun başlangıç dizesi önceden eklenerek çıktı biçimi sabitlenebilir
  • Oturum oluşturulduktan sonra append() ile ek bağlam önceden eklenebilir
    • initialPrompts’ten farklı olarak oturum oluşturulduktan sonra da bağlam biriktirilebilir
    • append(), prompt doğrulanıp işlenip eklendikten sonra tamamlanır
    • Eklenemeyen bir prompt verilirse promise reddedilir

Girdi/Çıktı Modaliteleri ve Çok Dilli Kullanım

  • Oturum oluştururken expectedInputs ve expectedOutputs ile beklenen girdi/çıktı biçimi ve dili ayarlanabilir
  • expectedInputs içindeki type, text, image, audio destekler
  • expectedOutputs içindeki type şu anda yalnızca text kabul eder
  • Dil languages dizisiyle ayarlanır; Prompt API "en", "ja", "es" değerlerini alır
    • Ek dil desteği geliştirilmektedir
    • Girdi tarafına system prompt dili ve bir veya daha fazla user prompt dili eklenebilir
    • Çıktı tarafına bir veya daha fazla çıktı dili eklenebilir
  • Desteklenmeyen girdi veya çıktıyla karşılaşıldığında "NotSupportedError" DOMException oluşabilir

Çok Modlu Girdi

Yapılandırılmış Çıktı ve Kısıtlar

  • prompt() veya promptStreaming() içindeki responseConstraint alanına JSON Schema verilerek yapılandırılmış çıktı kullanılabilir
  • İlgili özellikler structured output sayfasında görülebilir
  • Örnekte boolean şeması verilerek gönderinin seramikle ilgili olup olmadığına yalnızca true veya false ile yanıt vermesi sağlanır
  • Uygulama sırasında JSON Schema veya regex mesajın bir parçası olarak da eklenebilir; bu durumda context window alanının bir kısmı kullanılır
  • session.measureContextUsage() çağrısına responseConstraint seçeneği verilirse kısıtın bağlamda ne kadar yer kullandığı ölçülebilir
  • omitResponseConstraintInput seçeneğiyle bu davranıştan kaçınılabilir
    • Bu durumda prompt içine istenen çıktı biçimine dair yönlendirme eklemek önerilir

Prompt Çalıştırma Yöntemi

  • Kısa bir yanıt bekleniyorsa prompt() kullanılarak tamamlanmış sonuç tek seferde alınabilir
  • Uzun bir yanıt bekleniyorsa promptStreaming() kullanılarak kısmi sonuçlar akış halinde alınabilir
  • promptStreaming() bir ReadableStream döndürür
  • Hem prompt() hem de promptStreaming() ikinci argüman olarak signal alabilir ve çalışan prompt iptal edilebilir

Oturum Yönetimi

  • Her oturum, konuşmanın bağlamını korur; önceki etkileşimler sonraki yanıtlara yansır
  • Her oturumun işleyebileceği azami token sayısı vardır; güncel kullanım ve sınır session.contextUsage ile session.contextWindow üzerinden görülebilir
  • Yeni bir prompt bağlam penceresini aşarsa, sistem prompt’u hariç konuşmanın baş kısmı soru-yanıt çiftleri halinde kaldırılarak yer açılır
  • Bu durum oturumdaki contextoverflow olayıyla tespit edilebilir
  • Konuşma geçmişi temizlense bile yeterli token açılamazsa prompt() veya promptStreaming() QuotaExceededError ile başarısız olur ve hiçbir şey silinmez
    • requested: girdinin kullandığı token sayısı
    • contextWindow: kullanılabilir token sayısı
  • Ayrıntılar için session management bölümüne bakılabilir

Oturumu Kopyalama ve Sonlandırma

  • clone() ile mevcut oturum kopyalanarak konuşma dalları oluşturulabilir
  • Kopyalanan oturum mevcut bağlamı ve ilk prompt’ları korur
  • clone() da signal alanı üzerinden AbortSignal alabilir
  • Oturuma artık ihtiyaç yoksa destroy() ile kaynaklar serbest bırakılabilir
  • Oturum yok edildiğinde artık kullanılamaz ve devam eden işlemler de durdurulur
  • Oturum oluşturmak zaman alabileceğinden sık prompt gönderilecekse oturumu açık tutmak daha uygun olabilir

İzin Politikası ve Çalışma Ortamı Kısıtları

  • Varsayılan olarak Prompt API yalnızca üst düzey window ile aynı origin’e sahip iframe’lerde kullanılabilir
  • Cross-origin iframe’lere erişim izni, Permission Policy içindeki allow="language-model" özelliğiyle devredilebilir
  • Şu anda Prompt API Web Workers içinde kullanılamaz
    • Çünkü her worker için permissions policy durumunu denetleyecek sorumlu belgeyi belirlemek karmaşıktır

Demolar ve Referanslar

Performans ve Geri Bildirim

1 yorum

 
GN⁺ 1 일 전
Hacker News görüşleri
  • Bu API, uzun zamandır düşündüğüm de-snarkifier fikrine tam uyuyor gibi görünüyor
    Sosyal medya entelektüel olarak uyarıcı ve öğretici olabiliyor, ama istemeseniz de ideolojik atışmalar ve alevli tartışmaların içine çekilmek çok kolay. İnternette tanımadığınız insanlarla duygusal enerji tüketerek kavga etmek, insan sermayesinin israfına yakın
    Böyle bir API olursa, bir tarayıcı eklentisi yazıları göstermeden önce sadece saldırgan ya da iğneleyici ifadeleri yumuşatıp olgusal bilgiyi aynen koruyabilir gibi duruyor. Hatta daha da ileri gidip, ton ne kadar saldırgansa o kadar gülünç ya da beceriksiz duyulacak şekilde dönüştürülebilir
    Böylece okuyan kişi yabancıların kişisel saldırılarından korunur, yazan kişinin de kaba davranmak için teşviki ortadan kalkar. Herkes böyle filtreler kullanırsa kimin daha kötü davranacağına dair bir rekabet nedeni de kalmaz

    • Bu, yazılı iletişimin Soylent'i gibi
      Besin değeri var ama tadı pek özel değil gibi
    • Böyle araçlar beni gerçekten heyecanlandırıyor. İnternetin boş kalorilerini ayıklayıp bugünün popüler platformlarının kullanımını ciddi biçimde azaltabilirler
      Benim istediğim şey, tüm clickbait başlıkları ve reklamları kaldırıp sadece kuru, olgusal başlıkları göstermek
      Hangi konuda olursa olsun bir tane temel haber ve birkaç anlamlı yorum bana yeter; gerisi çoğunlukla görmek istemediğim gürültü
      Sosyal medyanın şu anki hali o kadar kötü ki neredeyse hiç kullanmıyorum; tek istisna HN'ydi ama burası da yapay zeka doygunluğuyla benzer bir yöne gidiyor gibi. Yine de iki haftada bir birkaç saatimi harcıyorum, onu da tamamen bırakmak istiyorum
      İdeal olarak içeriğin %98'i filtrelenip ya da özetlenip ortadan kalkmalı ve zamanla interneti sadece kasıtlı olarak bir şey ararken kullanır hale gelmeliyim. Temelde internetin eğlence tarafının büyük kısmını kaldırıp zaman ve enerjiyi gerçek hayata ve kitap gibi yüksek kaliteli kaynaklara yönlendirmek istiyorum
    • YouTube'da zaten benzeri var, ben de DeArrow kullanıyorum
      Bu eklenti, kışkırtıcılığı azaltmaya çalışan bir crowdsourcing aracı; en üst katkıcıların bazılarının LLM botları olabileceğini düşünüyorum
    • İlginç bir fikir, keşfetmeye değer görünüyor
      Yine de böyle şeyler gerçekle karşılaşınca öngörülemez oluyor; iyi çalışsa bile ilk hayal edildiğinden epey farklı işlemesi olası
    • Ben Chrome'un built-in AI APIs ürün yöneticisiyim ve bu de-snarkifier fikrini gerçekten çok beğendim; ilginin de geniş olduğu görülüyor
      Kendimi tutamayıp Snarknada adlı bir prototipi hızlıca yaptım; hem düşük gecikme kalıplarına hem de doğruluk ihtimaline baktım
      Böyle kullanım senaryolarında neden cihaz üstü yaklaşımın doğru olduğunu düşünmemin nedeni tam da bu. Sonsuz kaydırmalı bir akışın tamamını bir bulut API'siyle yumuşatmaya kalkarsanız, token maliyeti geliştirici açısından taşınamaz hale gelir. Üstelik insanlar kişisel akışlarını ya da DM'lerini ton düzeltmesi için üçüncü taraf bir sunucuya göndermek istememekte de haklı
      Bunu cihazın içine taşırsanız, yüksek frekanslı Semantic Mutation ilk kez hem maliyet hem teknik açıdan gerçekçi olabilir. Benim oyuncak gibi PM prototipimden daha ciddi bir şey geliştirip somut sürtünme noktalarına gelirseniz, bunu duymayı gerçekten isterim. Yol haritası önceliklerini belirlemeye yardımcı olur
      [1]: Kodlama ajanları (Cursor, Claude Code vb.) kullanıyorsanız https://www.npmjs.com/package/built-in-ai-skills-md-agent-md bağlantısını vermenizi öneririm. Birçok model artık eski kalmış window.ai namespace'iyle eğitildiği için bu skill dosyası güncel API'yi doğru kullanmalarına yardımcı oluyor
  • Bu API tasarım çalışmasına liderlik ettim ve emekli olmadan önce ilgili tasarım değerlendirmelerini toparlayan bir yazı da yazdım
    https://domenic.me/builtin-ai-api-design/

    • Kısa ve uzun vadede bu API'nin hedef kullanım alanlarını nasıl gördüğünüzü merak ediyorum
      Ayrıca böyle bir şeyi geliştirirken tarayıcıların W3C düzeyinde değilse bile pratikte birbirleriyle koordinasyon kurup ortak noktaları hizalamaya çalışıp çalışmadığını da merak ediyorum. Sonuçta bu sektör oldukça küçük
    • Emekliliğiniz kutlu olsun
  • Bu gerçekten çalışıyor ve ben bunu local inference amacıyla şimdiden yayımladım
    Arama gibi düşük yoğunluklu LLM işlerinde, yoksul işi bir ollama gibi kullanabildim. En büyük avantajı ücretsiz olması, mahremiyeti koruması ve kullanıcının neredeyse hiçbir şey yapmasına gerek bırakmaması; bu da teknik olmayan kullanıcılara yerel çıkarım sunmak için iyi
    Ama gerçek kullanıcı deneyimi iyi değil. Model indirme boyutu tarayıcının kendisinden birkaç mertebe daha büyük ve ilk token gelmeden önce bunun tamamlanması gerekiyor
    İşletim sistemleri güvenilir biçimde önceden yerleştirilmiş modeller sunup bu tür API'lerin onlara bağlanabilmesini sağlayana kadar bunun çözülmesi zor görünüyor

    • Bu, Prompt API kullanan tüm siteler için paylaşılan tek seferlik bir indirme
      Daha büyük sorun, çoğu sıradan PC'de modelin fazla küçük ve yavaş olması. infocom text adventure tarzı cümleleri gerçek zamanlı dönüştürmeyi denedim ama şu anda birçok PC'de fazla yavaş olduğu için pratik değil
    • Bir sonraki büyük dalga, birden fazla 5090 takılı sistem satan yazılım abonelik primleri olabilir
    • MoE modeli olsaydı, uzman katmanları yalnızca gerektiğinde ağdan HTTP range query ile alınabilirdi
      Bu, bittorrent'in birden çok ana bilgisayardan dosya parçaları almasına benziyor. Ortak katmanların yine indirilmesi gerekir ama ilk token'a kadar geçen süre toplam boyuttan çok etkin boyutla orantılı hale getirilebilir
      Elbette bu durumda tam anlamıyla çevrimdışı çıkarım olmazdı ama tarayıcı tabanlı web özelliği için bu temel bir mesele olmayabilir
    • İşletim sistemlerinin önceden yüklü modelleri güvenilir biçimde sunacağı bir dünyanın gelmemesini umuyorum
    • Gerçekten harika
      Ama model tarayıcıdan çok daha büyükse ve ilk token'dan önce indirilmesi gerekiyorsa, bunun gecikmeli indirme anlamına gelip gelmediğini merak ediyorum. İlk kez çağıran kullanıcı o anda indirme tamamlanana kadar beklemek zorundaysa, kullanıcı deneyimi oldukça korkunç görünüyor
      Chrome'un kafa karışıklığını azaltmak için indirme durumu diyaloğu gibi bir şey gösterip göstermediğini ve disk kullanımının ne kadar olduğunu da merak ediyorum
  • Yüzeyde bu, Gemini Nano kullanıyor gibi görünüyor ama son Gemma 4 E2B/E4B çok daha iyi göründüğü için şimdilik kuantize sürümleri bir eklenti olarak dağıtmak daha iyi olabilir

    • Gemini Nano-1: 46% MMLU, 1.8B
    • Gemini Nano-2: 56% MMLU, 3.25B
    • Gemma4 E2B: 60.0% MMLU, 2.3B
    • Gemma4 E4B: 69.4% MMLU, 4.5B
      Kaynaklar:
    • https://huggingface.co/google/gemma-4-E2B-it
    • https://android-developers.googleblog.com/2024/10/gemini-nano-experimental-access-available-on-android.html
    • Şu an iç durumu bilmiyorum ama ben bu ekipteyken en yeni küçük Google modellerini Chrome'a çok hızlı getiriyorduk
      Gemma 4 ya da ona karşılık gelen Gemini Nano henüz Chrome'da yoksa yakında geleceğini tahmin ederim
      Ayrıca bu yazı en son 2025-09-21 tarihinde güncellenmiş ve o noktada zaten Gemini Nano 3 varmış
    • Evet
      Prompt API'nin, tarayıcının içindeki Gemini Nano'ya doğal dil isteği göndermenin bir yolu olduğu yazıyor
    • Prompt API, tarayıcıda mevcut olan modeli kullanır
      Edge'de muhtemelen Phi4 olurdu
  • Bu, kötü niyetli JS script'lerinin hiçbir şeyden haberi olmayan ziyaretçilere token üretimini yıkması için iyi bir yol gibi de görünüyor
    Daha büyük istemleri küçük parçalara bölüp birçok tarayıcıya göndererek, her birinin küçük bir kısmı işlediği subagent deseni ya da RLM benzeri bir yapıyla işe yarar sonuçlar üreten bir dağıtımın mümkün olup olmayacağını görmek de ilginç olurdu

    • Getirisine kıyasla iş yükü fazla büyük görünüyor
      Teknik ve ticari altyapı da aşırı karmaşık hale gelir; kullanıcı tarayıcılarına istem yüklemek istiyorsanız, sadece Chrome API'sini düzgün kullanmak daha mantıklı değil mi? Böyle düşük kapasiteli modellerde sunucu tarafı istemlerini dışarı yüklemenin gerçekten anlamlı olacağı durumların ne kadar yaygın olduğu da şüpheli
      Kaldı ki bunu gerçekten yapmak istiyorsanız WebGPU zaten uzun zamandır vardı
    • Küçük modellerin token üretiminin neredeyse hiç değeri yok
  • Bu, düzgün bir Model API'ye doğru atılmış bir adım gibi görünüyor ama hâlâ küçük bir adım
    Apple'ın Foundation Models yaklaşımını da düşündürüyor
    Birçok yapay zeka entegrasyonu metin iletişimi ya da sohbet tarzına odaklanıyor ama gerçekte metin dışı arayüzlerden fayda gören çok yazılım var
    Sonunda işletim sistemi ve tarayıcı, uygulamaların basit bir arayüzle cihaz üstü ve uzak modellere erişebilmesini sağlayan model yönetim API'leri sunmalı diye düşünüyorum
    Bunun platformlar arası standartlaşması harika olurdu ve mobil de buna dahil olmalı; bu yüzden bunu fiilen ileri itebilecek taraflar büyük ölçüde Apple ve Google gibi görünüyor. Meta arkadan gelebilir ya da tersine ilk hareket eden o olabilir
    Kilit nokta, bunun belirli bir tanıtım modeline özel olmaması
    Uygulamalar sorgulayıp uygun modeli seçebilmelidir
    (1) https://developer.apple.com/documentation/foundationmodels

    • Apple'ın Foundation Models sistemi kâğıt üzerinde iyi görünüyor ama yakından bakınca 4k context window sınırlaması göze çarpıyor
      Tabii hâlâ erken aşamada
  • https://github.com/mozilla/standards-positions/issues/1067

  • Biz bunu hackday retrospektif özetleri için kullanıyoruz
    https://remotehack.space/previous-hacks/
    RSS akışını okuyup gövde metninden özet üreten küçük bir betik ve statik siteyle oldukça iyi çalışıyor. Bir gün bunu aynı içerik üzerinde farklı sorular da soracak şekilde genişletmek istiyorum

  • Tarayıcıdan erişilebilen yerel LLM mahremiyet açısından iyi ama her tarayıcı bu API'nin arkasına farklı bir model koyarsa test cehennemi bugünkünden de kötü olabilir
    Sonunda çoğu uygulamanın Gemini Nano etrafında hizalanma ihtimali var; bu da kullanıcıları daha fazla Chrome tarafına iter mi diye merak ediyorum

    • Test parçalanması asıl mesele
      Gerçekte istemler modelden bağımsız değil; Gemini Nano 3 v2025 için özenle ayarlanmış bir istem, Gecko tarafındaki modelde sessizce daha kötü sonuç verebilir. Ama API, dallanma yapmaya yarayacak bir yetenek tespiti bile sunmuyor
      Bu, en azından desteklenen uzantıların sorgulanabildiği WebGL'den bile daha kötü. Adı ve sürümü tarayıcının arkasında gizlenen bir modelin istem kalitesine bağlı özellikler yayımlamak, kullanıcının kurduğu sözlüğe göre davranışı değişen yazılım yayımlamaya benziyor
  • Gemini Nano'nun, Gemma'nın aksine açık ağırlıklı olmadığını sanıyorum
    Bunu biri zaten yaptıysa ayrı, ama model ağırlıklarını dump etmek isterdim