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


Firebase AI Logic kullanarak karma çıkarımla yapay zeka destekli uygulamalar ve özellikler geliştirin. Karma çıkarım, varsa cihaz üzerinde modeller kullanılarak çıkarım yapılmasını ve aksi takdirde bulutta barındırılan modellere sorunsuz bir şekilde geri dönmeyi sağlar.

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

Kod örneklerine atlama

Önerilen kullanım alanları ve desteklenen özellikler

Önerilen kullanım alanları:

  • Cihaz üzerinde model kullanarak çıkarım yapmanın avantajları:

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

    • Cihazdaki modelin kullanılabilirliğinden bağımsız olarak kitlenizin% 100'üne erişme

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

  • Tek seferlik içerik oluşturma, akış ve akış dışı
  • Yalnızca metin girişinden metin oluşturma
  • Metin ve resim girişinden (özellikle JPEG ve PNG giriş resim türleri) metin oluşturma
  • JSON ve enum'lar dahil olmak üzere yapılandırılmış çıkış oluşturma

Başlayın

Bu kılavuzda, karma çıkarım yapmak için Firebase AI LogicWeb için SDK'yı nasıl kullanmaya başlayacağınız gösterilmektedir.

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

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

  1. En son Chrome Dev derlemesini indirin.

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

  2. Aşağıdaki işaretçileri 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.

    API'leri localhost'te kullanma hakkında daha fazla bilgiyi Chrome dokümanlarından edinebilirsiniz. İsteğe bağlı olarak, geri bildirimde bulunmak için Chrome'un Erken Önizleme Programı'na (EPP) katılabilirsiniz.

  3. Aşağıdaki işaretçiyi ayarlayarak cihaz üzerinde ç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ı > Konsolu 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();'u çalıştırarak model indirme işlemini başlatabilirsiniz. Aksi takdirde, cihaz üzerinde çıkarım için yapılan ilk istek arka planda bir model indirme işlemi 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, ardından Firebase projenizi seçin.

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

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

  4. Firebase AI Logic SDK'larıyla kullanmak istediğiniz"Gemini API" sağlayıcıyı seçin. İsterseniz daha sonra diğer API sağlayıcıyı ayarlayabilir ve kullanabilirsiniz.

    • Gemini Developer API: Faturalandırma isteğe bağlıdır (ücretsiz Spark fiyatlandırma planında kullanılabilir)
      Konsol, gerekli API'leri etkinleştirir ve projenizde bir Gemini API anahtarı oluşturur. Fiyatlandırma planınızı yükseltmek isterseniz faturalandırmayı daha sonra ayarlayabilirsiniz.

    • Vertex AI Gemini API: Faturalandırma gereklidir (Kullan-Öde Blaze fiyatlandırma planı gerekir)
      Console, faturalandırmayı ayarlamanıza ve projenizde gerekli API'leri etkinleştirmenize yardımcı olur.

  5. Konsolda 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ılavuzun bir sonraki adımına 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 edilmiştir.

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

    Karma özellik farklı bir npm etiketi altında yayınlandığından, yükleme komutunuza eklediğinizden emin olun.

    npm install firebase@eap-ai-hybridinference
    
  2. Firebase'i uygulamanızda 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 bir model örneği oluşturun

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

Bir 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 değerini aşağıdakilerden birine ayarlayın:

  • prefer_on_device: SDK'yı, mevcutsa 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 model kullanacak veya istisna atacak şekilde yapılandırır.

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

prefer_on_device veya only_in_cloud kullanırken varsayılan olarak Cloud'da barındırılan model gemini-2.0-flash-lite'dir ancak varsayılan ayarı 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, farklı türde çıkışlar oluşturmak için çeşitli türde girişlerin nasıl gönderileceğine dair örnekler verilmiştir. Örneğin:

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

Yalnızca metin girişinden metin oluşturma

Bu örneği denemeden önce bu kılavuzun Başlayın 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şlayın bölümünü tamamladığınızdan emin olun.

Metin ve resim dosyaları içeren bir istemden metin oluşturmak için generateContent() işlevini kullanabilirsiniz. Bunun için her giriş dosyasının mimeType değerini ve dosyayı sağlamanız gerekir.

Cihaz üzerinde çıkarım için desteklenen giriş resim 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 neler yapabilirsiniz?

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ı mevcutsa cihaz üzerinde bir model kullanacak veya bulutta barındırılan bir modele geri dönecek şekilde yapılandırmak 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 model yoksa API hata verir.

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • SDK'nın yalnızca bulutta barındırılan bir model 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 SDK, cihaz üzerinde model kullanılamıyorsa bulutta barındırılan bir model kullanmaya geri döner. Varsayılan yedek bulutta barındırılan model gemini-2.0-flash-lite'tür. Bu bulutta barındırılan model, only_in_cloud modunu kullandığınızda da varsayılan olarak kullanılır.

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.0-flash"
  }
});

Desteklenen tüm Gemini modellerinin model adlarını bulun.

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

Bir modele gönderilen her istekte, modelin nasıl yanıt oluşturacağını kontrol etmek için bir model yapılandırması gönderebilirsiniz. Cloud tarafından 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.0-flash"
    temperature: 0.8,
    topK: 10
  }
});

Cihaz üzerinde modelin yapılandırmasını ayarlama

Cihaz üzerinde model kullanarak çıkarım yapmanın Chrome'daki Prompt API'yi kullandığını unutmayın.

Cihaz üzerinde 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ırmayı yapılandırın

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

Karma çıkarım için hem inCloudParams hem de onDeviceParams kullanarak modeli yapılandırılmış çıkışla yanıt verecek şekilde yapılandırı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'yi belirtin.

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

JSON çıkışı

Aşağıdaki örnekte, genel JSON çıkışı örneği karma çıkarım için 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.0-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
Enum çıkışı

Yukarıdaki gibidir ancak enum çıkışıyla ilgili dokümanları karma çıkarım için uyarlayın:

// ...

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 olarak Web SDK'sının tüm özellikleri cihaz üzerinde çıkarım için kullanılamaz. Aşağıdaki özellikler cihaz üzerinde çıkarım için henüz desteklenmiyor (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 geçebilir 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 geçebilir ancak only_on_device modunda hata oluşur.
  • Gemini veya Imagen modellerini kullanarak resim oluşturma

    • Bulutta barındırılan modele geçebilir ancak only_on_device modunda hata oluşur.
  • Çok modlu isteklerde URL'leri kullanarak dosya sağlama Dosyaları cihaz üzerindeki modellere satır içi veri olarak sağlamanız gerekir.

  • Çoklu turlu sohbet

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

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

    • Çok yakında!
  • Jetonları sayma

    • Her zaman hata verir. Sayım, bulutta barındırılan ve cihaz üzerinde modeller arasında farklılık göstereceğinden sezgisel bir yedekleme yoktur.
  • Cihaz üzerinde çıkarım için Firebase konsolunda yapay zeka izleme.

    • Bulutta barındırılan modellerin kullanıldığı tüm çıkarımların, Firebase AI Logic Web için istemci SDK'sı kullanılan diğer çıkarımlarda olduğu gibi izlenebileceğini unutmayın.


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