کارهای Google Workspace را با API Gemini به صورت خودکار انجام دهید

۱. قبل از شروع

در این آزمایشگاه کد، یاد می‌گیرید که چگونه وظایف Google Workspace را با ویژگی‌های فراخوانی تابع و چندوجهی بودن رابط برنامه‌نویسی Gemini خودکارسازی کنید.

پیش‌نیازها

  • آشنایی اولیه با Apps Script، جاوا اسکریپت یا زبان‌های برنامه‌نویسی مشابه

آنچه یاد می‌گیرید

  • چگونه از ویژگی‌های فراخوانی تابع و چندوجهی بودن API مربوط به Gemini بهره ببریم.
  • چگونه چندین فراخوانی API در Gemini را به صورت زنجیره‌ای به هم متصل کنیم؟
  • نحوه خودکارسازی وظایف Google Workspace با رابط برنامه‌نویسی Gemini.

آنچه شما نیاز دارید

  • یک مرورگر وب.
  • یک حساب جیمیل. یا به طور جایگزین، یک حساب Google Workspace که تنظیمات خاص Gemini API را پیاده‌سازی کرده باشد.
  • اتصالی از یک منطقه پشتیبانی‌شده برای رابط برنامه‌نویسی Gemini.
  • اختیاری: یک رابط خط فرمان با برنامه curl برای آزمایش درخواست‌های مستقیم API.

کد کامل این آزمایشگاه کد در کتاب آشپزی Gemini API در گیت‌هاب موجود است. در صورت نیاز به کد کامل، آن را بررسی کنید.

۲. تنظیم API جمینی

درباره جمینی

مدل‌های Gemini بزرگترین و توانمندترین خانواده مدل‌های هوش مصنوعی گوگل هستند. برای بهره‌گیری از این مدل‌ها در برنامه‌های خود، می‌توانید از 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، ببینید. این یعنی که کار کرده است.

۳. اختیاری: درخواستی به API Gemini ارسال کنید

در این مرحله اختیاری، شما درخواستی را به API Gemini ارسال می‌کنید تا قبل از افزودن محتوا به یک برنامه Apps Script، نحوه عملکرد آن را بهتر درک کنید.

درباره مدل‌ها

رابط برنامه‌نویسی نرم‌افزار Gemini تعدادی مدل با قابلیت‌ها و محدودیت‌های مختلف ارائه می‌دهد. هر یک از مدل‌ها به همراه قابلیت‌هایشان در صفحه مدل‌های 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 نسخه 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 ، به راهنماهای prompt و safety مراجعه کنید.

۴. فراخوانی API مربوط به Gemini از Apps Script

  1. به script.new مراجعه کنید و یک فایل اسکریپت برنامه‌های code.gs به طور خودکار برای شما ایجاد می‌شود.
  2. مکان‌نما را روی فایل code.gs نگه دارید و سپس کلیک کنید 8bfe57773be886ab.png > تغییر نام دهید .
  3. نام فایل را به utils.gs تغییر دهید.
  4. در فایل، تابع myFunction را حذف کنید تا فایل خالی شود.

کلید API خود را به پروژه اضافه کنید

  1. در منوی پیمایش، تنظیمات پروژه را انتخاب کنید.
  2. در قسمت ویژگی‌های اسکریپت ، روی افزودن ویژگی اسکریپت کلیک کنید.
  3. در قسمت Property ، GOOGLE_API_KEY را وارد کنید.
  4. در قسمت Value ، کلید API خود را از Google AI Studio وارد کنید.

fcfe205a93879c49.png

  1. روی ذخیره ویژگی‌های اسکریپت کلیک کنید.
  2. دوباره به ویرایشگر بروید.

کد 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. تابع زیر را که API مربوط به 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. مجوزهای لازم را بپذیرید. کد شما باید اجرا شود و باید خروجی کنسول را به همراه نتایج در گزارش اجرا مشاهده کنید.

گزارش اجرا

کار کرد!

۵. فراخوانی API مربوط به Gemini با تصاویر

