للوصول إلى واجهة برمجة التطبيقات Gemini API ومجموعة نماذج Gemini مباشرةً من تطبيقك، ننصح باستخدام حزمة تطوير البرامج (SDK) لخدمة Vertex AI في Firebase لنظام التشغيل Android. تشكّل حزمة تطوير البرامج (SDK) هذه جزءًا من منصّة Firebase الأوسع التي تساعدك في إنشاء تطبيقات متعدّدة الخدمات وتشغيلها.
نقل البيانات من حزمة SDK لبرنامج Google AI
تشبه حزمة تطوير البرامج (SDK) لـ Vertex AI في Firebase حزمة SDK لعميل Google AI، ولكن تقدّم حزمة تطوير البرامج (SDK) لـ Vertex AI في Firebase خيارات أمان مهمة وغيرها من الميزات لحالات الاستخدام في مرحلة الإنتاج. على سبيل المثال، عند استخدام Vertex AI في Firebase، يمكنك أيضًا استخدام ما يلي:
فحص التطبيقات من Firebase لحماية Gemini API من إساءة الاستخدام من قِبل العميل غير المصرّح به
"الإعداد عن بُعد في Firebase" لضبط القيم لتطبيقك في السحابة الإلكترونية وتغييرها بشكل ديناميكي (مثل أسماء النماذج) بدون الحاجة إلى طرح إصدار جديد من تطبيقك
Cloud Storage لبرنامج Firebase لتضمين ملفات وسائط كبيرة في طلبك المُرسَل إلى Gemini API
إذا سبق لك دمج حزمة تطوير البرامج (SDK) لخدمة Google AI في تطبيقك، يمكنك نقل البيانات إلى Vertex AI في Firebase.
الخطوات الأولى
قبل التفاعل مع واجهة برمجة التطبيقات Gemini API مباشرةً من تطبيقك، عليك أولاً تنفيذ بعض الإجراءات، بما في ذلك التعرّف على طلبات الموافقة و إعداد Firebase وتطبيقك لاستخدام حزمة تطوير البرامج (SDK).
تجربة طلبات البحث
يمكنك تجربة طلبات البحث في Vertex AI Studio. Vertex AI Studio هي بيئة تطوير مدمجة لتصميم الطلبات وإنشاء النماذج الأولية. تتيح لك هذه الميزة تحميل الملفات لاختبار الطلبات التي تتضمّن نصًا وصورًا وحفظ طلب لإعادة الاطّلاع عليه لاحقًا.
إنّ إنشاء الطلب المناسب لحالة الاستخدام هو فن أكثر منه علمًا، ما يجعل التجارب ضرورية. يمكنك الاطّلاع على مزيد من المعلومات عن الطلبات في مستندات Firebase.
إعداد مشروع على Firebase وربط تطبيقك به
بعد أن تصبح مستعدًا للاتّصال بواجهة برمجة التطبيقات Gemini API من تطبيقك، اتّبِع التعليمات في دليل بدء استخدام Vertex AI في Firebase لإعداد Firebase وحزمة تطوير البرامج (SDK) في تطبيقك. سيساعدك دليل البدء في تنفيذ كل المهام التالية الواردة في هذا الدليل.
إعداد مشروع جديد أو حالي على Firebase، بما في ذلك استخدام خطة أسعار Blaze المستندة إلى الدفع حسب الاستخدام وتفعيل واجهات برمجة التطبيقات المطلوبة
ربط تطبيقك بمنصّة Firebase، بما في ذلك تسجيل تطبيقك وإضافة ملف إعدادات Firebase (
google-services.json
) إلى تطبيقك
إضافة تبعية Gradle
أضِف التبعية التالية لـ Gradle إلى وحدة تطبيقك:
Kotlin
dependencies { ... implementation("com.google.firebase:firebase-vertexai:16.0.2") }
Java
dependencies { [...] implementation("com.google.firebase:firebase-vertexai:16.0.2") // Required to use `ListenableFuture` from Guava Android for one-shot generation implementation("com.google.guava:guava:31.0.1-android") // Required to use `Publisher` from Reactive Streams for streaming operations implementation("org.reactivestreams:reactive-streams:1.0.4") }
بدء خدمة Vertex AI والنموذج التوليدي
ابدأ بإنشاء مثيل GenerativeModel
وتحديد اسم النموذج:
Kotlin
val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")
Java
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");
في مستندات Firebase، يمكنك الاطّلاع على مزيد من المعلومات عن النماذج المتاحة لاستخدامها مع Vertex AI في Firebase. يمكنك معرفة المزيد عن ضبط مَعلمات النماذج.
التفاعل مع Gemini API من تطبيقك
بعد إعداد Firebase وتطبيقك لاستخدام حزمة SDK، أصبحت مستعدًا للتفاعل مع Gemini API من تطبيقك.
إنشاء نص
لإنشاء ردّ نصي، اتصل على generateContent()
وأدخِل طلبك.
Kotlin
// Note: `generateContent()` is a `suspend` function, which integrates well // with existing Kotlin code. scope.launch { val response = model.generateContent("Write a story about the green robot") }
Java
// In Java, create a `GenerativeModelFutures` from the `GenerativeModel`. // Note that `generateContent()` returns a `ListenableFuture`. Learn more: // https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture GenerativeModelFutures model = GenerativeModelFutures.from(gm); Content prompt = new Content.Builder() .addText("Write a story about a green robot.") .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()
، يمكنك تمرير الوسائط كبيانات مضمّنة
(كما هو موضّح في المثال أدناه). بدلاً من ذلك، يمكنك
تضمين ملفات وسائط كبيرة في طلب باستخدام
مساحة التخزين في السحابة الإلكترونية لعناوين URL في Firebase.
Kotlin
scope.launch { val response = model.generateContent( content { image(bitmap) text("what is the object in the picture?") } ) }
Java
GenerativeModelFutures model = GenerativeModelFutures.from(gm); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky); Content prompt = new Content.Builder() .addImage(bitmap) .addText("What developer tool is this mascot from?") .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);
محادثة متعددة الخطوات
يمكنك أيضًا إتاحة المحادثات المتعدّدة المقاطع. ابدأ محادثة باستخدام الدالة
startChat()
. يمكنك اختياريًا تقديم سجلّ رسائل. بعد ذلك،
استخدِم الدالة sendMessage()
لإرسال رسائل المحادثة.
Kotlin
val chat = generativeModel.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?") }
Java
// (Optional) create message history 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(); Publisher<GenerateContentResponse> streamingResponse = chat.sendMessageStream(message); StringBuilder outputContent = new StringBuilder(); streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() { @Override public void onNext(GenerateContentResponse generateContentResponse) { String chunk = generateContentResponse.getText(); outputContent.append(chunk); } @Override public void onComplete() { // ... } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } });
عرض الردّ تدريجيًا
يمكنك تحقيق تفاعلات أسرع من خلال عدم انتظار النتيجة الكاملة من
إنشاء النموذج، واستخدام البث بدلاً من ذلك للتعامل مع النتائج الجزئية. استخدِم generateContentStream()
لبث ردّ.
Kotlin
scope.launch { var outputContent = "" generativeModel.generateContentStream(inputContent) .collect { response -> outputContent += response.text } }
Java
// Note that in Java the method `generateContentStream()` returns a // Publisher from the Reactive Streams library. // https://www.reactive-streams.org/ GenerativeModelFutures model = GenerativeModelFutures.from(gm); // Provide a prompt that contains text Content prompt = new Content.Builder() .addText("Write a story about a green robot.") .build(); Publisher<GenerateContentResponse> streamingResponse = model.generateContentStream(prompt); StringBuilder outputContent = new StringBuilder(); streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() { @Override public void onNext(GenerateContentResponse generateContentResponse) { String chunk = generateContentResponse.getText(); outputContent.append(chunk); } @Override public void onComplete() { // ... } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } });
الخطوات التالية
- راجِع نموذج التطبيق لخدمة Vertex AI في Firebase على GitHub.
- ابدأ التفكير في الاستعداد للإصدار العلني، بما في ذلك إعداد ميزة "فحص التطبيقات من Firebase" لحماية Gemini API من إساءة الاستخدام من قِبل العملاء غير المصرّح لهم.
- اطّلِع على مزيد من المعلومات عن Vertex AI في Firebase في مستندات Firebase.