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


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

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

توجه داشته باشید که استنتاج روی دستگاه برای برنامه‌های وب که روی کروم دسکتاپ اجرا می‌شوند، پشتیبانی می‌شود.

پرش به مثال‌های کد

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

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

  • استفاده از یک مدل روی دستگاه برای استنتاج، موارد زیر را ارائه می‌دهد:

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

    • صرف نظر از مدل دستگاه یا اتصال به اینترنت، به ۱۰۰٪ مخاطبان خود دسترسی داشته باشید

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

قبل از اینکه شروع کنی

به موارد زیر توجه کنید:

شروع کار روی لوکال هاست

این مراحل شروع، تنظیمات کلی مورد نیاز برای هر درخواست پشتیبانی‌شده‌ای که می‌خواهید ارسال کنید را شرح می‌دهند.

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

  1. مطمئن شوید که از نسخه جدید کروم استفاده می‌کنید. آن را از طریق chrome://settings/help به‌روزرسانی کنید.
    استنتاج روی دستگاه از Chrome v139 و بالاتر در دسترس است.

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

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
  3. کروم را مجدداً راه‌اندازی کنید.

  4. (اختیاری) قبل از اولین درخواست، مدل روی دستگاه را دانلود کنید.

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

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

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

  2. در کنسول Firebase ، به صفحه منطق هوش مصنوعی فایربیس بروید.

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

  4. پروژه خود را طوری تنظیم کنید که از یک ارائه‌دهنده « Gemini API » استفاده کند.

    توصیه می‌کنیم برای شروع از رابط برنامه‌نویسی نرم‌افزار Gemini Developer API استفاده کنید. در هر مرحله، می‌توانید رابط برنامه‌نویسی نرم‌افزار Vertex AI Gemini (و الزامات آن برای صدور صورتحساب) را تنظیم کنید .

    برای Gemini Developer API ، کنسول APIهای مورد نیاز را فعال کرده و یک کلید API Gemini در پروژه شما ایجاد می‌کند.
    این کلید API مربوط به Gemini را به کدبیس برنامه خود اضافه نکنید . اطلاعات بیشتر.

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

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

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

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

  1. نصب Firebase JS SDK برای وب با استفاده از npm:

    npm install firebase
    
  2. مقداردهی اولیه فایربیس در برنامه شما:

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

مرحله ۴ : سرویس را مقداردهی اولیه کنید و یک نمونه مدل ایجاد کنید

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

قبل از ارسال درخواست سریع به مدل، موارد زیر را تنظیم کنید.

  1. سرویس را برای ارائه‌دهنده API انتخابی خود مقداردهی اولیه کنید.

  2. یک نمونه GenerativeModel ایجاد کنید. حتماً موارد زیر را انجام دهید:

    1. فراخوانی getGenerativeModel پس از یا در حین تعامل کاربر نهایی (مانند کلیک روی دکمه). این یک پیش‌نیاز برای inferenceMode است.

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

      • PREFER_ON_DEVICE : در صورت موجود بودن، از مدل روی دستگاه استفاده کنید؛ در غیر این صورت، به مدل میزبانی ابری برگردید .

      • ONLY_ON_DEVICE : در صورت موجود بودن، از مدل روی دستگاه استفاده می‌کند؛ در غیر این صورت، یک استثنا ایجاد می‌کند .

      • PREFER_IN_CLOUD : در صورت موجود بودن، از مدل میزبانی ابری استفاده کنید؛ در غیر این صورت، به مدل روی دستگاه برگردید .

      • ONLY_IN_CLOUD : در صورت موجود بودن، از مدل میزبانی ابری استفاده کنید؛ در غیر این صورت، یک استثنا ایجاد کنید .

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Call `getGenerativeModel` after or on an end-user interaction
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.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();

توجه داشته باشید که Firebase AI Logic از پخش پاسخ‌های متنی با استفاده از generateContentStream (به جای generateContent ) نیز پشتیبانی می‌کند.

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

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

شما می‌توانید از تابع 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();

توجه داشته باشید که Firebase AI Logic از پخش پاسخ‌های متنی با استفاده از generateContentStream (به جای generateContent ) نیز پشتیبانی می‌کند.

به کاربران نهایی اجازه دهید تا ویژگی شما را امتحان کنند