یکی از قدرتمندترین ویژگی‌های خانواده مدل‌های Gemini، پشتیبانی از ورودی چندوجهی است، به این معنی که می‌توانید چیزی بیش از متن ارائه دهید! در این بخش، تابعی اضافه می‌کنید که API Gemini را با یک تصویر فراخوانی می‌کند.

  • در بالای فایل 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

۶. فراخوانی 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 را ذخیره و اجرا کنید.

گزارش اجرا

۷. مروری بر ادغام‌های نسخه‌های نمایشی با Google Workspace

حالا که متوجه شدید فراخوانی تابع چگونه کار می‌کند، می‌توانید به راحتی قابلیت‌های مدل Gemini را به سایر سرویس‌ها گسترش دهید. در چند بخش بعدی، یکپارچه‌سازی‌هایی را با محصولات Google Workspace مانند Google Drive، Google Slides و Google Sheets ایجاد خواهید کرد. در اینجا یک نمودار ساده شده آمده است:

۳ ابزار

در سطح بالا، وقتی یک پرس‌وجوی کاربر دریافت می‌شود، شما از فراخوانی تابع Gemini API برای تعیین اینکه از کدام ابزار استفاده شود، استفاده می‌کنید. شما سه ابزار می‌سازید که می‌توانند موارد زیر را انجام دهند:

  • یک جلسه تنظیم کنید . تابع setupMeeting() در نمودار، API مربوط به Gemini 1.0 Pro را برای خلاصه کردن یک وبلاگ در Google Drive و اضافه کردن خلاصه به یک جلسه تازه ایجاد شده در Google Calendar فراخوانی می‌کند.
  • بر اساس بینش‌های یک نمودار، یک ایمیل تهیه کنید . تابع draftEmail() در نمودار، Gemini 1.0 Pro Vision را برای تجزیه و تحلیل نمودار در Google Sheets فراخوانی می‌کند و بر اساس این تجزیه و تحلیل، یک ایمیل در Gmail می‌نویسد.
  • یک دسته فایل اسکلتی ایجاد کنید . تابع createDeck() در نمودار، نرم‌افزار Gemini 1.0 Pro را برای طوفان فکری و انتخاب نقاط بولت برای یک دسته فایل در گوگل اسلایدز فراخوانی می‌کند.

برای هر ابزار، باید سه کار زیر را انجام دهید:

  1. تعیین کنید که آیا پاسخ فراخوانی تابع API مربوط به Gemini درخواست فراخوانی آن ابزار خاص را در یک بلوک if...else یا خیر.
  2. تابع واقعی را برای پیاده‌سازی قابلیت ابزار اضافه کنید.
  3. ابزار را با API مربوط به Gemini تعریف کنید تا مدل Gemini از وجود ابزار مطلع شود و بتواند پاسخ صحیح فراخوانی تابع را برگرداند.

۸. با Apps Script یک جلسه تنظیم کنید

ابتدا، شما تنظیم یک جلسه را در تقویم گوگل خودکار می‌کنید، اما همچنین توضیحی اضافه می‌کنید که خلاصه‌ای از یک فایل در گوگل درایو است.

برای انجام این کار، این مراحل را دنبال کنید:

  1. این فایل متنی را که نسخه متنی وبلاگ عرضه Gemini 1.5 Pro است، دانلود کنید.
  2. فایل را در پوشه ریشه خود در گوگل درایو آپلود کنید.
  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 تقویم گوگل > افزودن کلیک کنید. این کار سرویس پیشرفته تقویم گوگل را فعال می‌کند که بعداً برای برخی از 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() در گوگل درایو شما جستجو می‌کند و فایل Gemini-blog.txt را پیدا می‌کند. این نام فایل به طور خودکار توسط تابع API مربوط به Gemini که در مرحله ۳ فراخوانی می‌شود، بازگردانده می‌شود.
  • تابع setupMeeting() رابط برنامه‌نویسی Gemini را فراخوانی می‌کند تا محتوای فایل را خلاصه کند، با استفاده از توضیحات آزاد، جلسه‌ای را با CalendarApp تنظیم می‌کند و خلاصه را به جلسه اضافه می‌کند.
  • تابع setupMeeting() تابع attachFileToMeeting() را فراخوانی می‌کند تا از سرویس پیشرفته‌ی تقویم گوگل برای پیوست کردن فایل وبلاگ به جلسه استفاده کند.
  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. در تقویم گوگل، جلسه‌ای را که خلاصه و پیوست آن را دارد، پیدا کنید.

