Gemini Developer API

Gemini Developer API به شما امکان می‌دهد به مدل‌های Gemini از Google دسترسی داشته باشید و ویژگی‌های هوش مصنوعی زایای پیشرفته را در برنامه‌های Android خود بسازید—ازجمله گپ مکالمه‌ای، تولید تصویر (با Nano Banana)، و تولید نوشتار براساس ورودی نوشتار، تصویر، صدا، و ویدیو.

برای دسترسی به مدل‌های Gemini Pro و Flash، می‌توانید از Gemini Developer API با Firebase AI Logic استفاده کنید. این پلتفرم به شما امکان می‌دهد بدون نیاز به روش پرداخت (مانند کارت اعتباری) شروع کنید و یک سطح رایگان سخاوتمندانه ارائه می‌دهد. وقتی ادغام را با پایگاه کاربر کوچکی اعتبارسنجی کردید، می‌توانید با ارتقا دادن به سطح پولی، آن را مقیاس‌بندی کنید.

تصویری که برنامه Android را نشان می‌دهد که از «کیت توسعه نرم‌افزار Firebase ویژه Android»
    برای ارسال درخواست به Firebase backend در فضای ابری استفاده می‌کند. درخواست‌ها به Gemini Developer API هدایت می‌شوند که می‌تواند از هر دو مدل Gemini Pro و Flash استفاده کند.
شکل ۱. معماری یکپارچه‌سازی Firebase AI Logic برای دسترسی به Gemini Developer API.

شروع کردن

قبل‌از اینکه مستقیماً از برنامه‌تان با Gemini API تعامل داشته باشید، باید ابتدا چند کار انجام دهید، ازجمله آشنایی با پیام‌واره و همچنین راه‌اندازی Firebase و برنامه‌تان برای استفاده از کیت توسعه نرم‌افزار.

آزمایش کردن با پیام‌واره‌ها

آزمایش کردن با پیام‌واره‌ها می‌تواند به شما کمک کند بهترین عبارت‌بندی، محتوا، و قالب را برای برنامه Android خود پیدا کنید. Google AI Studio یک «محیط توسعه یکپارچه» (IDE) است که می‌توانید از آن برای نمونه‌سازی و طراحی پیام‌واره‌ها برای موارد استفاده برنامه‌تان استفاده کنید.

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

وقتی از پیام‌واره‌تان راضی بودید، روی دکمه <> کلیک کنید تا تکه‌کدهایی را که می‌توانید به کدتان اضافه کنید دریافت کنید.

راه‌اندازی پروژه Firebase و متصل کردن برنامه به Firebase

وقتی آماده شدید که میانای برنامه‌سازی کاربردی را از برنامه‌تان فراخوانی کنید، دستورالعمل‌های «مرحله ۱» در راهنمای شروع به کار Firebase AI Logic را برای راه‌اندازی Firebase و فعال کردن میاناهای برنامه‌سازی کاربردی و سرویس‌های لازم دنبال کنید.

افزودن وابستگی‌های Gradle

وابستگی‌های Gradle زیر را به ماژول برنامه‌تان اضافه کنید:

کاتلین

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:35.1.0"))

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
  implementation("com.google.firebase:firebase-appcheck-debug")
}

جاوا

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:35.1.0"))

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
  implementation("com.google.firebase:firebase-appcheck-debug")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

پیکربندی ارائه‌دهنده اشکال‌زدایی «بررسی برنامه» برای توسعه محلی

