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


این صفحه گزینه‌های پیکربندی زیر را برای تجربیات ترکیبی و روی دستگاه شرح می‌دهد:

مطمئن شوید که راهنمای شروع به کار برای ساخت تجربیات ترکیبی را تکمیل کرده‌اید.

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

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

استنتاج ترکیبی

  • استنتاج روی دستگاه را ترجیح دهید : primary را روی یک مدل «سیستمی» و secondary را روی یک مدل ابری تنظیم کنید.

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

    // Imports + initialization of Gemini API backend service
    // ...
    
    // Initialize a cloud model that supports your use case
    let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME")
    // Initialize an on-device model that supports your use case
    let systemModel = FirebaseAI.SystemLanguageModel.default
    
    // Create a GenerativeModelSession with a hybrid model.
    // Provide your preferred model as `primary` and your fallback model as `secondary`
    // Attempt to use the on-device model; otherwise, fall back to the cloud-hosted model.
    let session = ai.generativeModelSession(
      model: .hybridModel(primary: systemModel, secondary: cloudModel)
    )
    
  • استنتاج درون ابری را ترجیح می‌دهم : primary را روی یک مدل ابری و secondary را روی یک مدل «سیستمی» تنظیم می‌کنم.

    اگر دستگاه آنلاین است و مدل در دسترس است، سعی کنید از مدل میزبانی ابری استفاده کنید. اگر دستگاه آفلاین است، به مدل روی دستگاه برگردید . در تمام موارد دیگر خرابی، یک استثنا ایجاد کنید .

    // Imports + initialization of Gemini API backend service
    // ...
    
    // Initialize a cloud model that supports your use case
    let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME")
    // Initialize an on-device model that supports your use case
    let systemModel = FirebaseAI.SystemLanguageModel.default
    
    // Create a GenerativeModelSession with a hybrid model.
    // Provide your preferred model as `primary` and your fallback model as `secondary`
    // Attempt to use the cloud-hosted model; otherwise, fall back to the on-device model.
    let session = ai.generativeModelSession(
      model: .hybridModel(primary: cloudModel, secondary: systemModel)
    )
    

فقط استنتاج روی دستگاه یا فقط استنتاج درون ابری

SDK فقط از تنظیم یک model واحد پشتیبانی می‌کند، به این معنی که SDK فقط استنتاج روی دستگاه یا درون ابر را امتحان می‌کند. همچنین، برای این مورد استفاده، نیازی به ایجاد HybridModel ندارید. با این حال، برای یک تجربه ترکیبی ، باید یک HybridModel ایجاد کنید و هر دو مدل primary و secondary را تنظیم کنید (همانطور که در بالا توضیح داده شد).

  • فقط استنتاج روی دستگاه : model روی یک مدل "سیستمی" تنظیم کنید. برای این مورد استفاده، شما یک HybridModel ایجاد نمی‌کنید.

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

    // Imports + initialization of Gemini API backend service
    // ...
    
    // Initialize an on-device model that supports your use case
    let systemModel = FirebaseAI.SystemLanguageModel.default
    
    // Create a GenerativeModelSession with the on-device model.
    let session = ai.generativeModelSession(
      model: systemModel
    )
    
  • فقط استنتاج درون ابری : model روی یک مدل ابری تنظیم کنید. برای این مورد استفاده، نیازی به ایجاد HybridModel ندارید.

    اگر دستگاه آنلاین است و مدل در دسترس است، سعی کنید از مدل میزبانی ابری استفاده کنید. در غیر این صورت، یک استثنا ایجاد کنید .

    // Imports + initialization of Gemini API backend service
    // ...
    
    // Initialize a cloud model that supports your use case
    let cloudModel = ai.geminiModel(name: "GEMINI_MODEL_NAME")
    
    // Create a GenerativeModelSession with a cloud model.
    let session = ai.generativeModelSession(
      model: cloudModel
    )
    

بررسی کنید که آیا مدل روی دستگاه موجود است یا خیر

بررسی دستی در دسترس بودن روی دستگاه فقط در صورتی ضروری است که بخواهید آن اطلاعات را به کاربر نشان دهید یا از کاربران نهایی بخواهید که برای دانلود مدل روی دستگاه اقدام کنند. اگر مدل روی دستگاه در دسترس نباشد - و شما primary را روی یک مدل روی دستگاه و secondary را روی یک مدل ابری تنظیم کرده باشید - SDK به طور خودکار به استفاده از مدل میزبانی شده روی ابر بازمی‌گردد.

برای بررسی دستی اینکه آیا مدل روی دستگاه واقعاً قابل استفاده است یا خیر، ویژگی isAvailable را بررسی کنید:

if FirebaseAI.SystemLanguageModel.default.isAvailable {
  // The on-device model is ready to use.
} else {
  // The on-device model is unavailable.
}

برای بررسی دلایل خاص در دسترس بودن مدل روی دستگاه، ویژگی availability را بررسی کنید:

switch FirebaseAI.SystemLanguageModel.default.availability {
case .available:
  // The on-device model is ready to use.
  break
case .unavailable(.deviceNotEligible):
  // This device does not support Apple Intelligence.
  break
case .unavailable(.appleIntelligenceNotEnabled):
  // The user has not enabled Apple Intelligence in Settings.
  break
case .unavailable(.modelNotReady):
  // The model is still being downloaded.
  break
case let .unavailable(reason):
  // The model is unavailable due to the specified `reason`.
  break
}

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

اگر از یک HybridModel استفاده می‌کنید (و هر دو مدل primary و secondary را تنظیم می‌کنید)، دانستن اینکه کدام مدل برای یک درخواست مشخص استفاده شده است، می‌تواند مفید باشد. این اطلاعات توسط ویژگی modelVersion از rawResponse در هر پاسخ ارائه می‌شود.

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

  • مدل ابری مورد استفاده: نام مدل، برای مثال gemini-3.1-flash-lite
  • مدل مورد استفاده روی دستگاه: apple-foundation-models-system-language-model
// let response = try await session.respond(to: ...

print("You used: \(response.rawResponse.modelVersion)")

print(response.content)

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

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

  • مدل‌های میزبانی‌شده توسط ابر: پیکربندی آنها را در GenerationConfig تنظیم کنید.
  • مدل‌های روی دستگاه: پیکربندی آنها را در FirebaseAI.GenerationOptions تنظیم کنید.

این گزینه‌ها برای هر درخواست به مدل پیکربندی می‌شوند.

در اینجا مثالی آورده شده است که پیکربندی‌های مدل‌های میزبانی ابری و روی دستگاه را برای استنتاج ترکیبی تنظیم می‌کند:

// ...

let response = try await session.respond(
  to: "Why is the sky blue?",
  options: .hybrid(
    // Config for cloud-hosted model
    gemini: GenerationConfig(
      temperature: 0.8,
      topP: 0.9,
      thinkingConfig: ThinkingConfig(thinkingLevel: .high)
    ),
    // Config for on-device model
    foundationModels: FirebaseAI.GenerationOptions(
      sampling: .random(probabilityThreshold: 0.9),
      temperature: 0.8
    )
  )
)

// ...


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