تنفيذ المهام تلقائيًا في Google Workspace باستخدام Gemini API

1. قبل البدء

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية أتمتة مهام Google Workspace باستخدام ميزتَي استدعاء الدالة ومعالجة الوسائط المتعددة في Gemini API.

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

  • معرفة أساسية بـ "برمجة تطبيقات Google" أو JavaScript أو لغة برمجة مشابهة

ما ستتعلمه

  • كيفية الاستفادة من ميزتَي استدعاء الدالة ومعالجة الوسائط المتعددة في Gemini API
  • كيفية ربط طلبات متعدّدة من Gemini API معًا
  • كيفية تنفيذ مهام Google Workspace تلقائيًا باستخدام Gemini API

ما تحتاج إليه

  • متصفّح ويب
  • حساب Gmail بدلاً من ذلك، يمكنك استخدام حساب Google Workspace تم فيه تنفيذ الإعدادات المحدّدة لواجهة برمجة التطبيقات Gemini API.
  • يجب أن يكون الاتصال من منطقة تتوفّر فيها واجهة برمجة التطبيقات Gemini API.
  • اختياري: واجهة سطر أوامر مع برنامج curl لاختبار طلبات البيانات من واجهة برمجة التطبيقات مباشرةً

يتوفّر الرمز البرمجي الكامل لهذا الدرس التطبيقي حول الترميز في كتاب وصفات Gemini API على GitHub. يمكنك الاطّلاع عليه إذا كنت بحاجة إلى الرمز المكتمل.

2. إعداد Gemini API

لمحة عن Gemini

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

الحصول على مفتاح

اختياري: اختبار المفتاح

إذا كان بإمكانك الوصول إلى سطر الأوامر باستخدام curl، أضِف مفتاحك إلى السطر الأول من الكتلة التالية ثم شغِّله في الوحدة الطرفية لاختبار مفتاح واجهة برمجة التطبيقات.

export GOOGLE_API_KEY=Paste_your_API_key_here

curl "https://generativelanguage.googleapis.com/v1beta/models?key=${GOOGLE_API_KEY}"

ستظهر لك قائمة بنماذج بتنسيق JSON، مثل models/gemini-1.0-pro. وهذا يعني أنّها نجحت.

3- اختياري: إرسال طلب إلى Gemini API

في هذه الخطوة الاختيارية، يمكنك إرسال طلب إلى Gemini API لفهم طريقة إنشاء المحتوى بشكل أفضل قبل إضافته إلى تطبيق "برمجة تطبيقات Google".

لمحة عن النماذج

توفّر Gemini API عددًا من النماذج التي تتضمّن إمكانات وقيودًا مختلفة. يتم إدراج كل نموذج مع إمكاناته في صفحة نماذج Gemini.

تقديم طلبك الأول

لإكمال طلب نصي باستخدام Gemini API، عليك إنشاء طلب JSON وإرساله إلى نقطة نهاية REST API.

ولإجراء ذلك، اتبع الخطوات التالية:

  1. في ملف جديد، أدخِل طلب JSON التالي:
{
  contents: [
   {
     parts: [
       { text: 'The most important aspects of a persuasive presentation are:' }
     ]
   }
 ]
}

يتضمّن طلب JSON الطلب التالي: The most important aspects of a persuasive presentation are:. سيكمل النموذج هذه التعليمات ويقدّم لك النتيجة مباشرةً.

يحتوي طلب JSON على ثلاثة حقول ذات مستوى أعلى يجب ملؤها: contents وgenerationConfig وsafetySettings. يجب توفير contents فقط. وتوفّر الحزم الأخرى آليات للتحكّم في الناتج.

  1. احفظ ملف JSON هذا في ملف presentation.txt، ثم مرِّره مباشرةً إلى curl على النحو التالي:
curl -H 'Content-Type: application/json' -X POST -d @presentation.txt \
  'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-latest:generateContent?key='${GOOGLE_API_KEY}

