מבצעים אוטומציה של משימות ב-Google Workspace באמצעות Gemini API

1. לפני שמתחילים

ב-Codelab הזה מוסבר איך לבצע אוטומציה של משימות ב-Google Workspace באמצעות התכונות של שליחת קריאות לפונקציות וריבוי מודלים של Gemini API.

דרישות מוקדמות

  • היכרות בסיסית עם Apps Script, JavaScript או שפת תכנות דומה

מה לומדים

  • איך נעזרים בתכונות של Gemini API להפעלת הפונקציות ובריבוי שיטות.
  • איך לשרשר כמה קריאות ל-Gemini API יחד.
  • איך מבצעים אוטומציה של משימות ב-Google Workspace בעזרת Gemini API

מה צריך

  • דפדפן אינטרנט.
  • חשבון Gmail. לחלופין, חשבון Google Workspace שבו הוטמע ההגדרה הספציפית של Gemini API.
  • חיבור מאזור נתמך של Gemini API.
  • אופציונלי: ממשק שורת הפקודה (CLI) עם התוכנה curl לבדיקת בקשות API ישירות.

הקוד המלא של ה-Codelab הזה זמין ב-Gemini API Cookbook ב-GitHub. כדאי לבדוק אם יש לך צורך בקוד המלא.

2. הגדרת Gemini API

מידע על Gemini

המודלים של Gemini הם קבוצת המודלים הגדולה ביותר והמשוכללת ביותר של AI מבית Google. כדי לנצל את המודלים האלה באפליקציות, אפשר להשתמש ב-Gemini API. אפשר גם לנסות את Gemini API ב-Google AI Studio – ממשק אינטרנט של ה-API שבו אפשר לנסות הנחיות, לשנות את הגדרות המודל ולכוונן מודלים מותאמים אישית בלי לכתוב קוד.

לקבלת מפתח

אופציונלי: בדיקת המפתח

אם יש לכם גישה לשורת הפקודה עם curl, הוסיפו את המפתח שלכם לשורה הראשונה של הבלוק הבא ואז מריצים אותו בטרמינל כדי לבדוק את מפתח ה-API.

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 כדי להבין טוב יותר איך עובד יצירת התוכן, לפני שמוסיפים אותו לאפליקציית Apps Script.

מידע על המודלים

ב-Gemini API יש כמה מודלים עם יכולות שונות ומגבלות שונות. כל אחד מהמודלים מפורט בדף המודלים של Gemini והיכולות שלהם.

שליחת הבקשה הראשונה

כדי ש-Gemini API ימלא הנחיית טקסט, צריך ליצור בקשת JSON ולשלוח אותה לנקודת הקצה ל-API ל-REST.

לשם כך, בצע את הצעדים הבאים:

  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 מציין את גרסת ה-API.
  • gemini-1.0-pro-latest מציין את Gemini 1.0 Pro כמודל ומשתמש בתמונת המצב האחרונה.
  • generateContent מציין את שיטת ה-API שרוצים לקרוא.

אמורות להתקבל תוצאות שדומות לאלה:

{
  "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 דרך Apps Script

  1. אפשר לעבור אל script.new וקובץ Apps Script של code.gs נוצר באופן אוטומטי.
  2. מחזיקים את הסמן מעל הקובץ code.gs ואז לוחצים על 8bfe57773be886ab.png > שינוי שם.
  3. משנים את שם הקובץ ל-utils.gs.
  4. בקובץ, מסירים את הפונקציה myFunction כדי שהקובץ יהיה ריק.

הוספת מפתח API לפרויקט

  1. בתפריט הניווט, בוחרים באפשרות Project settings (הגדרות הפרויקט).
  2. בקטע מאפייני סקריפט, לוחצים על הוספת נכס סקריפט.
  3. בקטע נכס, מזינים GOOGLE_API_KEY.
  4. בקטע ערך, מזינים את מפתח ה-API מ-Google AI Studio.

fcfe205a93879c49.png

  1. לוחצים על Save script properties (שמירת מאפייני הסקריפט).
  2. חוזרים לעורך.

הוספת הקוד של Gemini API

בקובץ utils.gs, מבצעים את השלבים הבאים:

מגדירים את מפתח ה-API ואת נקודת הקצה:

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;
}

מידע נוסף על הסכימה הזו ועל השדות הזמינים זמין בחומר העזר בנושא API של 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. לא קוראים לפונקציה date-time בפועל. תקבלו רק אינדיקציה לכך שהמודל ביקש להפעיל פונקציה. הטיפול בקריאות לפונקציות יתבצע בשלב מאוחר יותר.

  1. כדי לראות את הפלט, צריך לשמור ולהפעיל את הפונקציה testGeminiTools.

יומן ביצוע

7. סקירה כללית של שילובי ההדגמה ב-Google Workspace

