حزمة تطوير البرامج (SDK) لخدمة Google AI للعملاء

تتيح لك حزمة تطوير البرامج (SDK) لعملاء تكنولوجيات الذكاء الاصطناعي من Google استدعاء واجهة برمجة التطبيقات Gemini API واستخدام مجموعة نماذج Gemini مباشرةً من تطبيق Android.

تتيح لك الفئة المجانية إجراء التجارب بدون أي تكلفة. للاطّلاع على تفاصيل أخرى تتعلّق بالأسعار، يمكنك الاطّلاع على دليل الأسعار.

بنية دمج تكنولوجيات الذكاء الاصطناعي من Google
الشكل 1. بنية دمج تكنولوجيات الذكاء الاصطناعي من Google

الخطوات الأولى

قبل التفاعل مع Gemini API مباشرةً من تطبيقك، عليك أولاً تنفيذ بعض الإجراءات، بما في ذلك التعرّف على طلبات البيانات، بالإضافة إلى إنشاء مفتاح واجهة برمجة التطبيقات وإعداد تطبيقك لاستخدام حزمة SDK.

تجربة طلبات البحث

ابدأ بإنشاء نموذج أولي لطلبك في Google AI Studio.

‫Google AI Studio هي بيئة تطوير مدمجة لتصميم الطلبات وإنشاء النماذج الأولية. تتيح لك هذه الميزة تحميل الملفات لاختبار الطلبات التي تتضمّن نصًا وصورًا وحفظ طلب لإعادة الاطّلاع عليه لاحقًا.

إنّ إنشاء الطلب المناسب لحالة الاستخدام هو فن أكثر منه علمًا، ما يجعل التجارب ضرورية. يمكنك الاطّلاع على مزيد من المعلومات حول الطلبات في مستندات تكنولوجيات الذكاء الاصطناعي الرسمية من Google.

Google AI Studio
الشكل 2. Google AI Studio

للاطّلاع على مزيد من المعلومات عن الإمكانات المتقدّمة في 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".

الخطوات التالية