في هذا المثال، يمكنك ضبط القيم التالية في عنوان URL:

  • تحدّد v1beta إصدار واجهة برمجة التطبيقات.
  • gemini-1.0-pro-latest تحدّد Gemini 1.0 Pro كنموذج وتستخدم أحدث لقطة.
  • يمثّل generateContent طريقة واجهة برمجة التطبيقات التي تستدعيها.

من المفترض أن تظهر لك نتائج مشابهة لما يلي:

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "* **Credibility:** The audience must trust that you are an expert on the subject matter and that you have their best interests at heart.\n* **Clearness:** Your message must be easy to understand and follow. Avoid using jargon or technical terms that your audience may not be familiar with.\n* **Concreteness:** Use specific examples and data to support your arguments. Avoid making vague or general claims.\n* **Emotional appeal:** In addition to appealing to the audience's logical side, you should also try to connect with them on an emotional level. Use storytelling, humor, and personal anecdotes to make your points more memorable and engaging.\n* **Strong closing:** End your presentation with a strong call to action. Tell the audience what you want them to do and why it is important for them to do it."
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [...]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [...]
  }
}

لسهولة القراءة، إليك ناتج المحطة الطرفية منسّقًا بشكل منتظم:

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

لمزيد من المعلومات حول الإعدادات الأخرى، بما في ذلك generationConfig وsafetySettings، يُرجى الاطّلاع على دليلَي الطلبات و الأمان.

4. استدعاء Gemini API من برمجة تطبيقات

  1. انتقِل إلى script.new وسيتم إنشاء ملف code.gs "برمجة تطبيقات Google" لك تلقائيًا.
  2. مرِّر المؤشر فوق ملف code.gs، ثم انقر على 8bfe57773be886ab.png > إعادة تسمية.
  3. غيِّر اسم الملف إلى utils.gs.
  4. في الملف، أزِل الدالة myFunction ليكون الملف فارغًا.

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

  1. في قائمة التنقّل، انقر على إعدادات المشروع.
  2. ضمن خصائص النص البرمجي، انقر على إضافة خاصية للنص البرمجي.
  3. ضمن الموقع، أدخِل GOOGLE_API_KEY.
  4. ضمن القيمة، أدخِل مفتاح واجهة برمجة التطبيقات من Google AI Studio.

fcfe205a93879c49.png

  1. انقر على حفظ مواقع النص البرمجي.
  2. ارجع إلى المحرّر.

إضافة رمز Gemini API

في utils.gs، اتّبِع الخطوات التالية:

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

const properties = PropertiesService.getScriptProperties().getProperties();
const geminiApiKey = properties['GOOGLE_API_KEY'];
const geminiEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-latest:generateContent?key=${geminiApiKey}`;
  1. أضِف الدالة التالية التي تستدعي واجهة برمجة تطبيقات Gemini باستخدام طلب محدّد:
function callGemini(prompt, temperature=0) {
  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
        ]
      }
    ], 
    "generationConfig":  {
      "temperature": temperature,
    },
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["text"];
  return content;
}
  1. أضِف الدالة التالية التي تضبط الطلب:
function testGemini() {
  const prompt = "The best thing since sliced bread is";
  const output = callGemini(prompt);
  console.log(prompt, output);
}

اختبارها

  1. انقر على 76113423d1f91775.png حفظ.
  2. اختَر testGemini في القائمة المنسدلة للدالة وانقر على 5b9034ff679c8761.png.
  3. قبول الأذونات اللازمة يجب أن يتم تشغيل الرمز البرمجي وأن تظهر لك بعض النتائج في سجل التنفيذ.

سجلّ التنفيذ

نجح الأمر!

5- استدعاء Gemini API باستخدام الصور

من أبرز ميزات عائلة نماذج Gemini إمكانية إدخال بيانات متعددة الوسائط، ما يعني أنّه يمكنك تقديم أكثر من مجرد نص. في هذا القسم، ستضيف دالة تستدعي واجهة برمجة التطبيقات Gemini API باستخدام صورة.

  • في أعلى ملف utils.gs بعد تعريف const geminiEndpoint الحالي، أضِف السطر التالي:
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${geminiApiKey}`;

إضافة رمز Gemini Vision

  1. أضِف دالة إلى ملف utils.gs لاستدعاء نقطة النهاية التي تمت إضافتها حديثًا:
