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


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

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

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

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

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

  • ترجیح استنتاج درون‌دستگاهی: 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)
    )
    

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

کیت توسعه نرم‌افزار از تنظیم فقط یک model پشتیبانی می‌کند، یعنی کیت توسعه نرم‌افزار فقط استنتاج درون‌دستگاهی یا ابری را امتحان خواهد کرد. همچنین، برای این مورد استفاده، 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 را روی مدل ابری تنظیم کرده باشید – در این صورت، کیت توسعه نرم‌افزار به‌طور خودکار به استفاده از مدل میزبانی‌شده در ابر بازمی‌گردد.

برای بررسی دستی اینکه آیا مدل درون‌دستگاهی واقعاً قابل‌استفاده است یا نه، ویژگی 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 بازخورد ارائه دهید