Cihaz üzerinde ve bulutta barındırılan modellerle karma deneyimler oluşturun


Firebase AI Logic kullanarak hibrit çıkarımla yapay zeka destekli uygulamalar ve özellikler geliştirin. Karma çıkarım, varsa cihazdaki modelleri kullanarak çıkarım yapmanıza ve aksi takdirde bulutta barındırılan modellere sorunsuz bir şekilde geri dönmenize olanak tanır.

Bu sürümle birlikte, masaüstünde Chrome için cihaz üzerinde çıkarım desteği sunan Firebase AI Logic Web istemci SDK'sı kullanılarak karma çıkarım yapılabilir.

Kod örneklerine git

Önerilen kullanım alanları ve desteklenen özellikler

Önerilen kullanım alanları:

  • Çıkarım için cihaz üzerinde model kullanma:

    • Gelişmiş gizlilik
    • Yerel bağlam
    • Ücretsiz çıkarım
    • Çevrimdışı işlevler
  • Karma işlevsellik tekliflerini kullanma:

    • Cihaz modelinin kullanılabilirliğinden bağımsız olarak kitlenizin% 100'üne ulaşın

Cihaz üzerinde çıkarım için desteklenen özellikler:

  • Tek dönüşlü içerik üretimi, akış ve akış dışı
  • Yalnızca metin içeren girişlerden metin oluşturma
  • Metin ve resim girişinden metin oluşturma (özellikle JPEG ve PNG giriş resim türleri)
  • JSON ve numaralandırmalar da dahil olmak üzere yapılandırılmış çıkış oluşturma

Başlayın

Bu kılavuzda, hibrit çıkarım gerçekleştirmek için Firebase AI Logic Web için SDK'yı kullanmaya nasıl başlayacağınız gösterilmektedir.

Cihaz üzerinde model kullanılarak çıkarım yapılırken Chrome'daki Prompt API kullanılır. Bulutta barındırılan model kullanılarak çıkarım yapılırken ise seçtiğiniz Gemini API sağlayıcı (Gemini Developer API veya Vertex AI Gemini API) kullanılır.

1. adım: Cihaz üzerinde çıkarım için Chrome'u ve Prompt API'yi ayarlayın

  1. En son Chrome Beta derlemesini indirin.

    Cihaz üzerinde çıkarım, Chrome 138 ve sonraki sürümlerde kullanılabilir.

  2. Aşağıdaki işaretleri ayarlayarak Chrome örneğiniz için Prompt API'yi etkinleştirin:

    • chrome://flags/#optimization-guide-on-device-model: Etkin olarak ayarlayın.
    • chrome://flags/#prompt-api-for-gemini-nano: Etkin olarak ayarlayın.

    Chrome dokümanlarında localhost'ta API kullanma hakkında daha fazla bilgi edinin. İsteğe bağlı olarak, geri bildirimde bulunmak için Chrome'un Erken Erişim Programı'na (EPP) katılın.

  3. Aşağıdaki işareti ayarlayarak cihaz üzerindeki çok formatlı modeli etkinleştirin:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input: Etkin olarak ayarlayın.
  4. API'yi yerel olarak doğrulayın:

    1. Chrome'u yeniden başlatın.

    2. Geliştirici Araçları > Konsol'u açın.

    3. Aşağıdaki komutu çalıştırın:

      await LanguageModel.availability();
      
    4. Çıkışın available, downloading veya downloadable olduğundan emin olun. .

    5. Çıkış downloadable ise await LanguageModel.create(); komutunu çalıştırarak model indirme işlemini başlatabilirsiniz. Aksi takdirde, cihaz üzerinde çıkarım için yapılan ilk istek, arka planda model indirme işlemini başlatır. Bu işlem birkaç dakika sürebilir.

2. adım: Firebase projesi oluşturun ve uygulamanızı Firebase'e bağlayın

  1. Firebase konsolunda oturum açın ve Firebase projenizi seçin.

  2. Firebase konsolunda Firebase AI Logic sayfasına gidin.

  3. Projeniz için gerekli API'leri ve kaynakları ayarlamanıza yardımcı olacak rehberli bir iş akışı başlatmak için Başlayın'ı tıklayın.

  4. Firebase AI Logic SDK'ları ile kullanmak istediğiniz"Gemini API" sağlayıcısını seçin. İsterseniz diğer API sağlayıcıyı daha sonra istediğiniz zaman kurup kullanabilirsiniz.

    • Gemini Developer APIbilling optional (ücretsiz Spark fiyatlandırma planında kullanılabilir ve isterseniz daha sonra yükseltebilirsiniz)
      Konsol, gerekli API'leri etkinleştirir ve projenizde bir Gemini API anahtarı oluşturur.
      Bu Gemini API anahtarını uygulamanızın kod tabanına eklemeyin. Daha fazla bilgi edinin.

    • Vertex AI Gemini APIfaturalandırma gerekir (kullandıkça öde Blaze fiyatlandırma planı gerekir)
      Konsol, faturalandırmayı ayarlamanıza ve projenizde gerekli API'leri etkinleştirmenize yardımcı olur.

  5. Konsolun iş akışında istenirse uygulamanızı kaydetmek ve Firebase'e bağlamak için ekrandaki talimatları uygulayın.

  6. SDK'yı uygulamanıza eklemek için bu kılavuzdaki sonraki adıma geçin.