function callGeminiProVision(prompt, image, temperature=0) {
  const imageData = Utilities.base64Encode(image.getAs('image/png').getBytes());

  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": imageData
            }
          }          
        ]
      }
    ], 
    "generationConfig":  {
      "temperature": temperature,
    },
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiProVisionEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["text"];
  return content;
}
  1. أضِف دالة الاختبار التالية:
function testGeminiVision() {
  const prompt = "Provide a fun fact about this object.";
  const image = UrlFetchApp.fetch('https://storage.googleapis.com/generativeai-downloads/images/instrument.jpg').getBlob();
  const output = callGeminiProVision(prompt, image);
  console.log(prompt, output);
}

تحمّل هذه الدالة صورة اختبارية من الإنترنت وتمرّرها إلى الدالة التي حدّدتها. في وقت لاحق، ستضبطه لاستخدام رسم بياني من جدول بيانات، لذا هذا مجرد اختبار.

اختبارها

  • احفظ الدالة testGeminiVision وشغِّلها، ثم افحص الناتج.

849c6728bfb5ec52.png

6. استدعاء Gemini API باستخدام الأدوات

بالإضافة إلى النص والصور، يمكنك أيضًا توفير إذن الوصول إلى الأدوات في طلباتك.

إضافة رمز معالجة الأداة

  • أضِف دالة إلى الملف utils.gs تقبل مواصفات أداة:
function callGeminiWithTools(prompt, tools, temperature=0) {
  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
        ]
      }
    ], 
    "tools" : tools,
    "generationConfig":  {
      "temperature": temperature,
    },    
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["functionCall"];
  return content;
}

لمزيد من المعلومات عن هذا المخطط والحقول المتاحة، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات FunctionDeclaration.

اختبارها

  1. حدِّد أداة يمكن للنموذج استخدامها للعثور على التاريخ والوقت الحاليَّين:
function testGeminiTools() {
  const prompt = "Tell me how many days there are left in this month.";
  const tools = {
    "function_declarations": [
      {
        "name": "datetime",
        "description": "Returns the current date and time as a formatted string.",
        "parameters": {
          "type": "string"
        }
      }
    ]
  };
  const output = callGeminiWithTools(prompt, tools);
  console.log(prompt, output);
}

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

  1. احفظ الدالة testGeminiTools وشغِّلها للاطّلاع على الناتج.

سجلّ التنفيذ

7. نظرة عامة على عمليات الدمج التجريبية مع Google Workspace

بعد أن تعرّفت على طريقة عمل ميزة "استدعاء الدوال"، يمكنك بسهولة توسيع إمكانات نموذج Gemini لتشمل خدمات أخرى. في الأقسام القليلة التالية، ستنشئ عمليات دمج مع منتجات Google Workspace، مثل Google Drive و"العروض التقديمية من Google" و"جداول بيانات Google". في ما يلي رسم بياني مبسَّط:

3 أدوات

بشكل عام، عندما يصل طلب بحث من المستخدم، يمكنك استخدام ميزة "استدعاء الدوال البرمجية" في Gemini API لتحديد الأداة التي يجب استخدامها. يمكنك إنشاء ثلاث أدوات يمكنها تنفيذ ما يلي:

  • إعداد اجتماع تستدعي الدالة setupMeeting() في المخطط Gemini 1.0 Pro API لتلخيص مدونة في Google Drive وإضافة الملخّص إلى اجتماع تم إنشاؤه حديثًا في "تقويم Google".
  • كتابة مسودة رسالة إلكترونية استنادًا إلى إحصاءات من رسم بياني تستدعي الدالة draftEmail() في المخطّط البياني Gemini 1.0 Pro Vision لتحليل رسم بياني في "جداول بيانات Google" وإنشاء رسالة إلكترونية في Gmail استنادًا إلى التحليل.
  • إنشاء عرض تقديمي أساسي تستدعي الدالة createDeck() في المخطط Gemini 1.0 Pro لتبادل الأفكار حول نقاط تعداد لعرض تقديمي في "العروض التقديمية من Google".

