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

1. قبل البدء

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

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

  • الإلمام الأساسي ببرمجة التطبيقات أو 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، مثلاًmodel/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 من "برمجة تطبيقات Google"

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

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

  1. في قائمة التنقّل، اختَر إعدادات المشروع.
  2. ضمن مواقع النص البرمجي، انقر على إضافة موقع نص برمجي.
  3. ضمن الموقع، أدخِل GOOGLE_API_KEY.
  4. ضمن Value (القيمة)، أدخِل مفتاح واجهة برمجة التطبيقات من 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 API من خلال طلب محدّد:
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 API.

اختباره

  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 لتلخيص مدوّنة على Google Drive وإضافة الملخّص إلى اجتماع تم إنشاؤه حديثًا في "تقويم Google".
  • صياغة رسالة إلكترونية استنادًا إلى إحصاءات من رسم بياني تستدعي الوظيفة draftEmail() في الرسم البياني رؤية Gemini 1.0 Pro Vision لتحليل رسم بياني في "جداول بيانات Google" وإنشاء رسالة إلكترونية في Gmail استنادًا إلى التحليل.
  • إنشاء مجموعة هيكل عظمي: تستدعي الدالة createDeck() في الرسم البياني الإصدار 1.0 من Gemini Pro لتبادل الأفكار حول عرض تقديمي في "العروض التقديمية من Google".

بالنسبة إلى كل أداة، تحتاج إلى إجراء الأشياء الثلاثة التالية:

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

8. إعداد اجتماع باستخدام "برمجة تطبيقات Google"

أولاً، يمكنك إعداد اجتماع تلقائيًا في "تقويم 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 > إضافة يؤدي ذلك إلى تفعيل خدمة "تقويم 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 لتلخيص محتوى الملف وإعداد اجتماع باستخدام تطبيق "تقويم Google" باستخدام وصف بتصميم مرن وإضافة الملخّص إلى الاجتماع.
  • تستدعي الدالة 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" باستخدام "برمجة تطبيقات 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، ثم استخدم لغة برمجة التطبيقات لملء مجموعة هيكلية.

  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، لإجراء عملية RAG وتخصيص ردّ النموذج استنادًا إلى بياناتك.
  • الاستعانة بواجهة برمجة التطبيقات لاستدعاء الدوال المتعدّدة الأدوار في Gemini API لا يقتصر استدعاء الوظائف من Gemini API على دور واحد، ويمكنك استدعاء الدوال المتعددة الأدوار لأداء المهام الأكثر تعقيدًا.
  • تجاوز Google Workspace. بعد أن فهمت كيفية دمج واجهة برمجة التطبيقات Gemini API مع Google Workspace، يمكنك تجاوز Google Workspace والاستفادة من واجهات برمجة التطبيقات الأخرى في العالم.

12. تهانينا

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

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