تجربه‌های ترکیبی را با مدل‌های روی دستگاه و میزبانی ابری ایجاد کنید


با استفاده از Firebase AI Logic ، برنامه‌ها و ویژگی‌های مبتنی بر هوش مصنوعی را با استنتاج ترکیبی بسازید. استنتاج ترکیبی، اجرای استنتاج با استفاده از مدل‌های روی دستگاه را در صورت وجود امکان‌پذیر می‌سازد و در غیر این صورت به طور یکپارچه به مدل‌های میزبان ابری بازمی‌گردد.

با این نسخه، استنتاج ترکیبی با استفاده از Firebase AI Logic Client SDK برای وب با پشتیبانی از استنتاج روی دستگاه برای Chrome در دسک‌تاپ در دسترس است.

به نمونه کدها بروید

موارد استفاده توصیه شده و قابلیت های پشتیبانی شده

موارد استفاده توصیه شده:

  • استفاده از یک مدل روی دستگاه برای استنتاج پیشنهادات:

    • حریم خصوصی پیشرفته
    • بافت محلی
    • استنتاج بدون هزینه
    • قابلیت آفلاین
  • استفاده از عملکرد ترکیبی ارائه می دهد:

    • بدون توجه به در دسترس بودن مدل روی دستگاه، به 100٪ از مخاطبان خود دسترسی پیدا کنید

قابلیت ها و ویژگی های پشتیبانی شده برای استنتاج روی دستگاه:

  • تولید محتوای تک نوبتی، پخش جریانی و بدون جریان
  • تولید متن از ورودی فقط متنی
  • تولید متن از ورودی متن و تصویر، مخصوصاً انواع تصویر ورودی JPEG و PNG
  • تولید خروجی ساختاریافته، از جمله JSON و enums

شروع کنید

این راهنما به شما نشان می دهد که چگونه با استفاده از Firebase AI Logic SDK برای وب برای انجام استنتاج ترکیبی شروع کنید.

استنتاج با استفاده از مدل روی دستگاه از Prompt API Chrome استفاده می‌کند. در حالی که استنتاج با استفاده از یک مدل میزبان ابری از ارائه‌دهنده API Gemini انتخابی شما (یا Gemini Developer API یا Vertex AI Gemini API ) استفاده می‌کند.

مرحله 1 : Chrome و Prompt API را برای استنتاج روی دستگاه تنظیم کنید

  1. آخرین ساخت Chrome Dev را دانلود کنید.

    استنتاج روی دستگاه از Chrome نسخه 138 و بالاتر در دسترس است.

  2. با تنظیم پرچم‌های زیر، Prompt API را برای نمونه Chrome خود فعال کنید:

    • chrome://flags/#optimization-guide-on-device-model : روی Enabled تنظیم کنید.
    • chrome://flags/#prompt-api-for-gemini-nano : روی Enabled تنظیم کنید.

    درباره استفاده از APIها در لوکال هاست در اسناد Chrome اطلاعات بیشتری کسب کنید. در صورت تمایل، برای ارائه بازخورد به برنامه پیش‌نمایش اولیه Chrome (EPP) بپیوندید.

  3. با تنظیم پرچم زیر، مدل چندوجهی روی دستگاه را فعال کنید:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input : روی Enabled تنظیم کنید.
  4. API را به صورت محلی تأیید کنید:

    1. کروم را مجددا راه اندازی کنید.

    2. Developer Tools > Console را باز کنید.

    3. موارد زیر را اجرا کنید:

      await LanguageModel.availability();
      
    4. اطمینان حاصل کنید که خروجی available باشد، downloading یا downloadable . .

    5. اگر خروجی downloadable است، می توانید دانلود مدل را با اجرای await LanguageModel.create(); . در غیر این صورت، اولین درخواست برای استنتاج روی دستگاه، دانلود مدل را در پس‌زمینه شروع می‌کند که ممکن است چند دقیقه طول بکشد.

