Kullanıcıları model indirme hakkında bilgilendirme

Yayınlanma tarihi: 1 Ekim 2025

Yerleşik yapay zeka API'lerinden herhangi biri kullanılmadan önce temel model ve tüm özelleştirmeler (ör. ince ayarlar) ağdan indirilmelidir. Sıkıştırılmış veriler çıkarılmalı ve son olarak belleğe yüklenmelidir. Bu kılavuzda, kullanıcıların bu indirme işlemini beklerken daha iyi bir deneyim yaşaması için bazı en iyi uygulamalar açıklanmaktadır.

İndirme ilerleme durumunu izleme ve paylaşma

Her yerleşik yapay zeka API'sinde oturum başlatmak için create() işlevi bulunur. create() işlevinde, kullanıcıyla paylaşmak için indirme ilerleme durumuna erişebileceğiniz bir monitor seçeneği bulunur.

Yerleşik yapay zeka API'leri istemci tarafı yapay zeka için geliştirilmiş olsa da veriler tarayıcıda ve kullanıcının cihazında işlenir. Bazı uygulamalar ise verilerin sunucuda işlenmesine izin verebilir. Model indirme ilerleme durumunda kullanıcınıza nasıl hitap edeceğiniz şu soruya bağlıdır: Veri işleme yalnızca yerel olarak mı çalıştırılmalıdır? Bu doğruysa uygulamanız yalnızca istemci tarafındadır. Aksi takdirde uygulamanız karma bir uygulama kullanabilir.

Yalnızca istemci tarafı

Bazı senaryolarda istemci tarafında veri işleme gerekir. Örneğin, hastaların kişisel bilgileriyle ilgili soru sormasına olanak tanıyan bir sağlık uygulaması, bu bilgilerin kullanıcının cihazında gizli kalmasını ister. Kullanıcı, herhangi bir veri işleme özelliğini kullanabilmek için modelin ve tüm özelleştirmelerin indirilip hazır olmasını beklemelidir.

Bu durumda, model henüz kullanıma sunulmamışsa indirme ilerleme durumu bilgilerini kullanıcıya göstermeniz gerekir.

<style>
  progress[hidden] ~ label {
    display: none;
  }
</style>

<button type="button">Create LanguageModel session</button>
<progress hidden id="progress" value="0"></progress>
<label for="progress">Model download progress</label>

Yerleşik model indirilirken uygulama henüz kullanılamaz.

Şimdi bunu işlevsel hale getirmek için biraz JavaScript gerekir. Kod önce ilerleme arayüzünü başlangıç durumuna (ilerleme gizli ve sıfır) sıfırlar, API'nin desteklenip desteklenmediğini kontrol eder ve ardından API'nin kullanılabilirliğini kontrol eder:

  • API 'unavailable': Uygulamanız bu cihazda istemci tarafında kullanılamaz. Kullanıcıyı özelliğin kullanılamadığı konusunda uyarın.
  • API 'available': API hemen kullanılabilir, ilerleme durumu kullanıcı arayüzünün gösterilmesi gerekmez.
  • API 'downloadable' veya 'downloading': API, indirme işlemi tamamlandıktan sonra kullanılabilir. Bir ilerleme göstergesi gösterin ve downloadprogress etkinliği her tetiklendiğinde güncelleyin. İndirme işleminden sonra, tarayıcının modeli çıkardığını ve belleğe yüklediğini kullanıcıya bildirmek için belirsiz durumu gösterin.
const createButton = document.querySelector('.create');
const promptButton = document.querySelector('.prompt');
const progress = document.querySelector('progress');
const output = document.querySelector('output');

let sessionCreationTriggered = false;
let session = null;

const createSession = async (options = {}) => {
  if (sessionCreationTriggered) {
    return;
  }

  progress.hidden = true;
  progress.value = 0;

  try {
    if (!('LanguageModel' in self)) {
      throw new Error('LanguageModel is not supported.');
    }

    const availability = await LanguageModel.availability();
    if (availability === 'unavailable') {
      throw new Error('LanguageModel is not available.');
    }

    let modelNewlyDownloaded = false;
    if (availability !== 'available') {
      modelNewlyDownloaded = true;
      progress.hidden = false;
    }
    console.log(`LanguageModel is ${availability}.`);
    sessionCreationTriggered = true;

    const llmSession = await LanguageModel.create({
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          progress.value = e.loaded;
          if (modelNewlyDownloaded && e.loaded === 1) {
            // The model was newly downloaded and needs to be extracted
            // and loaded into memory, so show the undetermined state.
            progress.removeAttribute('value');
          }
        });
      },
      ...options,
    });

    sessionCreationTriggered = false;
    return llmSession;
  } catch (error) {
    throw error;
  } finally {
    progress.hidden = true;
    progress.value = 0;
  }
};

