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

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

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

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

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

מה לומדים

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

מה צריך

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

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

‫2. הגדרת Gemini API

מידע על Gemini

מודלי Gemini הם משפחת המודלים הכי גדולה ומתקדמת של Google בתחום ה-AI. כדי להשתמש במודלים האלה באפליקציות שלכם, אתם יכולים להשתמש ב-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 מציין את ה-method של ה-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. בתפריט הניווט, בוחרים באפשרות הגדרות הפרויקט.
  2. בקטע מאפייני סקריפט, לוחצים על הוספת מאפיין סקריפט.
  3. בקטע נכס, מזינים את GOOGLE_API_KEY.
  4. בקטע Value (ערך), מזינים את מפתח ה-API מ-Google AI Studio.

fcfe205a93879c49.png

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

  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. בצד ימין של העורך, ליד Services, לוחצים על + Add a service > Google Calendar API > Add. הפעולה הזו מפעילה את שירות Google Calendar המתקדם, שנדרש לשימוש בחלק מממשקי ה-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. פותחים את הגיליון ולוחצים על קובץ -> יצירת עותק.
  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. יצירת מצגת בסיסית באמצעות Apps Script

לאחר מכן, תשתמשו ב-Apps Script כדי ליצור באופן אוטומטי מצגת בסיסית ב-Google Slides.

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

  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. פותחים את כתובת האתר בדפדפן. אמורה להופיע מצגת עם נקודות.

טיוטת מצגת

11. רעיונות שכדאי לבדוק

בנוסף לשלושת השילובים האלה, אפשר לנסות את הרעיונות הבאים:

  • איך יוצרים צ'אטבוט ב-Google Chat אחד מתרחישי השימוש הפופולריים ביותר במודלים גדולים של שפה (LLM) הוא בניית צ'אטבוט. קל ליצור צ'אטבוט ל-Google Chat באמצעות Gemini API. מידע נוסף זמין במאמר בנושא Google Chat API וב-codelab Build apps for Google Chat with Gemini.
  • יצירת תוכן עם שליפה משופרת (RAG) באמצעות נתונים משלכם ב-Google Drive או ב-Keep. ב-codelab הזה, משתמשים רק בקובץ טקסט יחיד לסיכום. עם זאת, אפשר גם להשתמש בתוכן מ-Google Drive ומ-Keep האישיים שלכם – כמו הערות, קובצי PDF ותמונות – עם Gemini API, מסד נתונים וקטורי וכלי תזמור אופציונלי – כמו LangChain – כדי לבצע RAG ולהתאים אישית את התשובה של המודל על סמך הנתונים שלכם.
  • שימוש ביכולת של Gemini API לבצע קריאות לפונקציות בשיחה מרובת תפניות. השימוש בפונקציות ב-Gemini API לא מוגבל לתור אחד, ואפשר להשתמש בשימוש בפונקציות בכמה תורות כדי לבצע משימות מורכבות יותר.
  • אפשרויות נוספות מעבר ל-Google Workspace אחרי שהבנתם איך לשלב את Gemini API עם Google Workspace, אתם יכולים להשתמש בממשקי API אחרים בעולם.

12. מזל טוב

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

מידע נוסף