گزینه‌های پیکربندی برای تجربه‌های ترکیبی در برنامه‌های 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 بازخورد ارائه دهید