تتيح لك حزمة تطوير البرامج (SDK) لعملاء تكنولوجيات الذكاء الاصطناعي من Google استدعاء واجهة برمجة التطبيقات Gemini API واستخدام مجموعة نماذج Gemini مباشرةً من تطبيق Android.
تتيح لك الفئة المجانية إجراء التجارب بدون أي تكلفة. للاطّلاع على تفاصيل أخرى تتعلّق بالأسعار، يمكنك الاطّلاع على دليل الأسعار.
الخطوات الأولى
قبل التفاعل مع Gemini API مباشرةً من تطبيقك، عليك أولاً تنفيذ بعض الإجراءات، بما في ذلك التعرّف على طلبات الموافقة وكذلك إنشاء مفتاح واجهة برمجة التطبيقات وإعداد تطبيقك لاستخدام حزمة SDK.
تجربة طلبات البحث
ابدأ بإنشاء نموذج أولي لطلبك في Google AI Studio.
Google AI Studio هي بيئة تطوير مدمجة لتصميم الطلبات وإنشاء النماذج الأولية. يتيح لك تحميل الملفات لاختبار الطلبات التي تتضمّن نصًا وصورًا وحفظ طلب لإعادة الاطّلاع عليه لاحقًا.
إنّ إنشاء الطلب المناسب لحالة الاستخدام هو فن أكثر منه علمًا، ما يجعل التجارب ضرورية. يمكنك الاطّلاع على مزيد من المعلومات حول الطلبات في مستندات تكنولوجيات الذكاء الاصطناعي الرسمية من Google.
للاطّلاع على مزيد من المعلومات عن الإمكانات المتقدّمة في Google AI Studio، يمكنك الاطّلاع على مقالة البدء السريع باستخدام Google AI Studio.
إنشاء مفتاح واجهة برمجة التطبيقات
بعد الانتهاء من إدخال الطلب، انقر على الحصول على مفتاح واجهة برمجة التطبيقات لإنشاء مفتاح واجهة برمجة التطبيقات في Gemini. سيتم تجميع المفتاح مع تطبيقك، وهو أمر مقبول للتجربة وإنشاء النماذج الأولية، ولكن لا يُنصح به في حالات استخدام التطبيق في مرحلة الإنتاج.
لمنع التزام مفتاح واجهة برمجة التطبيقات في مستودع ملفّات رمز المصدر، استخدِم المكوّن الإضافي Secrets في Gradle.
إضافة تبعية Gradle
أضِف التبعية لحزمة تطوير البرامج (SDK) لخادم تكنولوجيات الذكاء الاصطناعي من Google إلى تطبيقك:
Kotlin
dependencies { [...] implementation("com.google.ai.client.generativeai:generativeai:0.7.0") }
Java
dependencies { [...] implementation("com.google.ai.client.generativeai:generativeai:0.7.0") // 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") }
إنشاء GenerativeModel
ابدأ بإنشاء مثيل GenerativeModel
من خلال تقديم ما يلي:
- اسم الطراز:
gemini-1.5-flash
أوgemini-1.5-pro
أوgemini-1.0-pro
- مفتاح واجهة برمجة التطبيقات الذي تم إنشاؤه باستخدام Google AI Studio
يمكنك اختياريًا تحديد مَعلمات النموذج وتقديم قيم لدرجة الحرارة وtopK وtopP والحد الأقصى للرموز المميّزة للإخراج.
يمكنك أيضًا تحديد ميزات السلامة للمواضيع التالية:
HARASSMENT
HATE_SPEECH
SEXUALLY_EXPLICIT
DANGEROUS_CONTENT
Kotlin
val model = GenerativeModel( model = "gemini-1.5-flash-001", apiKey = BuildConfig.apikey, generationConfig = generationConfig { temperature = 0.15f topK = 32 topP = 1f maxOutputTokens = 4096 }, safetySettings = listOf( SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE), ) )
Java
GenerationConfig.Builder configBuilder = new GenerationConfig.Builder(); configBuilder.temperature = 0.15f; configBuilder.topK = 32; configBuilder.topP = 1f; configBuilder.maxOutputTokens = 4096; ArrayList<SafetySetting> safetySettings = new ArrayList(); safetySettings.add(new SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE)); GenerativeModel gm = new GenerativeModel( "gemini-1.5-flash-001", BuildConfig.apiKey, configBuilder.build(), safetySettings );
استخدام حزمة تطوير البرامج (SDK) لبرنامج "الذكاء الاصطناعي من Google" في تطبيقك
بعد أن حصلت على مفتاح واجهة برمجة التطبيقات وأعددت تطبيقك لاستخدام حزمة تطوير البرامج (SDK)، أصبحت مستعدًا للتفاعل مع Gemini API.
إنشاء نص
لإنشاء ردّ نصي، اتصل على generateContent()
وأدخِل طلبك.
Kotlin
scope.launch { val response = model.generateContent("Write a story about a green robot.") }
Java
// In Java, create a GenerativeModelFutures from the GenerativeModel. // generateContent() returns a ListenableFuture. // Learn more: // https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture GenerativeModelFutures model = GenerativeModelFutures.from(gm); Content content = new Content.Builder() .addText("Write a story about a green robot.") .build(); Executor executor = // ... 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);
تجدر الإشارة إلى أنّ generateContent()
هي دالة suspend
، وهي تتكامل
بشكل جيد مع رمز Kotlin الحالي.
إنشاء نص من الصور والوسائط الأخرى
يمكنك أيضًا إنشاء نص من طلب يتضمّن نصًا بالإضافة إلى صور أو وسائط
أخرى. عند الاتصال برقم generateContent()
، يمكنك تمرير الوسائط كبيانات مضمّنة
(كما هو موضّح في المثال أدناه).
Kotlin
scope.launch { val response = model.generateContent( content { image(bitmap) text("What is the object in this picture?") } ) }
Java
Content content = new Content.Builder() .addImage(bitmap) .addText("What is the object in this picture?") .build(); Executor executor = // ... 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);
محادثة متعددة الخطوات
يمكنك أيضًا إتاحة المحادثات المتعدّدة المقاطع. ابدأ محادثة باستخدام الدالة
startChat()
. يمكنك اختياريًا تقديم سجلّ رسائل. بعد ذلك،
استخدِم الدالة sendMessage()
لإرسال رسائل المحادثة.
Kotlin
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?") }
Java
Content.Builder userContentBuilder = new Content.Builder(); userContentBuilder.setRole("user"); userContentBuilder.addText("Hello, I have 2 dogs in my house."); Content userContent = userContentBuilder.build(); // (Optional) create message history 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); Content.Builder userMessageBuilder = new Content.Builder(); userMessageBuilder.setRole("user"); userMessageBuilder.addText("How many paws are in my house?"); Content userMessage = userMessageBuilder.build(); Executor executor = // ... ListenableFuture<GenerateContentResponse> response = chat.sendMessage(userMessage); 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);
عرض الردّ تدريجيًا
يمكنك تحقيق تفاعلات أسرع من خلال عدم انتظار النتيجة الكاملة من
إنشاء النموذج، واستخدام البث بدلاً من ذلك للتعامل مع النتائج الجزئية. استخدِم
generateContentStream()
لبث ردّ.
Kotlin
someScope.launch { var outputContent = "" generativeModel.generateContentStream(inputContent) .collect { response -> outputContent += response.text } }
Java
// In Java, the method generateContentStream() returns a Publisher // from the Reactive Streams library. // https://www.reactive-streams.org/ Publisher<GenerateContentResponse> streamingResponse = model.generateContentStream(content); 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); // Request all messages } });
استوديو Android
يوفّر "استوديو Android" أدوات إضافية لمساعدتك في البدء.
- نموذج Gemini API الأساسي: يساعدك هذا النموذج الأساسي في إنشاء مفتاح واجهة برمجة التطبيقات مباشرةً من "استوديو Android" وإنشاء مشروع يتضمّن التبعيات اللازمة لنظام Android لاستخدام واجهات برمجة تطبيقات Gemini.
- عيّنة الذكاء الاصطناعي التوليدي: تتيح لك هذه العيّنة استيراد IDE العميل لتكنولوجيات الذكاء الاصطناعي من Google لتطبيق Android النموذجي في "استوديو Android".
الخطوات التالية
- راجِع نموذج التطبيق على GitHub لحزمة تطوير البرامج (SDK) لعملاء تكنولوجيات الذكاء الاصطناعي من Google لنظام التشغيل Android.