برنامج تعليمي: بدء استخدام Gemini API


يوضّح هذا الدليل التوجيهي طريقة الوصول إلى واجهة برمجة التطبيقات Gemini API لتطبيق Node.js باستخدام حزمة تطوير البرامج (SDK) الخاصة بـ JavaScript للذكاء الاصطناعي من Google.

في هذا البرنامج التعليمي، ستتعرّف على كيفية إجراء ما يلي:

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

المتطلبات الأساسية

يفترض هذا البرنامج التعليمي أنك على دراية بإنشاء التطبيقات باستخدام Node.js.

لإكمال هذا البرنامج التعليمي، تأكد من أن بيئة التطوير تفي بالمتطلبات التالية:

  • Node.js v18 أو إصدار أحدث
  • npm

إعداد مشروعك

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

إعداد مفتاح واجهة برمجة التطبيقات

لاستخدام Gemini API، يجب استخدام مفتاح واجهة برمجة التطبيقات. إذا لم يسبق لك إنشاء مفتاح، أنشئ مفتاحًا في Google AI Studio

الحصول على مفتاح واجهة برمجة التطبيقات

تأمين مفتاح واجهة برمجة التطبيقات

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

تفترض جميع المقتطفات في هذا البرنامج التعليمي أنّك تصل إلى مفتاح واجهة برمجة التطبيقات كمتغير بيئة.

تثبيت حزمة SDK

لاستخدام واجهة Gemini API في تطبيقك الخاص، عليك تثبيت حزمة GoogleGenerativeAI لنظام Node.js:

npm install @google/generative-ai

إعداد النموذج التوليدي

قبل أن تتمكن من إجراء أي طلبات بيانات من واجهة برمجة التطبيقات، عليك استيراد النموذج التوليدي وإعداده.

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// ...

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

// ...

عند تحديد نموذج، يُرجى ملاحظة ما يلي:

  • استخدِم نموذجًا خاصًا بحالة استخدامك (مثلاً، gemini-1.5-flash للإدخال المتعدد الوسائط). ضمن هذا الدليل، تسرد التعليمات الخاصة بكل عملية تنفيذ النموذج المقترَح لكل حالة استخدام.

تنفيذ حالات الاستخدام الشائعة

الآن وبعد الانتهاء من إعداد مشروعك، يمكنك استكشاف استخدام Gemini API لتنفيذ حالات استخدام مختلفة:

في قسم حالات الاستخدام المتقدّمة، يمكنك العثور على معلومات حول واجهة برمجة تطبيقات Gemini وعمليات التضمين.

إنشاء نص من الإدخال النصي فقط

عندما يتضمّن إدخال الطلب نصًا فقط، استخدِم نموذج Gemini 1.5 مع generateContent لإنشاء إخراج نصي:

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const prompt = "Write a story about a magic backpack."

  const result = await model.generateContent(prompt);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

إنشاء نص من إدخال النص والصورة (متعدد الوسائط)

بإمكان Gemini 1.5 Flash و1.5 Pro التعامل مع الإدخال المتعدّد الوسائط كي تتمكّن من إدخال النصوص والصور. تأكَّد من مراجعة متطلّبات الصورة للطلبات.

عندما يتضمّن إدخال الطلب نصًا وصورًا، استخدِم طُرز Gemini 1.5 مع طريقة generateContent لإنشاء إخراج نصّي:

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Converts local file information to a GoogleGenerativeAI.Part object.
function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType
    },
  };
}

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

  const prompt = "What's different between these pictures?";

  const imageParts = [
    fileToGenerativePart("image1.png", "image/png"),
    fileToGenerativePart("image2.jpeg", "image/jpeg"),
  ];

  const result = await model.generateContent([prompt, ...imageParts]);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

إنشاء محادثات متعددة الأدوار (الدردشة)

باستخدام Gemini، يمكنك بناء محادثات حرة عبر منعطفات متعددة. تبسّط حزمة تطوير البرامج (SDK) العملية من خلال إدارة حالة المحادثة، وبالتالي، على عكس generateContent، لن تحتاج إلى تخزين سجلّ المحادثات بنفسك.

لإنشاء محادثة متعددة الأدوار (مثل الدردشة)، استخدِم نموذج Gemini 1.5 أو نموذج Gemini 1.0 Pro، ثم اضبط إعدادات المحادثة من خلال طلب الرقم startChat(). بعد ذلك، استخدِم sendMessage() لإرسال رسالة جديدة للمستخدم، ما يؤدي أيضًا إلى إلحاق الرسالة والرد عليها في سجلّ المحادثات.

هناك خياران محتملان لـ role مرتبط بالمحتوى في المحادثة:

  • user: الدور الذي يقدّم الطلبات هذه القيمة هي القيمة التلقائية لاستدعاءات sendMessage.

  • model: الدور الذي يقدّم الردود يمكن استخدام هذا الدور عند استدعاء "startChat()" مع "history" الحالي.

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const chat = model.startChat({
    history: [
      {
        role: "user",
        parts: [{ text: "Hello, I have 2 dogs in my house." }],
      },
      {
        role: "model",
        parts: [{ text: "Great to meet you. What would you like to know?" }],
      },
    ],
    generationConfig: {
      maxOutputTokens: 100,
    },
  });

  const msg = "How many paws are in my house?";

  const result = await chat.sendMessage(msg);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

استخدام ميزة البث للتفاعل بشكل أسرع

بشكل تلقائي، يعرض النموذج استجابة بعد إكمال عملية الإنشاء بالكامل. يمكنك تحقيق تفاعلات أسرع من خلال عدم انتظار النتيجة الكاملة، واستخدام البث للتعامل مع النتائج الجزئية بدلاً من ذلك.

