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


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

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

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

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

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

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

  • الإصدار 18 من Node.js والإصدارات الأحدث
  • دورة في الدقيقة

إعداد مشروعك

قبل طلب البيانات من 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 API وعمليات تضمين المحتوى.

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

إذا كان نص الطلب يتضمّن نصًا فقط، استخدِم نموذج 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 API. يصف هذا القسم بعض حالات الاستخدام التي يمكن اعتبارها أكثر تقدمًا.

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

التضمين هو أسلوب يُستخدَم لتمثيل المعلومات كقائمة بأرقام النقاط العائمة في مصفوفة. من خلال 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 المتاحة