برای اینکه کاربران نهایی بتوانند ویژگی شما را در برنامه‌تان امتحان کنند، باید در نسخه آزمایشی Chrome Origin ثبت‌نام کنید . توجه داشته باشید که این نسخه‌های آزمایشی مدت زمان و میزان استفاده محدودی دارند.

  1. برای نسخه آزمایشی Prompt API Chrome Origin ثبت نام کنید. به شما یک توکن داده خواهد شد.

  2. این توکن را در هر صفحه وبی که می‌خواهید ویژگی آزمایشی برای آن فعال شود، ارائه دهید. از یکی از گزینه‌های زیر استفاده کنید:

    • توکن را به عنوان یک متا تگ در تگ <head> قرار دهید: <meta http-equiv="origin-trial" content=" TOKEN ">

    • توکن را به عنوان یک هدر HTTP ارائه دهید: Origin-Trial: TOKEN

    • توکن را به صورت برنامه‌نویسی شده ارائه دهید.

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

در این بخش، یاد بگیرید که چگونه یک حالت استنتاج تنظیم کنید ، مدل پشتیبان پیش‌فرض میزبانی ابری را نادیده بگیرید و از پیکربندی مدل برای کنترل پاسخ‌ها (مانند تولید خروجی ساختاریافته) استفاده کنید .

تنظیم حالت استنتاج

مثال‌های موجود در تنظیمات عمومی از حالت PREFER_ON_DEVICE استفاده می‌کنند، اما این تنها یکی از چهار حالت استنتاج موجود است.

  • PREFER_ON_DEVICE : در صورت موجود بودن، از مدل روی دستگاه استفاده کنید؛ در غیر این صورت، به مدل میزبانی ابری برگردید .

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
    
  • ONLY_ON_DEVICE : در صورت موجود بودن، از مدل روی دستگاه استفاده می‌کند؛ در غیر این صورت، یک استثنا ایجاد می‌کند .

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });
    
  • PREFER_IN_CLOUD : در صورت موجود بودن، از مدل میزبانی ابری استفاده کنید؛ در غیر این صورت، به مدل روی دستگاه برگردید .

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
    
  • ONLY_IN_CLOUD : در صورت موجود بودن، از مدل میزبانی ابری استفاده کنید؛ در غیر این صورت، یک استثنا ایجاد کنید .

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });
    

تعیین اینکه آیا از استنتاج درون دستگاهی یا درون ابری استفاده شده است

اگر از حالت‌های استنتاج PREFER_ON_DEVICE یا PREFER_IN_CLOUD استفاده می‌کنید، دانستن اینکه کدام حالت برای درخواست‌های داده شده استفاده شده است، می‌تواند مفید باشد. این اطلاعات توسط ویژگی inferenceSource هر پاسخ ارائه می‌شود (از JS SDK v12.5.0 به بعد در دسترس است).

وقتی به این ویژگی دسترسی پیدا می‌کنید، مقدار برگشتی یا ON_DEVICE یا IN_CLOUD خواهد بود.

// ...

console.log('You used: ' + result.response.inferenceSource);

console.log(result.response.text());

مدل پشتیبان پیش‌فرض را نادیده بگیرید

مدل پیش‌فرض میزبانی ابری به صورت زیر است: gemini-2.5-flash-lite (با شروع از JS SDK نسخه ۱۲.۸.۰).

این مدل، مدل پشتیبانِ مبتنی بر ابر است وقتی که از حالت PREFER_ON_DEVICE استفاده می‌کنید. همچنین مدل پیش‌فرض است وقتی که از حالت ONLY_IN_CLOUD یا حالت PREFER_IN_CLOUD استفاده می‌کنید.

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

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
  }
});

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

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

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

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

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

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

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
    temperature: 0.8,
    topK: 10
  }
});

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

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

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

const model = getGenerativeModel(ai, {
  mode: InferenceMode.INFERENCE_MODE,
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

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

تولید خروجی ساختاریافته (مانند 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: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "gemini-2.5-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
خروجی شمارشی

همانطور که در بالا ذکر شد، اما مستندات مربوط به خروجی 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

  • ارائه ابزارهایی به مدل برای کمک به تولید پاسخ (مانند فراخوانی تابع، اجرای کد، زمینه URL و اتصال به جستجوی گوگل)

  • تعداد توکن‌ها

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

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


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