اختيار نموذج

تتيح لكم Prompt API اختيار إصدار Gemini Nano الذي يستخدمه تطبيقكم بشكل صريح. من خلال ضبط مرحلة إصدار النموذج والإعداد المفضّل للأداء، يمكنكم الوصول إلى إمكانات النموذج الجديدة في وقت مبكر أو تحسين تطبيقكم ليناسب قيود الأجهزة المحدّدة.

التعرّف على إعدادات النموذج

لاختيار نموذج معيّن، يجب ضبط مَعلمتَين رئيسيتَين ضِمن فئة ModelConfig: مرحلة الإصدار والإعداد المفضّل للنموذج.

مراحل الإصدار

تتيح لكم مرحلة الإصدار الاختيار بين نموذج ثابت أو نموذج معاينة:

  • الإصدار الثابت (ModelReleaseStage.STABLE): يختار أحدث إصدار من النموذج تم اختباره بالكامل ويتوفّر على الأجهزة الاستهلاكية. هذا هو الإعداد الافتراضي.
  • المعاينة (ModelReleaseStage.PREVIEW): يختار أحدث إصدار من النموذج في مرحلة المعاينة. تتيح لكم هذه المرحلة اختبار الميزات التجريبية أو بُنى النماذج الأحدث قبل نشرها على نطاق واسع في المرحلة الثابتة.

للاطّلاع على المتطلبات الأساسية وتعليمات التسجيل في معاينة المطوّر، يُرجى مراجعة دليل معاينة المطوّر لخدمة AICore.

الإعداد المفضّل للنموذج

يسمح لكم الإعداد المفضّل للنموذج بتحديد خصائص الأداء الأكثر أهمية لحالة الاستخدام.

  • كامل (ModelPreference.FULL): يُنصح بهذا الإعداد المفضّل عندما تكون دقة النموذج وإمكاناته الكاملة أكثر أهمية من السرعة.
  • سريع (ModelPreference.FAST): يُنصح بهذا الإعداد المفضّل للتطبيقات التي تتأثر بالمدة الزمنية التي يستغرقها الرد والتي تتطلب أوقات استجابة قصيرة.

ضبط النموذج التوليدي

لاستخدام نوع معيّن من النماذج، يجب تحديد ModelConfig وتمريره إلى GenerationConfig عند تهيئة العميل.

يوضّح المثال التالي كيفية ضبط العميل لاستخدام نموذج سريع من مرحلة المعاينة:

Kotlin

// Define the configuration with a specific stage and preference
val previewFastConfig = generationConfig {
    modelConfig = modelConfig {
        releaseStage = ModelReleaseStage.PREVIEW
        preference = ModelPreference.FAST
    }
}

// Initialize the GenerativeModel with the configuration
val generativeModel = Generation.getClient(previewFastConfig)

جافا

// Define the configuration with a specific stage and preference
GenerationConfig previewFastConfig = new GenerationConfig.Builder()
    .setModelConfig(new ModelConfig.Builder()
        .setReleaseStage(ModelReleaseStage.PREVIEW)
        .setPreference(ModelPreference.FAST)
        .build())
    .build();

// Initialize the GenerativeModel with the configuration
GenerativeModel generativeModel = Generation.INSTANCE.getClient(previewFastConfig);

التحقّق من توفّر النموذج

لا تتوافق بعض الأجهزة مع كل مجموعة من مرحلة الإصدار والإعداد المفضّل للنموذج. لا تتوفّر نماذج المعاينة إلا على الـ قائمة بالأجهزة المتوافقة في دليل معاينة المطوّر لخدمة AICore.

لا توفّر واجهة برمجة التطبيقات طريقة لعرض جميع إعدادات النموذج المتاحة مسبقًا. بدلاً من ذلك، يجب تهيئة العميل باستخدام الإعداد المطلوب ثم التحقّق من حالته.

  • تهيئة العميل: يمكنك إنشاء مثيل GenerativeModel باستخدام ModelConfig المفضّل.
  • التحقّق من الحالة: يمكنك استدعاء طريقة checkStatus() على المثيل للتحقّق من توفّر نوع النموذج المحدّد على الجهاز.

Kotlin

val generativeModel = Generation.getClient(previewFastConfig)

// Verify that the specific preview model is available
val status = generativeModel.checkStatus()

when (status) {
    FeatureStatus.UNAVAILABLE -> {
        // Specified preview model is not available on this device
    }
    FeatureStatus.DOWNLOADABLE -> {
        // Specified preview model is available for this device, but not downloaded yet.
        // Model may be downloaded through the AICore app or by calling generativeModel.download()
    }
    FeatureStatus.AVAILABLE -> {
        // Proceed with inference
    }
    FeatureStatus.DOWNLOADING -> {
        // Specified preview model is downloading
    }
}

جافا

GenerativeModel generativeModel = Generation.INSTANCE.getClient(previewFastConfig);

// For Java, use GenerativeModelFutures if you prefer ListenableFuture
GenerativeModelFutures generativeModelFutures = GenerativeModelFutures.from(generativeModel);
Futures.addCallback(
    generativeModelFutures.checkStatus(),
    new FutureCallback<Integer>() {
        @Override
        public void onSuccess(Integer status) {
            if (status == FeatureStatus.AVAILABLE) {
                // Proceed with inference
            } else if (status == FeatureStatus.DOWNLOADING) {
                // Specified preview model is downloading
            } else if (status == FeatureStatus.DOWNLOADABLE) {
                // Specified preview model is available for this device, but not downloaded yet.
                // Call generativeModelFutures.download(callback) or use the AICore app.
            } else if (status == FeatureStatus.UNAVAILABLE) {
                // Specified preview model is not available on this device
            }
        }

        @Override
        public void onFailure(Throwable t) {
            // Handle failure
        }
    },
    ContextCompat.getMainExecutor(context));

لضمان التوافق مع الإعدادات المحتملة في المستقبل، تم تصميم حزمة تطوير البرامج (SDK) لتجنُّب عرض GenAiException أثناء تهيئة العميل، والاعتماد فقط على طريقة checkStatus() للتحقّق من التوفّر.

أفضل الممارسات

  • تنفيذ استراتيجيات احتياطية: بما أنّه ليس من المضمون توفّر نماذج المعاينة على جميع الأجهزة، يجب دائمًا تنفيذ استراتيجية احتياطية. إذا عرضت طريقة checkStatus() القيمة false لإعداد المعاينة، يجب أن يعود تطبيقكم بسلاسة إلى ModelReleaseStage.STABLE وModelPreference.FULL.
  • استخدام مراحل إصدار النموذج لأغراض التطوير والإنتاج: يجب استخدام مرحلة المعاينة أثناء التطوير والاختبار الداخلي لتقييم التحسينات القادمة على النموذج. يجب التبديل إلى الإصدار الثابت لإصدارات الإنتاج العلنية لضمان سلوك متّسق للمستخدمين.

المشاكل المعروفة

  • بالنسبة إلى بعض الأجهزة في مرحلة إصدار المعاينة، لن تتيح هذه الأجهزة استخدام مرشّحين متعدّدين في الناتج وستعرض خطأ إذا تم ضبط candidateCount على قيمة أكبر من 1. لمزيد من التفاصيل، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات.
  • لا تتوافق بعض عمليات التنفيذ مع نماذج متعدّدة. سيكون الأداء أبطأ من أداء الإنتاج النهائي.