دعوتنامه جلسه

۹. با Apps Script یک ایمیل بنویسید

در مرحله بعد، شما نوشتن ایمیل در جیمیل را خودکار می‌کنید. سناریو به این صورت است: فرض کنید در گوگل شیت (Google Sheets) تجزیه و تحلیل داده‌ها را انجام می‌دهید. تمام اعداد را در جای خود قرار می‌دهید و یک نمودار ایجاد می‌کنید. می‌خواهید از رابط برنامه‌نویسی Gemini Pro Vision برای نوشتن ایمیل بر اساس نمودار استفاده کنید.

برای انجام این کار، این مراحل را دنبال کنید:

  1. این برگه را باز کنید و روی File -> Make a copy کلیک کنید.
  2. در کادر متنی Name در پنجره‌ی Copy document ، نام پیش‌فرض 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. بعد از ۱۰ تا ۲۰ ثانیه، جیمیل خود را باز کنید. باید پیش‌نویس ایمیلی مانند این را ببینید:

شما می‌توانید پیش‌نویس ایمیل را قبل از ارسال، اصلاح کنید. ایمیل به‌طور کامل توسط Gemini Pro Vision نوشته می‌شود، پس از اینکه شما یک سوال کوتاه و نمودار را به آن می‌دهید.

۱۰. با Apps Script یک عرشه اسکلتی ایجاد کنید

در مرحله بعد، شما با استفاده از 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();
}

این تابع، API مربوط به Gemini را فراخوانی می‌کند تا در مورد یک موضوع خاص ایده‌پردازی کند و نکات مهم را در قالب مورد نظر برگرداند.

از 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) را باز کنید. باید یک صفحه‌ی کلی پر از نکات برجسته (بولت پوینت) ببینید.

عرشه پیش نویس

۱۱. ایده‌هایی برای بررسی

فراتر از این سه ادغام، می‌توانید ایده‌های زیر را بررسی کنید:

  • ساخت یک چت‌بات در گوگل چت . یکی از محبوب‌ترین موارد استفاده برای مدل‌های زبان بزرگ (LLM) ساخت یک چت‌بات است. با استفاده از API جمینی، ساخت یک چت‌بات برای گوگل چت آسان است. برای اطلاعات بیشتر، به API گوگل چت و codelab مراجعه کنید . برنامه‌هایی برای گوگل چت با جمینی بسازید .
  • بازیابی-تولید افزوده (RAG) با داده‌های خودتان در گوگل درایو یا کیپ . در این آزمایشگاه کد، شما فقط از یک فایل متنی برای خلاصه‌سازی استفاده می‌کنید. با این حال، می‌توانید از محتوای یادداشت‌ها، فایل‌های PDF و تصاویر شخصی خود در گوگل درایو و کیپ مانند - با استفاده از رابط برنامه‌نویسی Gemini، یک پایگاه داده برداری و به صورت اختیاری، یک ابزار تنظیم - مانند LangChain - برای انجام RAG و شخصی‌سازی پاسخ مدل بر اساس داده‌های خود استفاده کنید.
  • از قابلیت فراخوانی تابع چند نوبتی Gemini API استفاده کنید . فراخوانی تابع Gemini API محدود به یک نوبت نیست و می‌توانید برای کارهای پیچیده‌تر، فراخوانی تابع چند نوبتی انجام دهید .
  • فراتر از Google Workspace بروید . اکنون که نحوه ادغام API Gemini با Google Workspace را درک کرده‌اید، می‌توانید فراتر از Google Workspace بروید و از APIهای دیگر در جهان بهره ببرید.

۱۲. تبریک

شما در مورد قابلیت‌های چندوجهی و فراخوانی توابع API Gemini اطلاعات کسب کردید. از آنها برای خودکارسازی برخی از وظایف Google Workspace با Apps Script استفاده کردید!

بیشتر بدانید