یک مدل انتخاب کنید

رابط برنامه‌نویسی کاربردی Prompt به شما امکان می‌دهد نسخه Gemini Nano مورد استفاده برنامه خود را به طور صریح انتخاب کنید. با پیکربندی مرحله انتشار مدل و اولویت عملکرد، می‌توانید زودتر به قابلیت‌های مدل جدید دسترسی پیدا کنید یا برنامه خود را برای محدودیت‌های سخت‌افزاری خاص بهینه کنید.

پیکربندی‌های مدل را درک کنید

برای انتخاب یک مدل خاص، باید دو پارامتر کلیدی را در کلاس ModelConfig پیکربندی کنید: مرحله انتشار و ترجیح مدل .

مراحل انتشار

مرحله انتشار به شما امکان می‌دهد بین یک مدل پایدار یا پیش‌نمایش یکی را انتخاب کنید:

  • پایدار ( ModelReleaseStage.STABLE ): آخرین نسخه مدل را که کاملاً آزمایش شده و روی دستگاه‌های مصرف‌کننده است، انتخاب می‌کند. این تنظیم پیش‌فرض است.
  • پیش‌نمایش ( ModelReleaseStage.PREVIEW ): آخرین نسخه مدل را در مرحله پیش‌نمایش انتخاب می‌کند. این مرحله به شما امکان می‌دهد ویژگی‌های بتا یا معماری‌های مدل جدیدتر را قبل از استقرار گسترده در مرحله پایدار، آزمایش کنید.

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

ترجیح مدل

ترجیح مدل به شما امکان می‌دهد مشخص کنید کدام ویژگی‌های عملکردی برای مورد استفاده شما از همه مهم‌تر هستند.

  • کامل ( ModelPreference.FULL ): این ترجیح زمانی توصیه می‌شود که دقت مدل و قابلیت‌های کامل بر سرعت اولویت داشته باشند.
  • سریع ( ModelPreference.FAST ): این ترجیح برای برنامه‌های حساس به تأخیر که به حداقل زمان پاسخگویی نیاز دارند، توصیه می‌شود.

پیکربندی مدل مولد

برای استفاده از یک نوع مدل خاص، باید یک ModelConfig تعریف کنید و هنگام مقداردهی اولیه کلاینت، آن را به GenerationConfig خود منتقل کنید.

مثال زیر نحوه پیکربندی کلاینت برای استفاده از یک مدل Fast از مرحله Preview را نشان می‌دهد:

کاتلین

// 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 موجود هستند.

این API روشی برای فهرست کردن تمام پیکربندی‌های مدل موجود از قبل ارائه نمی‌دهد. در عوض، کلاینت را با پیکربندی مورد نظر خود مقداردهی اولیه کنید و سپس وضعیت آن را تأیید کنید.

  • مقداردهی اولیه کلاینت: نمونه GenerativeModel را با استفاده از ModelConfig مورد نظر خود ایجاد کنید.
  • بررسی وضعیت: متد checkStatus() را روی نمونه فراخوانی کنید تا تأیید کنید که نوع مدل خاص روی دستگاه موجود است.

کاتلین

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 بازگردد.
  • از مراحل انتشار مدل برای توسعه و تولید استفاده کنید: از مرحله پیش‌نمایش در طول توسعه و آزمایش داخلی برای ارزیابی بهبودهای آتی مدل استفاده کنید. برای انتشارهای تولید عمومی خود به نسخه پایدار (Stable) بروید تا از رفتار سازگار برای کاربران خود اطمینان حاصل کنید.

مشکلات شناخته شده

  • برای برخی از دستگاه‌ها در مرحله انتشار پیش‌نمایش، از چندین کاندید در خروجی پشتیبانی نمی‌کنند و اگر candidateCount بزرگتر از ۱ تنظیم شود، خطا می‌دهند. برای جزئیات بیشتر به مرجع API مراجعه کنید.
  • نمونه‌های چندگانه در برخی پیاده‌سازی‌ها پشتیبانی نمی‌شوند. عملکرد نسبت به تولید نهایی کندتر خواهد بود.
  • ورودی تصویر در حال حاضر فقط در Pixel 10 کار می‌کند.
  • مدل nanov4-fast ممکن است در برخی دستگاه‌ها برای برخی از درخواست‌ها پاسخ‌های ضعیفی ارائه دهد.