از اوایل ژوئیه ۲۰۲۶، به‌عنوان بخشی از گردش کار راه‌اندازی راهنمایی‌شده برای AI Logic در کنسول Firebase، «بررسی برنامه Firebase» به‌طور خودکار برای محافظت از Gemini API اعمال می‌شود. برای توسعه محلی، باید ارائه‌کننده اشکال‌زدایی «بررسی برنامه» را پیکربندی کنید تا تصدیق را دور بزنید و درعین‌حال اجرای «بررسی برنامه» را حفظ کنید.

  1. در ساخت اشکال‌زدایی، «بررسی برنامه» را برای استفاده از کارخانه ارائه‌کننده اشکال‌زدایی پیکربندی کنید:

    کاتلین

    Firebase.initialize(context = this)
    Firebase.appCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance(),
    )
    

    جاوا

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
    
  2. دریافت کردن کد اشکال‌زدایی:

    1. برنامه‌تان را در شبیه‌ساز یا در دستگاه آزمایشی‌تان اجرا کنید.

    2. در گزارش‌هایتان، به‌دنبال کد تصدیق اشکال‌زدایی «بررسی برنامه» بگردید. برای مثال:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. کد را کپی کنید (برای مثال، 123a4567-b89c-12d3-e456-789012345678).

  3. ثبت کردن کد اشکال‌زدایی با «بررسی برنامه»:

    1. در کنسول Firebase، به Security (امنیت) > App Check (بررسی برنامه) > Apps (برنامه‌ها) بروید.

    2. برنامه‌تان را پیدا کنید، روی منوِ سرریز () کلیک کنید، و سپس مدیریت کردن کدهای اشکال‌زدایی را انتخاب کنید.

    3. دستورالعمل‌های روی صفحه را برای ثبت کردن کد اشکال‌زدایی دنبال کنید.

برای جزئیات مربوط به ارائه‌دهنده اشکال‌زدایی (ازجمله نحوه دریافت یک توکن اشکال‌زدایی جدید)، اسناد رسمی «بررسی برنامه» را بررسی کنید.

مقداردهی اولیه مدل زایا

با نمونه‌سازی GenerativeModel و مشخص کردن نام مدل شروع کنید:

کاتلین

// Start by instantiating a GenerativeModel and specifying the model name:
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel("gemini-3.5-flash")

جاوا

GenerativeModel firebaseAI = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-3.5-flash");

GenerativeModelFutures model = GenerativeModelFutures.from(firebaseAI);

درباره مدل‌های دردسترس برای استفاده با Gemini Developer API بیشتر بدانید. همچنین می‌توانید درباره پیکربندی پارامترهای مدل بیشتر بدانید.

تعامل با Gemini Developer API از برنامه‌تان

اکنون که Firebase و برنامه‌تان را برای استفاده از کیت توسعه نرم‌افزار راه‌اندازی کرده‌اید، آماده‌اید تا از برنامه‌تان با Gemini Developer API تعامل برقرار کنید.

تولید نوشتار

برای تولید پاسخ نوشتاری، generateContent() را با پیام‌واره‌تان فراخوانی کنید.

کاتلین

scope.launch {
    val response = model.generateContent("Write a story about a magic backpack.")
}

جاوا

Content prompt = new Content.Builder()
        .addText("Write a story about a magic backpack.")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تولید کردن نوشتار از تصویر و رسانه‌های دیگر

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

برای مثال، برای استفاده از نقشه بیتی، از نوع محتوای image استفاده کنید:

کاتلین

scope.launch {
    val response = model.generateContent(
        content {
            image(bitmap)
            text("what is the object in the picture?")
        }
    )
}

جاوا

Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("what is the object in the picture?")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

برای ارسال فایل صوتی، از نوع محتوای inlineData استفاده کنید:

کاتلین

scope.launch {
    val contentResolver = applicationContext.contentResolver
    contentResolver.openInputStream(audioUri).use { stream ->
        stream?.let {
            val bytes = it.readBytes()

            val prompt = content {
                inlineData(bytes, "audio/mpeg") // Specify the appropriate audio MIME type
                text("Transcribe this audio recording.")
            }

            val response = model.generateContent(prompt)
        }
    }
}

جاوا

ContentResolver resolver = applicationContext.getContentResolver();