مرحله 2 : یک پروژه Firebase را راه اندازی کنید و برنامه خود را به Firebase متصل کنید

  1. وارد کنسول Firebase شوید و سپس پروژه Firebase خود را انتخاب کنید.

  2. در کنسول Firebase ، به صفحه Firebase AI Logic بروید.

  3. برای راه‌اندازی یک گردش کار هدایت‌شده که به شما کمک می‌کند APIها و منابع مورد نیاز پروژه خود را تنظیم کنید، روی Get Start کلیک کنید.

  4. ارائه‌دهنده « Gemini API » را که می‌خواهید با Firebase AI Logic SDK استفاده کنید، انتخاب کنید. اگر بخواهید، همیشه می‌توانید بعداً ارائه‌دهنده API دیگر را راه‌اندازی کرده و از آن استفاده کنید.

    • Gemini Developer APIصورت‌حساب اختیاری (در طرح قیمت‌گذاری بدون هزینه Spark موجود است)
      کنسول API های مورد نیاز را فعال می کند و یک کلید API Gemini در پروژه شما ایجاد می کند.
      این کلید Gemini API را به پایگاه کد برنامه خود اضافه نکنید . بیشتر بدانید.

      اگر می‌خواهید طرح قیمت‌گذاری خود را ارتقا دهید، می‌توانید بعداً صورت‌حساب را تنظیم کنید.

    • Vertex AI Gemini API - صورت‌حساب مورد نیاز است (به طرح قیمت‌گذاری Blaze نیاز دارد)
      کنسول به شما کمک می کند تا صورتحساب را تنظیم کنید و API های مورد نیاز را در پروژه خود فعال کنید.

  5. اگر در گردش کار کنسول از شما خواسته شد، دستورالعمل‌های روی صفحه را دنبال کنید تا برنامه خود را ثبت کرده و به Firebase متصل کنید.

  6. برای افزودن SDK به برنامه خود، مرحله بعدی این راهنما را ادامه دهید.

مرحله 3 : SDK را اضافه کنید

کتابخانه Firebase دسترسی به API ها را برای تعامل با مدل های تولیدی فراهم می کند. این کتابخانه به عنوان بخشی از Firebase JavaScript SDK برای وب گنجانده شده است.

  1. Firebase JS SDK for Web را با استفاده از npm نصب کنید.

    ویژگی ترکیبی تحت یک تگ npm متفاوت منتشر می شود، بنابراین مطمئن شوید که آن را در دستور نصب خود قرار دهید.

    npm install firebase@eap-ai-hybridinference
    
  2. Firebase را در برنامه خود راه اندازی کنید:

    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 : سرویس را راه اندازی کنید و یک نمونه مدل ایجاد کنید

برای مشاهده محتوا و کد ارائه دهنده خاص در این صفحه، روی ارائه دهنده API Gemini خود کلیک کنید.

قبل از ارسال درخواست به یک مدل Gemini ، سرویس را برای ارائه دهنده API انتخابی خود راه اندازی کنید و یک نمونه GenerativeModel ایجاد کنید.

mode روی یکی از موارد زیر تنظیم کنید:

  • prefer_on_device : SDK را به گونه ای پیکربندی می کند که از مدل روی دستگاه در صورت موجود بودن استفاده کند، یا به مدل میزبان ابری برگردد.

  • only_on_device : SDK را برای استفاده از مدل روی دستگاه یا ایجاد یک استثنا پیکربندی می کند.

  • only_in_cloud : SDK را طوری پیکربندی می کند که هرگز از مدل روی دستگاه استفاده نکند.

به‌طور پیش‌فرض وقتی از prefer_on_device یا only_in_cloud استفاده می‌کنید، مدل میزبان ابری gemini-2.0-flash-lite است، اما می‌توانید پیش‌فرض را لغو کنید .

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

یک درخواست سریع به یک مدل ارسال کنید