يوضّح المثال التالي كيفية تنفيذ البث باستخدام طريقة generateContentStream لإنشاء نص من طلب إدخال نص وصورة.

//...

const result = await model.generateContentStream([prompt, ...imageParts]);

let text = '';
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
  text += chunkText;
}

//...

يمكنك استخدام نهج مشابه للإدخالات النصية فقط وحالات استخدام الدردشة.

// Use streaming with text-only input
const result = await model.generateContentStream(prompt);

راجِع مثال على المحادثة أعلاه لمعرفة كيفية إنشاء مثيل chat.

// Use streaming with multi-turn conversations (like chat)
const result = await chat.sendMessageStream(msg);

تنفيذ حالات الاستخدام المتقدّمة

تساعدك حالات الاستخدام الشائعة الموضّحة في القسم السابق من هذا البرنامج التعليمي على الشعور بالراحة عند استخدام واجهة برمجة تطبيقات Gemini. يصف هذا القسم بعض حالات الاستخدام التي يمكن اعتبارها أكثر تقدمًا.

استخدام التضمينات

التضمين هو أسلوب يُستخدَم لتمثيل المعلومات كقائمة بأرقام النقاط العائمة في مصفوفة. باستخدام Gemini، يمكنك تمثيل النص (كلمات وجمل وأجزاء نص) في شكل متّجه، ما يسهّل مقارنة عمليات التضمين والتباين بينها. على سبيل المثال، يجب أن يحتوي نصان يتشاركان في موضوع أو وجهة نظر مماثلة على تضمينات متشابهة يمكن تحديدها من خلال تقنيات المقارنة الرياضية مثل تشابه جيب التمام.

استخدِم نموذج embedding-001 مع طريقة embedContent (أو طريقة batchEmbedContent) لإنشاء عمليات تضمين. ينشئ المثال التالي عملية تضمين لسلسلة واحدة:

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // For embeddings, use the embedding-001 model
  const model = genAI.getGenerativeModel({ model: "embedding-001"});

  const text = "The quick brown fox jumps over the lazy dog."

  const result = await model.embedContent(text);
  const embedding = result.embedding;
  console.log(embedding.values);
}

run();

استدعاء الدوال

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

عدد الرموز المميّزة

عند استخدام المطالبات الطويلة، قد يكون من المفيد حساب الرموز قبل إرسال أي محتوى إلى النموذج. توضِّح الأمثلة التالية كيفية استخدام علامة countTokens() لحالات الاستخدام المختلفة:

// For text-only input
const { totalTokens } = await model.countTokens(prompt);
// For text-and-image input (multimodal)
const { totalTokens } = await model.countTokens([prompt, ...imageParts]);
// For multi-turn conversations (like chat)
const history = await chat.getHistory();
const msgContent = { role: "user", parts: [{ text: msg }] };
const contents = [...history, msgContent];
const { totalTokens } = await model.countTokens({ contents });

خيارات التحكّم في إنشاء المحتوى

يمكنك التحكم في إنشاء المحتوى من خلال ضبط مَعلمات النماذج واستخدام إعدادات الأمان.

تجدر الإشارة إلى أنّ تمرير generationConfig أو safetySettings إلى طريقة طلب نموذج (مثل generateContent) سيؤدي تمامًا إلى إلغاء كائن الإعدادات الذي تم تمريره بالاسم نفسه في getGenerativeModel.

ضبط مَعلمات النموذج

إنّ كل طلب ترسله إلى النموذج يتضمّن قيم معلَمات تتحكّم في طريقة إنشاء النموذج للاستجابة. يمكن أن ينشئ النموذج نتائج مختلفة لقيم معاملات مختلفة. اطّلِع على مزيد من المعلومات عن مَعلمات النماذج.

const generationConfig = {
  stopSequences: ["red"],
  maxOutputTokens: 200,
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
};

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash",  generationConfig });

استخدام إعدادات الأمان

يمكنك استخدام إعدادات الأمان لضبط احتمالية تلقّي ردود قد تُعتبر ضارة. تحظر إعدادات الأمان تلقائيًا المحتوى الذي يضم احتمال متوسط و/أو مرتفعًا أن يكون محتوى غير آمن على مستوى جميع الأبعاد. مزيد من المعلومات حول إعدادات الأمان

وإليك كيفية ضبط أحد إعدادات الأمان:

import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

// ...

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
];

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });

يمكنك أيضًا ضبط أكثر من إعداد أمان واحد، وذلك باتّباع الخطوات التالية:

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
  {
    category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
    threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
  },
];

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

  • تصميم الطلب هو عملية إنشاء طلبات تستدعي الاستجابة المطلوبة من النماذج اللغوية. تعد كتابة المطالبات المنظمة بشكل جيد جزءًا أساسيًا من ضمان ردود دقيقة وعالية الجودة من النموذج اللغوي. تعرَّف على أفضل الممارسات لكتابة الطلبات.

  • يقدم Gemini نماذج متنوعة لتلبي احتياجات حالات الاستخدام المختلفة، مثل أنواع الإدخال والتعقيد وعمليات التنفيذ للدردشة أو مهام لغة الحوار الأخرى وقيود الحجم. تعرَّف على طُرز Gemini المتوفّرة.

  • يوفّر Gemini خيارات لطلب زيادة الحدّ الأقصى للمعدّل. الحدّ الأقصى لمعدّل الزحف لطُرز Gemini Pro هو 60 طلبًا في الدقيقة (RPM).