3. adım: SDK'yı ekleyin

Firebase kitaplığı, üretken modellerle etkileşim kurmak için API'lere erişim sağlar. Kitaplık, web için Firebase JavaScript SDK'sının bir parçası olarak dahil edilir.

  1. npm kullanarak web için Firebase JS SDK'sını yükleyin.

    Karma özellik farklı bir npm etiketi altında yayınlanır. Bu nedenle, yükleme komutunuza bu etiketi eklediğinizden emin olun.

    npm install firebase@eap-ai-hybridinference
    
  2. Uygulamanızda Firebase'i başlatın:

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

4. adım: Hizmeti başlatın ve model örneği oluşturun

Bu sayfada sağlayıcıya özel içerikleri ve kodu görüntülemek için Gemini API sağlayıcınızı tıklayın.

Gemini modeline istem göndermeden önce, seçtiğiniz API sağlayıcısı için hizmeti başlatın ve bir GenerativeModel örneği oluşturun.

mode özelliğini aşağıdakilerden birine ayarlayın:

  • prefer_on_device: SDK'yı, varsa cihaz üzerinde modeli kullanacak veya bulutta barındırılan modele geri dönecek şekilde yapılandırır.

  • only_on_device: SDK'yı cihaz üzerinde modeli kullanacak veya istisna oluşturacak şekilde yapılandırır.

  • only_in_cloud: SDK'yı cihaz üzerinde modeli hiçbir zaman kullanmayacak şekilde yapılandırır.

prefer_on_device veya only_in_cloud kullandığınızda varsayılan olarak Cloud'da barındırılan model gemini-2.0-flash-lite olur ancak varsayılanı geçersiz kılabilirsiniz.

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });

Bir modele istem isteği gönderme

Bu bölümde, aşağıdakiler de dahil olmak üzere farklı türlerde çıkışlar oluşturmak için çeşitli giriş türlerinin nasıl gönderileceğine dair örnekler verilmektedir:

Yapılandırılmış çıkış (ör. JSON veya numaralandırmalar) oluşturmak istiyorsanız aşağıdaki "metin oluşturma" örneklerinden birini kullanın ve modeli, sağlanan şemaya göre yanıt verecek şekilde yapılandırın.

Yalnızca metin içeren girişlerden metin oluşturma

Bu örneği denemeden önce bu kılavuzun Başlarken bölümünü tamamladığınızdan emin olun.

Metin içeren bir istemden metin oluşturmak için generateContent() kullanabilirsiniz:

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  const prompt = "Write a story about a magic backpack."

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(prompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Metin ve resim (çok formatlı) girişinden metin oluşturma

Bu örneği denemeden önce bu kılavuzun Başlarken bölümünü tamamladığınızdan emin olun.

generateContent() ile metin ve resim dosyaları içeren bir istemden metin oluşturabilir, her giriş dosyasının mimeType ve dosyanın kendisini sağlayabilirsiniz.

Cihaz üzerinde çıkarım için desteklenen giriş resmi türleri PNG ve JPEG'dir.

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the image
  const prompt = "Write a poem about this picture:";

  const fileInputEl = document.querySelector("input[type=file]");
  const imagePart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call `generateContent` with the text and image
  const result = await model.generateContent([prompt, imagePart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Başka ne yapabilirsin?

Yukarıdaki örneklere ek olarak, alternatif çıkarım modlarını kullanabilir, varsayılan yedek modeli geçersiz kılabilir ve yanıtları kontrol etmek için model yapılandırmasını kullanabilirsiniz.

Alternatif çıkarım modlarını kullanma

Yukarıdaki örneklerde, SDK'yı yapılandırarak varsa cihaz üzerinde bir model kullanacak veya bulutta barındırılan bir modele geri dönecek şekilde ayarlamak için prefer_on_device modu kullanılmıştır. SDK, iki alternatif çıkarım modu sunar: only_on_device ve only_in_cloud.

  • SDK'nın yalnızca cihaz üzerinde bir model kullanabilmesi için only_on_device modunu kullanın. Bu yapılandırmada, cihaz üzerinde bir model kullanılamıyorsa API hata verir.

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • SDK'nın yalnızca bulutta barındırılan bir modeli kullanabilmesi için only_in_cloud modunu kullanın.

    const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
    

Varsayılan yedek modeli geçersiz kılma

prefer_on_device modunu kullandığınızda, cihazda model yoksa SDK bulutta barındırılan bir modeli kullanmaya geri döner. Varsayılan yedek bulutta barındırılan model gemini-2.0-flash-lite'dır. Bu Cloud'da barındırılan model, only_in_cloud modunu kullandığınızda da varsayılan modeldir.

Alternatif bir varsayılan bulutta barındırılan model belirtmek için inCloudParams yapılandırma seçeneğini kullanabilirsiniz:

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.5-flash"
  }
});