این بخش مثال هایی برای نحوه ارسال انواع ورودی برای تولید انواع مختلف خروجی ارائه می دهد، از جمله:

اگر می‌خواهید خروجی ساختاریافته (مانند JSON یا enums) تولید کنید، از یکی از مثال‌های «تولید متن» زیر استفاده کنید و به‌علاوه مدل را پیکربندی کنید تا مطابق طرح ارائه شده پاسخ دهد .

متن را از ورودی فقط متنی تولید کنید

قبل از امتحان این نمونه، مطمئن شوید که بخش شروع این راهنما را تکمیل کرده اید.

شما می توانید از generateContent() برای تولید متن از دستوری که حاوی متن است استفاده کنید:

// 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();

متن را از ورودی متن و تصویر (چند وجهی) تولید کنید

قبل از امتحان این نمونه، مطمئن شوید که بخش شروع این راهنما را تکمیل کرده اید.

شما می‌توانید از generateContent() برای تولید متن از دستوری که حاوی فایل‌های متنی و تصویری است استفاده کنید—که mimeType هر فایل ورودی و خود فایل را ارائه می‌کند.

انواع تصویر ورودی پشتیبانی شده برای استنتاج روی دستگاه PNG و JPEG هستند.

// 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();

چه کار دیگری می توانید انجام دهید؟

علاوه بر مثال‌های بالا، می‌توانید از حالت‌های استنتاج جایگزین نیز استفاده کنید ، مدل بازگشتی پیش‌فرض را لغو کنید ، و از پیکربندی مدل برای کنترل پاسخ‌ها استفاده کنید .

از حالت های استنتاج جایگزین استفاده کنید

مثال‌های بالا از حالت prefer_on_device برای پیکربندی SDK استفاده می‌کردند تا در صورت موجود بودن از یک مدل روی دستگاه استفاده کند، یا به مدل میزبانی ابری بازگردد. SDK دو حالت استنتاج جایگزین ارائه می دهد: only_on_device و only_in_cloud .

  • از حالت only_on_device استفاده کنید تا SDK فقط بتواند از یک مدل روی دستگاه استفاده کند. در این پیکربندی، اگر یک مدل روی دستگاه در دسترس نباشد، API با خطا مواجه می‌شود.

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • از حالت only_in_cloud استفاده کنید تا SDK فقط بتواند از یک مدل میزبان ابری استفاده کند.

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

مدل بازگشتی پیش‌فرض را لغو کنید

هنگامی که از حالت prefer_on_device استفاده می‌کنید، در صورتی که مدل روی دستگاه در دسترس نباشد، SDK دوباره به استفاده از مدل میزبان ابری می‌رود. مدل پیش‌فرض میزبان ابری بازگشتی gemini-2.0-flash-lite است. وقتی از حالت only_in_cloud استفاده می‌کنید، این مدل میزبان ابری نیز پیش‌فرض است.

می توانید از گزینه پیکربندی inCloudParams برای تعیین یک مدل جایگزین پیش فرض میزبان ابری استفاده کنید:

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

نام مدل ها را برای همه مدل های جمینی پشتیبانی شده پیدا کنید.

از پیکربندی مدل برای کنترل پاسخ ها استفاده کنید

در هر درخواست به یک مدل، می‌توانید پیکربندی مدل را برای کنترل نحوه ایجاد پاسخ توسط مدل ارسال کنید. مدل‌های میزبان ابری و مدل‌های روی دستگاه گزینه‌های پیکربندی مختلفی را ارائه می‌کنند.

پیکربندی برای تمام طول عمر نمونه حفظ می شود. اگر می خواهید از پیکربندی متفاوتی استفاده کنید، یک نمونه GenerativeModel جدید با آن پیکربندی ایجاد کنید.

پیکربندی را برای یک مدل میزبان ابری تنظیم کنید

از گزینه inCloudParams برای پیکربندی مدل Gemini میزبان ابر استفاده کنید. با پارامترهای موجود آشنا شوید.

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