يجب تنفيذ الإجراءات الثلاثة التالية لكل أداة:

  1. تحديد ما إذا كان ردّ طلب تنفيذ الدالة في Gemini API يطلب استدعاء تلك الأداة المحدّدة في حظر if...else
  2. أضِف الدالة الفعلية لتنفيذ وظائف الأداة.
  3. عرِّف الأداة باستخدام Gemini API لكي يعرف نموذج Gemini أنّ الأداة متوفّرة ويتمكّن من عرض الردّ الصحيح على طلب استخدام الوظيفة.

8. تحديد موعد اجتماع باستخدام برمجة تطبيقات

أولاً، يمكنك إعداد اجتماع في "تقويم Google" بشكل آلي، ولكن يمكنك أيضًا إضافة وصف، وهو عبارة عن ملخّص لملف في Google Drive.

ولإجراء ذلك، اتبع الخطوات التالية:

  1. نزِّل ملفًا نصيًا يتضمّن نسخة نصية من منشور مدوّنة إطلاق Gemini 1.5 Pro.
  2. حمِّل الملف إلى المجلد الجذر في Google Drive.
  3. في المحرّر، أنشئ ملف main.gs ثم أضِف الرمز التالي:
function main() {
  const userQuery = "Set up a meeting at 10AM tomorrow with Helen to discuss the news in the Gemini-blog.txt file.";

  var tool_use = callGeminiWithTools(userQuery, WORKSPACE_TOOLS);
  Logger.log(tool_use);
  
  if(tool_use['name'] == "setupMeeting") {
    setupMeeting(tool_use['args']['time'], tool_use['args']['recipient'], tool_use['args']['filename']);
    Logger.log("Your meeting has been set up.");
 }
  else
    Logger.log("no proper tool found");
}

في هذا القسم، يمكنك استدعاء إمكانية استدعاء الدوال في Gemini API. بعد ذلك، عليك تحديد وظيفة الأداة.

  1. على يمين المحرّر، بجانب الخدمات، انقر على + إضافة خدمة > Google Calendar API > إضافة. يؤدي ذلك إلى تفعيل خدمة "تقويم Google" المتقدّمة التي تحتاج إلى استخدامها مع بعض واجهات برمجة التطبيقات المتقدّمة لاحقًا.

إضافة خدمة

  1. في ملف utils.gs، أضِف الرمز التالي:
function attachFileToMeeting(event, file, fileName) {
  // Get the iCal ID for the event.
  const iCalEventId = event.getId();

  // Log the ID and title for debugging.
  console.log(`iCal event ID: ${iCalEventId}`);
  console.log(`event Title: ${event.getTitle()}`);

  // Set up the options for listing the event with the advanced Google Calendar service.
  const options = {
      iCalUID: iCalEventId,
    };

  // Use the primary calendar as the calendar ID to list events.
  const calendarId = 'primary';

  // Use the advanced Google Calendar service to list the event.
  const calEvents = Calendar.Events.list(calendarId, options);

  // Get the Calendar ID used by the advanced Google Calendar service.
  const eventId = calEvents.items[0].id;

  // Get the file URL for the attachment.
  const fileUrl = file.getUrl();

    // Set up the patch options to add the file.
    var patch = {
      attachments: [{
        'fileUrl': fileUrl,
        'title': fileName
      }]
    };

    // Patch the event to add the file as an attachment.
    Calendar.Events.patch(patch, 'primary', eventId, {"supportsAttachments": true});  
}