Desteklenen tüm Gemini modellerinin model adlarını öğrenin.

Yanıtları kontrol etmek için model yapılandırmasını kullanma

Bir modele gönderdiğiniz her istekle birlikte, modelin nasıl yanıt oluşturacağını kontrol etmek için bir model yapılandırması gönderebilirsiniz. Cloud'da barındırılan modeller ve cihaz üzerinde modeller farklı yapılandırma seçenekleri sunar.

Yapılandırma, örneğin kullanım ömrü boyunca korunur. Farklı bir yapılandırma kullanmak istiyorsanız bu yapılandırmayla yeni bir GenerativeModel örneği oluşturun.

Bulutta barındırılan bir modelin yapılandırmasını ayarlama

Bulutta barındırılan bir Gemini modelini yapılandırmak için inCloudParams seçeneğini kullanın. Kullanılabilir parametreler hakkında bilgi edinin.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.5-flash"
    temperature: 0.8,
    topK: 10
  }
});

Cihaz üzerinde model için yapılandırmayı ayarlama

Cihaz üzerinde model kullanılarak yapılan çıkarımlarda Chrome'daki istem API'sinin kullanıldığını unutmayın.

Cihaz üzerinde bir model yapılandırmak için onDeviceParams seçeneğini kullanın. Kullanılabilir parametreler hakkında bilgi edinin.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

Yapılandırılmış çıkış için yapılandırmayı ayarlama

Hem bulutta barındırılan hem de cihaz üzerinde modeller kullanılarak çıkarım için yapılandırılmış çıkış (ör. JSON ve enum) oluşturma desteklenir.

Hibrit çıkarım için modeli yapılandırılmış çıkışla yanıt verecek şekilde ayarlamak üzere hem inCloudParams hem de onDeviceParams kullanın. Diğer modlar için yalnızca geçerli yapılandırmayı kullanın.

  • inCloudParams için: Uygun responseMimeType'ü (bu örnekte application/json) ve modelin kullanmasını istediğiniz responseSchema'ı belirtin.

  • onDeviceParams için: Modelin kullanmasını istediğiniz responseConstraint değerini belirtin.

JSON çıkışı

Aşağıdaki örnekte, hibrit çıkarım için genel JSON çıkışı örneği uyarlanmıştır:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.5-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
Enum çıkışı

Yukarıdakiyle aynıdır ancak karma çıkarım için enum çıkışıyla ilgili dokümanlar uyarlanır:

// ...

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {

// ...

    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },

// ...

Cihaz üzerinde çıkarım için henüz kullanılamayan özellikler

Deneysel bir sürüm olduğundan Web SDK'sının tüm özellikleri cihaz üzerinde çıkarım için kullanılamaz. Aşağıdaki özellikler henüz cihaz üzerinde çıkarım için desteklenmemektedir (ancak genellikle bulut tabanlı çıkarım için kullanılabilir).

  • JPEG ve PNG dışındaki resim dosyası giriş türlerinden metin oluşturma

    • Bulutta barındırılan modele geri dönebilir ancak only_on_device modunda hata oluşur.
  • Ses, video ve doküman (ör. PDF) girişlerinden metin oluşturma

    • Bulutta barındırılan modele geri dönebilir ancak only_on_device modunda hata oluşur.
  • Gemini veya Imagen modellerini kullanarak resim oluşturma

    • Bulutta barındırılan modele geri dönebilir ancak only_on_device modunda hata oluşur.
  • Çok formatlı isteklerde URL'ler kullanarak dosya sağlama Dosyaları, cihaz üzerindeki modellere satır içi veri olarak sağlamanız gerekir.

  • Çok adımlı sohbet

    • Bulutta barındırılan modele geri dönebilir ancak only_on_device modunda hata oluşur.
  • Gemini Live API ile iki yönlü yayın

    • Bu özelliğin, Firebase AI Logic Web için istemci SDK'sı tarafından bulutta barındırılan modellerde bile desteklenmediğini unutmayın.
  • İşlev çağırma

    • Çok yakında!
  • Parça sayma

    • Her zaman hata veriyor. Sayım, bulutta barındırılan ve cihaz üzerinde modeller arasında farklılık gösterir. Bu nedenle sezgisel bir geri dönüş yoktur.
  • Cihaz üzerinde çıkarım için Firebase konsolunda yapay zeka izleme

    • Bulutta barındırılan modeller kullanılarak yapılan tüm çıkarımların, Firebase AI Logic web için istemci SDK'sı kullanılarak yapılan diğer çıkarımlar gibi izlenebileceğini unutmayın.


Firebase AI Logic ile ilgili deneyiminiz hakkında geri bildirim verme