createButton.addEventListener('click', async () => {
  try {
    localSession = await createSession({
      expectedInputs: [{ type: 'text', languages: ['en'] }],
      expectedOutputs: [{ type: 'text', languages: ['en'] }],
    });
    promptButton.disabled = false;
  } catch (error) {
    output.textContent = error.message;
  }
});

promptButton.addEventListener('click', async () => {
  output.innerHTML = '';
  try {
    const stream = localSession.promptStreaming('Write me a poem');
    for await (const chunk of stream) {
      output.append(chunk);
    }
  } catch (err) {
    output.textContent = err.message;
  }
});

Kullanıcı, model tarayıcıya aktif olarak indirilirken uygulamaya girerse ilerleme arayüzü, eksik olan verilere göre tarayıcının indirme işleminde nerede olduğunu gösterir.

Bu akışın işleyişini gösteren demoya göz atın. Yerleşik yapay zeka API'si (bu örnekte Prompt API) kullanılamıyorsa uygulama kullanılamaz. Yerleşik yapay zeka modelinin henüz indirilmesi gerekiyorsa kullanıcıya ilerleme durumu göstergesi gösterilir. Kaynak kodunu GitHub'da görebilirsiniz.

Karma uygulama

İstemci tarafı yapay zekayı kullanmayı tercih ediyorsanız ancak verileri geçici olarak buluta gönderebiliyorsanız hibrit bir uygulama ayarlayabilirsiniz. Bu sayede kullanıcılar, yerel modeli indirirken özellikleri anında deneyimleyebilir. Model indirildikten sonra dinamik olarak yerel oturuma geçin.

Karma için herhangi bir sunucu tarafı uygulaması kullanabilirsiniz ancak karşılaştırılabilir sonuç kalitesi elde etmek için hem bulutta hem de yerel olarak aynı model ailesini kullanmanız muhtemelen en iyisidir. Gemini API ve web uygulamalarını kullanmaya başlama başlıklı makalede, Gemini API'ye yönelik çeşitli yaklaşımlar vurgulanmaktadır.

Yerleşik model indirilirken uygulama, bulut modeline geri döner ve kullanılabilir.

Demoda bu akışın nasıl çalıştığı gösterilmektedir. Yerleşik yapay zeka API'si kullanılamıyorsa demo, buluttaki Gemini API'ye geri döner. Yerleşik modelin hâlâ indirilmesi gerekiyorsa kullanıcıya bir ilerleme göstergesi gösterilir ve uygulama, model indirilene kadar buluttaki Gemini API'yi kullanır. GitHub'daki tam kaynak koduna göz atın.

Sonuç

Uygulamanız hangi kategoriye giriyor? %100 istemci tarafı işleme mi gerektiriyorsunuz yoksa karma bir yaklaşım kullanabilir misiniz? Bu soruyu yanıtladıktan sonraki adım, sizin için en uygun olan model indirme stratejisini uygulamaktır.

Bu kılavuzda belirtildiği gibi, kullanıcılarınıza model indirme ilerleme durumunu göstererek uygulamanızı istemci tarafında ne zaman ve hangi koşullarda kullanabileceklerini her zaman bilmelerini sağlayın.

Bunun tek seferlik bir işlem olmadığını unutmayın: Tarayıcı, depolama alanı baskısı nedeniyle veya yeni bir model sürümü kullanıma sunulduğunda modeli temizlerse tarayıcının modeli tekrar indirmesi gerekir. İster istemci tarafı ister hibrit yaklaşımı izleyin, kullanıcılarınız için mümkün olan en iyi deneyimi oluşturduğunuzdan emin olabilirsiniz. Geri kalan işlemler tarayıcı tarafından yapılır.