function setupMeeting(time, recipient, filename) {
  const files = DriveApp.getFilesByName(filename);
  const file = files.next();
  const blogContent = file.getAs("text/*").getDataAsString();
  
  var geminiOutput = callGemini("Give me a really short title of this blog and a summary with less than three sentences. Please return the result as a JSON with two fields: title and summary. \n" +  blogContent);
  // The Gemini model likes to enclose the JSON with ```json and ```
  geminiOutput = JSON.parse(geminiOutput.replace(/```(?:json|)/g, ""));  
  const title = geminiOutput['title'];
  const fileSummary = geminiOutput['summary'];

  const event = CalendarApp.getDefaultCalendar().createEventFromDescription(`meet ${recipient} at ${time} to discuss "${title}"`); 
  event.setDescription(fileSummary);
  attachFileToMeeting(event, file, filename);
}

تنفّذ هذه التعليمات البرمجية ما يلي:

  • تنتقل الدالة setupMeeting() إلى Google Drive وتعثر على الملف Gemini-blog.txt. يتم عرض اسم الملف هذا تلقائيًا من خلال ميزة "استدعاء الدوال" في Gemini API في الخطوة رقم 3.
  • تستدعي الدالة setupMeeting() واجهة برمجة التطبيقات Gemini API لتلخيص محتوى الملف، وتُعدّ اجتماعًا باستخدام CalendarApp مع وصف حر، وتضيف الملخّص إلى الاجتماع.
  • تستدعي الدالة setupMeeting() الدالة attachFileToMeeting() لاستخدام خدمة "تقويم Google" المتقدّمة من أجل إرفاق ملف المدوّنة بالاجتماع.
  1. في أعلى ملف utils.gs، أضِف الرمز التالي:
const WORKSPACE_TOOLS = {
 "function_declarations": [
   {
     "name": "setupMeeting",
     "description": "Sets up a meeting in Google Calendar.",
     "parameters": {
       "type": "object",
       "properties": {
         "time": {
           "type": "string",
           "description": "The time of the meeting."
         },
         "recipient": {
           "type": "string",
           "description": "The name of the recipient."
         },   
         "filename": {
           "type": "string",
           "description": "The name of the file."
         },                     
       },
       "required": [
         "time",
         "recipient",
         "filename"
       ]
     }
   },
   // You add tools here.        
 ]
};
  1. في أداة التعديل، ارجع إلى ملف main.gs وانقر على 5b9034ff679c8761.png.
  2. إذا طلب منك Google Workspace الحصول على إذن لتشغيل النص البرمجي، انقر على حسنًا.

في غضون بضع ثوانٍ، يعرض سجلّ التنفيذ رسالة تُعلمك بأنّه تم إعداد اجتماعك.

  1. في "تقويم Google"، ابحث عن الاجتماع الذي يتضمّن الملخّص والمرفق.

دعوة الاجتماع

9- كتابة مسودة رسالة إلكترونية باستخدام "برمجة تطبيقات Google"

بعد ذلك، يمكنك إعداد عملية كتابة مسودة رسالة إلكترونية في Gmail لتتم تلقائيًا. إليك السيناريو: لنفترض أنّك تجري تحليل البيانات في "جداول بيانات Google". تضع جميع الأرقام في مكانها وتنشئ رسمًا بيانيًا. تريد استخدام Gemini Pro Vision API لإنشاء مسودة رسالة إلكترونية استنادًا إلى الرسم البياني.

ولإجراء ذلك، اتبع الخطوات التالية:

  1. افتح ورقة البيانات هذه وانقر على ملف -> إنشاء نسخة.
  2. في مربّع النص الاسم ضمن مربّع الحوار نسخ المستند، استبدِل الاسم التلقائي Copy of CollegeExpenses بالاسم CollegeExpenses.
  3. في الملف main.gs، استبدِل طلب بحث المستخدم السابق بطلب بحث جديد، ثم أضِف الرمز التالي إلى عبارة if...else:
function main() {
  // const userQuery = "Set up a meeting at 5PM with Helen to discuss the news in the Gemini-1.5-blog.txt file.";  
  const userQuery = "Draft an email for Mary with insights from the chart in the CollegeExpenses sheet.";

  if(...) {...}
  // Add this code
  else if(tool_use['name'] == "draftEmail") {
    draftEmail(tool_use['args']['sheet_name'], tool_use['args']['recipient']);
    Logger.log("Check your Gmail to review the draft");
  }
  else {...}

}
  1. في ملف utils.gs، أضِف الرمز التالي:
function draftEmail(sheet_name, recipient) {
  
  const prompt = `Compose the email body for ${recipient} with your insights for this chart. Use information in this chart only and do not do historical comparisons. Be concise.`;

  var files = DriveApp.getFilesByName(sheet_name);
  var sheet = SpreadsheetApp.openById(files.next().getId()).getSheetByName("Sheet1");
  var expenseChart = sheet.getCharts()[0];

  var chartFile = DriveApp.createFile(expenseChart.getBlob().setName("ExpenseChart.png"));
  var emailBody = callGeminiProVision(prompt, expenseChart);
  GmailApp.createDraft(recipient+"@demo-email-provider.com", "College expenses", emailBody, {
      attachments: [chartFile.getAs(MimeType.PNG)],
      name: 'myname'
  });
}

تستردّ هذه الدالة الرسم البياني الخاص بمصاريف الكلية من ورقة البيانات وترسله إلى Gemini Pro Vision لإنشاء مسودة الرسالة الإلكترونية. يستخرج Gemini Pro Vision المعلومات من الرسم البياني ويصيغ نص الرسالة الإلكترونية نيابةً عنك.

  1. في الملف utils.gs، أضِف الرمز التالي إلى العنصر WORKSPACE_TOOLS بعد التعليق You add tools here:
  WORKSPACE_TOOLS = {
    "function_declarations": [
      // You add tools here.

      {
        "name": "draftEmail",
        "description": "Write an email by analyzing data or charts in a Google Sheets file.",
        "parameters": {
          "type": "object",
          "properties": {
            "sheet_name": {
              "type": "string",
              "description": "The name of the sheet to analyze."
            },
            "recipient": {
              "type": "string",
              "description": "The name of the recipient."
            },            
          },
          "required": [
            "sheet_name",
            "recipient"
          ]
        }
      },   


    ]
  };
  1. في أداة التعديل، ارجع إلى ملف main.gs، ثم انقر على 5b9034ff679c8761.png.
  2. بعد 10 إلى 20 ثانية، افتح Gmail. من المفترض أن يظهر مسودة رسالة إلكترونية بالشكل التالي:

يمكنك مراجعة مسودّة الرسالة الإلكترونية قبل إرسالها. تمت كتابة الرسالة الإلكترونية بالكامل بواسطة Gemini Pro Vision بعد تقديم طلب قصير والمخطط البياني.

10. إنشاء عرض تقديمي أساسي باستخدام برمجة تطبيقات

بعد ذلك، يمكنك إعداد عملية إنشاء تلقائي لعرض تقديمي أساسي في "العروض التقديمية من Google" باستخدام "برمجة تطبيقات Google".

ولإجراء ذلك، اتبع الخطوات التالية:

  1. في الملف main.gs، استبدِل طلب بحث المستخدم السابق بطلب بحث جديد وأضِف الرمز التالي إلى عبارة if...else:
function main() {
  // const userQuery = "Draft an email for Mary with insights from the chart in the CollegeExpenses sheet.";
  const userQuery = "Help me put together a deck about water conservation.";

  if(...) {...}
  // Add this code
  else if(tool_use['name'] == 'createDeck') {
    deckURL = createDeck(tool_use['args']['topic']);
    Logger.log("Deck URL: " + deckURL);
  }
  else {...}

}
  1. في ملف utils.gs، أضِف الرمز التالي:
function createDeck(topic) {
  const prompt = `I'm preparing a ${NUM_SLIDES}-slide deck to discuss ${topic}. Please help me brainstorm and generate main bullet points for each slide. Keep the title of each slide short. Please produce the result as a valid JSON so that I can pass it to other APIs.`;
  
  var geminiOutput = callGemini(prompt, 0.4);
  // The Gemini model likes to enclose the JSON with ```json and ```
  geminiOutput = geminiOutput.replace(/```(?:json|)/g, "");
  const bulletPoints = JSON.parse(geminiOutput);
    
  // Create a Google Slides presentation.
  const presentation = SlidesApp.create("My New Presentation");

  // Set up the opening slide.
  var slide = presentation.getSlides()[0]; 
  var shapes = slide.getShapes();
  shapes[0].getText().setText(topic);

  var body;
  for (var i = 0; i < NUM_SLIDES; i++) {
      slide = presentation.appendSlide(SlidesApp.PredefinedLayout.TITLE_AND_BODY);
      shapes = slide.getShapes();
      // Set title.
      shapes[0].getText().setText(bulletPoints['slides'][i]['title']);
  
      // Set body.
      body = "";
      for (var j = 0; j < bulletPoints['slides'][i]['bullets'].length; j++) {
        body += '* ' + bulletPoints['slides'][i]['bullets'][j] + '\n';
      }
      shapes[1].getText().setText(body);
  } 

  return presentation.getUrl();
}

تستدعي هذه الدالة Gemini API لتبادل الأفكار حول موضوع معيّن، وتعرض النقاط في التنسيق

بتنسيق JSON، ثم استخدام "برمجة تطبيقات Google" لملء عرض تقديمي هيكلي.

  1. في الملف utils.gs، أضِف الرمز التالي إلى العنصر WORKSPACE_TOOLS بعد التعليق You add tools here:
  WORKSPACE_TOOLS = {
    "function_declarations": [
      // You add tools here.

      {
        "name": "createDeck",
        "description": "Build a simple presentation deck with Google Slides and return the URL.",
        "parameters": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "description": "The topic that the presentation is about."
            },
          },
          "required": [
            "topic"
          ]
        }
      },


    ]
  };
  1. في أعلى ملف utils.gs، حدِّد الثابت التالي:
const NUM_SLIDES = 3;

يشير هذا إلى عدد الشرائح التي ينشئها نموذج Gemini بالإضافة إلى الشريحة الافتتاحية.

  1. في أداة التعديل، ارجع إلى ملف main.gs، ثم انقر على 5b9034ff679c8761.png. بعد بضع ثوانٍ، سيظهر عنوان URL للعرض التقديمي في سجلّ التنفيذ.
  2. استخدِم المتصفّح لفتح عنوان URL. من المفترض أن تظهر لك مجموعة من الشرائح الأساسية التي تتضمّن نقاطًا.

مسودة العرض التقديمي

11. أفكار لاستكشافها

بالإضافة إلى عمليات الدمج الثلاث هذه، يمكنك استكشاف الأفكار التالية:

  • إنشاء روبوت محادثة على Google Chat من أكثر حالات الاستخدام شيوعًا للنماذج اللغوية الكبيرة (LLM) إنشاء روبوت دردشة. باستخدام Gemini API، يمكنك بسهولة إنشاء روبوت دردشة لتطبيق Google Chat. لمزيد من المعلومات، يُرجى الاطّلاع على Google Chat API وإنشاء تطبيقات في Google Chat باستخدام Gemini.
  • التوليد المعزّز بالاسترجاع (RAG) باستخدام بياناتك الخاصة في Google Drive أو Keep في هذا الدرس التطبيقي، ستستخدم ملفًا نصيًا واحدًا فقط لتلخيص المحتوى. ومع ذلك، يمكنك أيضًا استخدام المحتوى من حسابك الشخصي على Google Drive وKeep، مثل الملاحظات وملفات PDF والصور، مع Gemini API وقاعدة بيانات متجهة، وأداة تنسيق اختيارية، مثل LangChain، لتنفيذ عملية الاسترجاع المستند إلى البحث وتخصيص رد النموذج استنادًا إلى بياناتك.
  • استخدِم إمكانية طلب تنفيذ الدوال المتعددة في Gemini API. لا يقتصر استخدام الدوال في Gemini API على دورة واحدة، بل يمكنك الاستفادة من استخدام الدوال في عدة دورات لإنجاز مهام أكثر تعقيدًا.
  • الاستفادة من مزايا إضافية في Google Workspace بعد أن تعرّفت على كيفية دمج Gemini API مع Google Workspace، يمكنك الاستفادة من واجهات برمجة التطبيقات الأخرى في العالم.

12. تهانينا

تعرّفت على إمكانات Gemini API المتعددة الوسائط واستخدام الدوال. لقد استخدمت هذه الأدوات لتنفيذ بعض مهام Google Workspace تلقائيًا باستخدام "برمجة التطبيقات".

مزيد من المعلومات