জেমিনি ডেভেলপার API

জেমিনি প্রো এবং ফ্ল্যাশ মডেলগুলি অ্যাক্সেস করার জন্য, আমরা Android ডেভেলপারদের Firebase AI লজিক ব্যবহার করে Gemini Developer API ব্যবহার করার পরামর্শ দিই। এটি আপনাকে ক্রেডিট কার্ডের প্রয়োজন ছাড়াই শুরু করতে দেয় এবং একটি উদার বিনামূল্যের স্তর প্রদান করে৷ একবার আপনি একটি ছোট ব্যবহারকারী বেসের সাথে আপনার ইন্টিগ্রেশন যাচাই করলে, আপনি প্রদত্ত স্তরে স্যুইচ করে স্কেল করতে পারেন।

একটি Android অ্যাপের দৃষ্টান্ত যাতে একটি Firebase Android রয়েছে   SDK একটি ক্লাউড পরিবেশের মধ্যে SDK থেকে Firebase-এ একটি তীর নির্দেশ করে৷ থেকে   ফায়ারবেস, আরেকটি তীর জেমিনি ডেভেলপার এপিআইকে নির্দেশ করে, যেটির সাথে সংযুক্ত   জেমিনি প্রো এবং ফ্ল্যাশ, এছাড়াও ক্লাউডের মধ্যে।
চিত্র 1. ফায়ারবেস এআই লজিক ইন্টিগ্রেশন আর্কিটেকচার জেমিনি ডেভেলপার এপিআই অ্যাক্সেস করতে।

শুরু হচ্ছে

আপনার অ্যাপ থেকে সরাসরি Gemini API-এর সাথে ইন্টারঅ্যাক্ট করার আগে, আপনাকে প্রথমে কিছু জিনিস করতে হবে, যার মধ্যে প্রম্পটিংয়ের সাথে পরিচিত হওয়া এবং SDK ব্যবহার করার জন্য Firebase এবং আপনার অ্যাপ সেট আপ করা সহ।

প্রম্পট সঙ্গে পরীক্ষা

প্রম্পটগুলির সাথে পরীক্ষা করা আপনাকে আপনার Android অ্যাপের জন্য সেরা বাক্যাংশ, বিষয়বস্তু এবং বিন্যাস খুঁজে পেতে সাহায্য করতে পারে৷ Google AI স্টুডিও হল একটি IDE যা আপনি আপনার অ্যাপের ব্যবহারের ক্ষেত্রে প্রোটোটাইপ এবং ডিজাইন করার জন্য ব্যবহার করতে পারেন।

আপনার ব্যবহারের ক্ষেত্রে সঠিক প্রম্পট তৈরি করা বিজ্ঞানের চেয়ে বেশি শিল্প, যা পরীক্ষাকে সমালোচনামূলক করে তোলে। আপনি Firebase ডকুমেন্টেশনে প্রম্পটিং সম্পর্কে আরও জানতে পারেন।

একবার আপনি আপনার প্রম্পটে খুশি হলে, কোড স্নিপেট পেতে "<>" বোতামে ক্লিক করুন যা আপনি আপনার কোডে যোগ করতে পারেন।

একটি Firebase প্রকল্প সেট আপ করুন এবং আপনার অ্যাপটিকে Firebase-এর সাথে সংযুক্ত করুন

একবার আপনি আপনার অ্যাপ থেকে API কল করার জন্য প্রস্তুত হয়ে গেলে, আপনার অ্যাপে Firebase এবং SDK সেট আপ করার জন্য Firebase AI লজিক শুরু করার গাইডের "ধাপ 1"-এর নির্দেশাবলী অনুসরণ করুন।

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 বিকাশকারী API-এর সাথে ব্যবহারের জন্য উপলব্ধ মডেলগুলি সম্পর্কে আরও জানুন৷ আপনি মডেল প্যারামিটার কনফিগার করার বিষয়ে আরও জানতে পারেন।

আপনার অ্যাপ থেকে জেমিনি ডেভেলপার API এর সাথে ইন্টারঅ্যাক্ট করুন

এখন যেহেতু আপনি SDK ব্যবহার করার জন্য 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 সামগ্রীর ধরন ব্যবহার করুন:

কোটলিন

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();
}

একইভাবে আপনি পিডিএফ ( 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 ডকুমেন্টেশন দেখুন।

পরবর্তী পদক্ষেপ