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


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

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

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

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

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

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

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

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

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

شروع کنید

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

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

همانطور که در این بخش توضیح داده شده است، توسعه را با استفاده از localhost شروع کنید (همچنین می‌توانید در مستندات Chrome درباره استفاده از APIها در localhost بیشتر بدانید). سپس، پس از پیاده‌سازی ویژگی خود، می‌توانید به صورت اختیاری به کاربران نهایی اجازه دهید تا ویژگی شما را امتحان کنند .

مرحله ۱ : کروم و 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 » را که می‌خواهید با Firebase AI Logic SDKs استفاده کنید، انتخاب کنید. Gemini Developer API برای کاربران تازه‌کار توصیه می‌شود. در صورت تمایل، همیشه می‌توانید بعداً صورتحساب را اضافه کنید یا Vertex AI Gemini API را راه‌اندازی کنید.

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

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

  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 خود کلیک کنید.

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

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

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

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

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

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

وقتی از PREFER_ON_DEVICE ، PREFER_IN_CLOUD یا ONLY_IN_CLOUD استفاده می‌کنید ، مدل پیش‌فرض میزبانی ابری به صورت زیر است: gemini-2.0-flash-lite ، اما می‌توانید پیش‌فرض را لغو کنید .

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
// Set the mode, for example to use on-device model when possible
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 برای پیکربندی SDK جهت استفاده از یک مدل روی دستگاه در صورت وجود، یا بازگشت به یک مدل میزبانی ابری استفاده کردند. SDK سه حالت استنتاج جایگزین ارائه می‌دهد: ONLY_ON_DEVICE ، ONLY_IN_CLOUD و PREFER_IN_CLOUD .

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

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

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });
    
  • از حالت PREFER_IN_CLOUD استفاده کنید تا SDK تلاش کند از مدل ابری استفاده کند، اما اگر مدل ابری در دسترس نباشد (مثلاً دستگاه آفلاین باشد) به مدل روی دستگاه بازگردد.

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_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.0-flash-lite .

این مدل، مدل پشتیبانِ مبتنی بر ابر است وقتی که از حالت 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

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

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

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

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


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