Gemini Developer API

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

تصویری از یک برنامه اندروید که حاوی اندروید Firebase است   SDK. یک فلش از SDK به Firebase در یک محیط Cloud اشاره می کند. از   Firebase، یک فلش دیگر به Gemini Developer API اشاره می کند که به آن متصل است   Gemini Pro & Flash، همچنین در فضای ابری.
شکل 1. معماری ادغام منطق هوش مصنوعی Firebase برای دسترسی به Gemini Developer API.

شروع کردن

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

با دستورات آزمایش کنید

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

ایجاد دستور مناسب برای مورد استفاده شما بیشتر هنر است تا علم، که آزمایش را حیاتی می کند. می‌توانید در مستندات Firebase درباره درخواست بیشتر بیاموزید.

هنگامی که از درخواست خود راضی بودید، روی دکمه "<>" کلیک کنید تا کدهایی را دریافت کنید که می توانید به کد خود اضافه کنید.

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

هنگامی که آماده تماس با API از برنامه خود شدید، دستورالعمل های «مرحله 1» راهنمای شروع Firebase AI Logic را برای راه اندازی Firebase و SDK در برنامه خود دنبال کنید.

وابستگی Gradle را اضافه کنید

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

کاتلین

dependencies {
  // ... other androidx dependencies

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

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

جاوا

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

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

  // 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")
}

مدل مولد را راه اندازی کنید

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

کاتلین

val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.0-flash")

جاوا

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

GenerativeModelFutures model = GenerativeModelFutures.from(firebaseAI);

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

با Gemini Developer API از برنامه خود تعامل داشته باشید

اکنون که Firebase و برنامه خود را برای استفاده از SDK تنظیم کرده اید، آماده تعامل با 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 استفاده کنید:

کاتلین

val contentResolver = applicationContext.contentResolver
val inputStream = contentResolver.openInputStream(audioUri).use { stream ->
    stream?.let {
        val bytes = stream.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 = getApplicationContext().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 استفاده کنید:

کاتلین

val contentResolver = applicationContext.contentResolver
contentResolver.openInputStream(videoUri).use { stream ->
  stream?.let {
    val bytes = stream.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 = getApplicationContext().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 = userContentBuilder.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);

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

مراحل بعدی