try (InputStream stream = resolver.openInputStream(audioUri)) {
    File audioFile = new File(new URI(audioUri.toString()));
    int audioSize = (int) audioFile.length();
    byte[] audioBytes = new byte[audioSize];
    if (stream != null) {
        stream.read(audioBytes, 0, audioBytes.length);
        stream.close();

        // Provide a prompt that includes audio specified earlier and text
        Content prompt = new Content.Builder()
                .addInlineData(audioBytes, "audio/mpeg")  // Specify the appropriate audio MIME type
                .addText("Transcribe what's said in this audio recording.")
                .build();

        // To generate text output, call `generateContent` with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String text = result.getText();
                Log.d(TAG, (text == null) ? "" : text);
            }
            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "Failed to generate a response", t);
            }
        }, executor);
    } else {
        Log.e(TAG, "Error getting input stream for file.");
        // Handle the error appropriately
    }
} catch (IOException e) {
    Log.e(TAG, "Failed to read the audio file", e);
} catch (URISyntaxException e) {
    Log.e(TAG, "Invalid audio file", e);
}

و برای ارائه فایل ویدیویی، همچنان از نوع محتوای inlineData استفاده کنید:

کاتلین

scope.launch {
    val contentResolver = applicationContext.contentResolver
    contentResolver.openInputStream(videoUri).use { stream ->
        stream?.let {
            val bytes = it.readBytes()

            val prompt = content {
                inlineData(bytes, "video/mp4") // Specify the appropriate video MIME type
                text("Describe the content of this video")
            }

            val response = model.generateContent(prompt)
        }
    }
}

جاوا

ContentResolver resolver = applicationContext.getContentResolver();

try (InputStream stream = resolver.openInputStream(videoUri)) {
    File videoFile = new File(new URI(videoUri.toString()));
    int videoSize = (int) videoFile.length();
    byte[] videoBytes = new byte[videoSize];
    if (stream != null) {
        stream.read(videoBytes, 0, videoBytes.length);
        stream.close();

        // Provide a prompt that includes video specified earlier and text
        Content prompt = new Content.Builder()
                .addInlineData(videoBytes, "video/mp4")
                .addText("Describe the content of this video")
                .build();

        // To generate text output, call generateContent with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String resultText = result.getText();
                System.out.println(resultText);
            }

            @Override
            public void onFailure(Throwable t) {
                t.printStackTrace();
            }
        }, executor);
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}

به‌طور مشابه، می‌توانید اسناد PDF (application/pdf) و نوشتار ساده (text/plain) را نیز با ارسال نوع MIME مربوطه به‌عنوان پارامتر ارسال کنید.

گپ چندنوبتی

همچنین می‌توانید از مکالمه‌های چندنوبتی پشتیبانی کنید. گپی را با تابع startChat() مقداردهی اولیه کنید. درصورت تمایل می‌توانید سابقه پیام را به مدل ارائه دهید. سپس تابع sendMessage() را برای ارسال پیام‌های گپ فراخوانی کنید.

کاتلین

val chat = model.startChat(
    history = listOf(
        content(role = "user") { text("Hello, I have 2 dogs in my house.") },
        content(role = "model") { text("Great to meet you. What would you like to know?") }
    )
)

scope.launch {
    val response = chat.sendMessage("How many paws are in my house?")
}

جاوا

Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();

Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = modelContentBuilder.build();

List<Content> history = Arrays.asList(userContent, modelContent);

// Initialize the chat
ChatFutures chat = model.startChat(history);

// Create a new user message
Content.Builder messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");

Content message = messageBuilder.build();

// Send the message
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(message);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تولید کردن تصویر در Android با Nano Banana

مدل‌های Gemini Image (یا همان مدل‌های Nano Banana) می‌تواند با بهره‌گیری از دانش جهانی و استدلال، تصاویر را تولید و ویرایش کند. این مدل‌ها تصاویری مرتبط با بافت تولید می‌کنند و خروجی‌های نوشتاری و تصویری را به‌طور یکپارچه ترکیب یا درهم‌تنیده می‌کنند. این مدل‌ها همچنین می‌توانند با دنباله‌های نوشتاری طولانی، تصاویر دقیقی تولید کنند و از ویرایش مکالمه‌ای تصویر با حفظ بافت پشتیبانی می‌کنند.