עכשיו, אחרי שהבנת איך פועלות קריאות לפונקציות, יש לך אפשרות להרחיב בקלות את היכולות של המודל של Gemini לשירותים אחרים. בקטעים הבאים תוכלו ליצור שילובים עם מוצרי Google Workspace, כמו Google Drive, Google Slides ו-Google Sheets. הנה תרשים פשוט יותר:

3 כלים

ככלל, בכל פעם שמתקבלת שאילתה של משתמש, צריך להשתמש בפונקציה של Gemini API כדי לקבוע באיזה כלי להשתמש. יצרנו שלושה כלים שיכולים לבצע את הפעולות הבאות:

  • לקבוע פגישה. הפונקציה setupMeeting() בתרשים מפעילה את Gemini 1.0 Pro API כדי לסכם בלוג ב-Google Drive ולהוסיף את הסיכום לפגישה שנוצרה לאחרונה ביומן Google.
  • כתיבת טיוטה של הודעת אימייל על סמך תובנות מתרשים. הפונקציה draftEmail() בתרשים מפעילה את Gemini 1.0 Pro Vision כדי לנתח תרשים ב-Google Sheets ולכתוב אימייל ב-Gmail על סמך הניתוח.
  • יוצרים מצגות שלד. הפונקציה createDeck() בתרשים מפעילה את Gemini 1.0 Pro כדי לבצע סיעור מוחות על נקודות למצגת ב-Google Slides.

עבור כל כלי צריך לבצע את שלושת הדברים הבאים:

  1. קובעים אם התגובה לקריאה לפונקציה של Gemini API מבקשת להפעיל את הכלי הספציפי הזה בבלוק if...else.
  2. כדי להטמיע את הפונקציונליות של הכלי צריך להוסיף את הפונקציה בפועל.
  3. צריך להצהיר על הכלי עם Gemini API כדי שמודל Gemini יידע על קיומו של הכלי ויוכל להחזיר את התשובה הנכונה לקריאה לפונקציה.

8. קביעת פגישה באמצעות Apps Script

בשלב הראשון מגדירים אוטומטית את הפגישה ביומן 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. מימין לכלי העריכה, לצד שירותים לוחצים על + הוספת שירות > ממשק API של יומן Google > הוספה. הפעולה הזו תפעיל את השירות המתקדם של יומן Google, שיהיה עליך להשתמש בו בחלק מממשקי ה-API המתקדמים מאוחר יותר.

הוספת שירות

  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. ניסוח אימייל באמצעות Apps Script

בשלב הבא, מגדירים אוטומציה של טיוטת האימייל ב-Gmail. הנה התרחיש: נניח שאתם מבצעים ניתוח נתונים ב-Google Sheets. עליכם להזין את כל המספרים במקומם וליצור תרשים. ברצונך להשתמש ב-Gemini Pro Vision API כדי לנסח אימייל על סמך התרשים.

לשם כך, בצע את הצעדים הבאים:

  1. פותחים את הגיליון הזה ולוחצים על File -> (קובץ ->). יצירת עותק.
  2. בתיבת הטקסט Name של תיבת הדו-שיח העתקת המסמך, מחליפים את השם המוגדר כברירת מחדל 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. יצירת מצגת בסיסית באמצעות Apps Script

בשלב הבא, תוכלו להפוך את יצירת המצגת הבסיסית ב-Google Slides לאוטומטי, באמצעות Apps Script.

לשם כך, בצע את הצעדים הבאים:

  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, ולאחר מכן להשתמש ב-Apps Script כדי למלא מצגת שלד.

  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 ו-Codelab איך יוצרים אפליקציות ל-Google Chat בעזרת Gemini.
  • אחזור-Augmented Generation (RAG) עם נתונים משלכם ב-Google Drive או ב-Keep. ב-Codelab הזה משתמשים רק בקובץ טקסט אחד לסיכום. עם זאת, אתם יכולים גם להשתמש בתוכן מ-Google Drive ומ-Keep – כמו הערות, קובצי PDF ותמונות – באמצעות Gemini API, מסד נתונים וקטורים, ואופציונלית גם בכלי תזמור – כמו LangChain – כדי לבצע RAG ולהתאים אישית את התשובה של המודל על סמך הנתונים שלכם.
  • להשתמש ביכולת של Gemini API לשליחת קריאות לפונקציות מרובות. הקריאה לפונקציה של Gemini API מוגבלת לפנייה אחת, ואפשר לבצע הפעלה של מספר פניות באמצעות פונקציות שונות לביצוע משימות מורכבות עוד יותר.
  • מעבר ל-Google Workspace עכשיו, אחרי שהבנת איך לשלב את Gemini API עם Google Workspace, אפשר להרחיב את הגישה אל מעבר ל-Google Workspace ולהשתמש בממשקי API אחרים בעולם.

12. מזל טוב

למדנו על היכולות של Gemini API וקריאות לפונקציות במגוון מצבים. השתמשת בהן כדי להפוך חלק מהמשימות ב-Google Workspace לאוטומטיות באמצעות Apps Script.

מידע נוסף