پیکربندی را برای یک مدل روی دستگاه تنظیم کنید

توجه داشته باشید که استنتاج با استفاده از مدل روی دستگاه از Prompt API Chrome استفاده می‌کند.

از گزینه onDeviceParams برای پیکربندی مدل روی دستگاه استفاده کنید. با پارامترهای موجود آشنا شوید.

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

پیکربندی را برای خروجی ساختاریافته تنظیم کنید

تولید خروجی ساختاریافته (مانند JSON و enums) برای استنتاج با استفاده از مدل‌های میزبان ابری و روی دستگاه پشتیبانی می‌شود.

برای استنتاج ترکیبی، از inCloudParams و onDeviceParams برای پیکربندی مدل برای پاسخگویی با خروجی ساختاریافته استفاده کنید. برای حالت های دیگر، فقط از پیکربندی قابل اجرا استفاده کنید.

  • برای inCloudParams : responseMimeType مناسب (در این مثال application/json ) و همچنین responseSchema که می خواهید مدل استفاده کند را مشخص کنید.

  • برای onDeviceParams : responseConstraint را که می خواهید مدل استفاده کند را مشخص کنید.

خروجی JSON

مثال زیر نمونه کلی خروجی JSON را برای استنتاج ترکیبی تطبیق می دهد:

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

همانطور که در بالا ذکر شد، اما با تطبیق مستندات مربوط به خروجی enum برای استنتاج ترکیبی:

// ...

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

const model = getGenerativeModel(ai, {

// ...

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

// ...

ویژگی‌هایی که هنوز برای استنتاج روی دستگاه در دسترس نیستند

به عنوان یک نسخه آزمایشی، همه قابلیت‌های Web SDK برای استنتاج روی دستگاه در دسترس نیستند. ویژگی‌های زیر هنوز برای استنتاج روی دستگاه پشتیبانی نمی‌شوند (اما معمولاً برای استنتاج مبتنی بر ابر در دسترس هستند).

  • تولید متن از انواع ورودی فایل تصویری غیر از JPEG و PNG

    • می تواند به مدل میزبانی ابری بازگردد. با این حال، حالت only_on_device یک خطا ایجاد می کند.
  • تولید متن از ورودی های صوتی، تصویری و اسناد (مانند فایل های PDF).

    • می تواند به مدل میزبانی ابری بازگردد. با این حال، حالت only_on_device یک خطا ایجاد می کند.
  • تولید تصاویر با استفاده از مدل های Gemini یا Imagen

    • می تواند به مدل میزبانی ابری بازگردد. با این حال، حالت only_on_device یک خطا ایجاد می کند.
  • ارائه فایل ها با استفاده از URL در درخواست های چندوجهی. باید فایل‌ها را به‌عنوان داده‌های درون خطی به مدل‌های روی دستگاه ارائه کنید.

  • چت چند نوبتی

    • می تواند به مدل میزبانی ابری بازگردد. با این حال، حالت only_on_device یک خطا ایجاد می کند.
  • پخش جریانی دو جهته با Gemini Live API

    • توجه داشته باشید که این مورد توسط Firebase AI Logic Client SDK برای وب حتی برای مدل‌های میزبان ابری پشتیبانی نمی‌شود.
  • فراخوانی تابع

    • به زودی!
  • توکن ها را بشمار

    • همیشه خطا می دهد. شمارش بین مدل‌های میزبان ابری و مدل‌های روی دستگاه متفاوت است، بنابراین هیچ بازگشتی بصری وجود ندارد.
  • نظارت بر هوش مصنوعی در کنسول Firebase برای استنتاج روی دستگاه.

    • توجه داشته باشید که هر استنتاجی با استفاده از مدل‌های میزبان ابری می‌تواند درست مانند دیگر استنتاج‌ها با استفاده از Firebase AI Logic Client SDK برای وب نظارت شود.


درباره تجربه خود با Firebase AI Logic بازخورد بدهید