این راهنما نحوه استفاده از مدل‌های Gemini Image (مدل‌های Nano Banana) بااستفاده از Firebase AI Logic SDK برای Android را شرح می‌دهد. جزئیات بیشتر درباره تولید تصویر با Gemini را در اسناد Firebase پیدا کنید.

رابط Google AI Studio که فیلد ورودی نوشتاری را با پیام‌واره «تصویری فوق‌واقع‌گرایانه از یک تی‌رکس با کوله‌پشتی آبی که در جنگلی پیش‌ازتاریخ پرسه می‌زند» و تصویر تولیدشده از یک تی‌رکس در جنگل با کوله‌پشتی آبی نشان می‌دهد.
شکل ۲. از Google AI Studio برای پالایش پیام‌واره‌های تولید تصویر Nano Banana برای برنامه Android خود استفاده کنید

مقداردهی اولیه مدل زایا

یک GenerativeModel را نمونه‌سازی کنید و نام مدل Gemini Image (مانند gemini-3.1-flash-image) را مشخص کنید. سپس، responseModalities را پیکربندی کنید تا هم TEXT و هم IMAGE را برای تولید نوشتار و تصاویر درهم‌تنیده دربرگیرد. اگر TEXT را مستثنی کنید، مدل فقط تصویر برمی‌گرداند.

کاتلین

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
    modelName = "gemini-3.1-flash-image",
    // Configure the model to respond with images (required) and text (optional)
    generationConfig = generationConfig {
        responseModalities = listOf(
            ResponseModality.TEXT,
            ResponseModality.IMAGE
        )
    }
)

جاوا

GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI()).generativeModel(
        "gemini-3.1-flash-image",
        // Configure the model to respond with text and images (required)
        new GenerationConfig.Builder()
                .setResponseModalities(Arrays.asList(ResponseModality.TEXT, ResponseModality.IMAGE))
                .build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

تولید کردن تصویر (ورودی فقط نوشتاری)

می‌توانید با ارائه پیام‌واره فقط نوشتاری، به مدل Gemini دستور دهید که تصویر تولید کند:

کاتلین

scope.launch {
    // Provide a text prompt instructing the model to generate an image
    val prompt =
        "A hyper realistic picture of a t-rex with a blue bag pack roaming a pre-historic forest."
    // To generate image output, call `generateContent` with the text input
    val generatedImageAsBitmap: Bitmap? = model.generateContent(prompt)
        .candidates.first().content.parts.filterIsInstance<ImagePart>()
        .firstOrNull()?.image
}

جاوا

// Provide a text prompt instructing the model to generate an image
Content prompt = new Content.Builder()
        .addText("Generate an image of the Eiffel Tower with fireworks in the background.")
        .build();
// To generate an image, call `generateContent` with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        // iterate over all the parts in the first candidate in the result object
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                // The returned image as a bitmap
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ویرایش تصاویر (ورودی نوشتار و تصویر)

می‌توانید از مدل Gemini بخواهید تصاویر موجود را با ارائه نوشتار و یک یا چند تصویر در پیام‌واره‌تان ویرایش کند:

کاتلین

scope.launch {
    // Provide a text prompt instructing the model to edit the image
    val prompt = content {
        image(bitmap)
        text("Edit this image to make it look like a cartoon")
    }
    // To edit the image, call `generateContent` with the prompt (image and text input)
    val generatedImageAsBitmap: Bitmap? = model.generateContent(prompt)
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
    // Handle the generated text and image
}

جاوا

// Provide an image for the model to edit
Bitmap bitmap = BitmapFactory.decodeResource(resources, R.drawable.scones);
// Provide a text prompt instructing the model to edit the image
Content promptcontent = new Content.Builder()
        .addImage(bitmap)
        .addText("Edit this image to make it look like a cartoon")
        .build();
// To edit the image, call `generateContent` with the prompt (image and text input)
ListenableFuture<GenerateContentResponse> response = model.generateContent(promptcontent);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        // iterate over all the parts in the first candidate in the result object
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تکرار و ویرایش کردن تصاویر ازطریق گپ چندنوبتی

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

ابتدا، گپی را با startChat() مقداردهی اولیه کنید و به‌صورت اختیاری سابقه پیام را ارائه دهید. سپس، از sendMessage() برای پیام‌های بعدی استفاده کنید:

کاتلین

scope.launch {
    // Create the initial prompt instructing the model to edit the image
    val prompt = content {
        image(bitmap)
        text("Edit this image to make it look like a cartoon")
    }
    // Initialize the chat
    val chat = model.startChat()
    // To generate an initial response, send a user message with the image and text prompt
    var response = chat.sendMessage(prompt)
    // Inspect the returned image
    var generatedImageAsBitmap: Bitmap? = response
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
    // Follow up requests do not need to specify the image again
    response = chat.sendMessage("But make it old-school line drawing style")
    generatedImageAsBitmap = response
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
}

جاوا

// Provide an image for the model to edit
Bitmap bitmap = BitmapFactory.decodeResource(resources, R.drawable.scones);
// Initialize the chat
ChatFutures chat = model.startChat();
// Create the initial prompt instructing the model to edit the image
Content prompt = new Content.Builder()
        .setRole("user")
        .addImage(bitmap)
        .addText("Edit this image to make it look like a cartoon")
        .build();
// To generate an initial response, send a user message with the image and text prompt
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(prompt);
// Extract the image from the initial response
ListenableFuture<Bitmap> initialRequest = Futures.transform(response,
        result -> {
            for (Part part : result.getCandidates().get(0).getContent().getParts()) {
                if (part instanceof ImagePart) {
                    ImagePart imagePart = (ImagePart) part;
                    return imagePart.getImage();
                }
            }
            return null;
        }, executor);
// Follow up requests do not need to specify the image again
ListenableFuture<GenerateContentResponse> modelResponseFuture = Futures.transformAsync(
        initialRequest,
        generatedImage -> {
            Content followUpPrompt = new Content.Builder()
                    .addText("But make it old-school line drawing style")
                    .build();
            return chat.sendMessage(followUpPrompt);
        }, executor);
// Add a final callback to check the reworked image
Futures.addCallback(modelResponseFuture, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ملاحظات و محدودیت‌ها

به ملاحظات و محدودیت‌های زیر توجه کنید:

  • قالب برونداد: تصاویر به‌صورت PNG با حداکثر ابعاد ۱۰۲۴ پیکسل تولید می‌شوند.
  • انواع ورودی: این مدل از ورودی‌های صوتی یا ویدیویی برای تولید تصویر پشتیبانی نمی‌کند.
  • پشتیبانی زبانی: برای بهترین عملکرد، از زبان‌های زیر استفاده کنید: انگلیسی (en)، اسپانیایی مکزیکی (es-mx)، ژاپنی (ja-jp)، چینی ساده‌شده (zh-cn)، و هندی (hi-in).
  • مشکلات تولید:
    • تولید تصویر ممکن است همیشه فعال نشود و گاهی اوقات منجر به برونداد فقط نوشتاری شود. سعی کنید صریحاً درخواست برونداد تصویری کنید (برای مثال، «تصویری تولید کن»، «همان‌طور که پیش می‌روی تصویر ارائه کن»، «تصویر را به‌روز کن»).
    • ممکن است مدل در میانه‌های راه تولید را متوقف کند. دوباره امتحان کنید یا پیام‌واره دیگری را امتحان کنید.
    • مدل ممکن است نوشتار را به‌صورت تصویر تولید کند. سعی کنید صریحاً خروجی نوشتاری درخواست کنید (برای مثال، «نوشتار روایی همراه با تصویرسازی تولید کن»).

برای جزئیات بیشتر، به اسناد Firebase مراجعه کنید.

مراحل بعدی

پس‌از راه‌اندازی برنامه‌تان، مراحل بعدی زیر را درنظر بگیرید: