Tự động hoá các công việc trong Google Workspace bằng Gemini API

1. Trước khi bắt đầu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tự động hoá các công việc trong Google Workspace bằng các tính năng gọi hàm và hỗ trợ đa phương thức của Gemini API.

Điều kiện tiên quyết

  • Quen thuộc cơ bản với Apps Script, JavaScript hoặc ngôn ngữ lập trình tương tự

Kiến thức bạn sẽ học được

  • Cách khai thác tính năng gọi chức năng và các tính năng đa phương thức của Gemini API.
  • Cách liên kết nhiều lệnh gọi Gemini API với nhau.
  • Cách tự động hoá các công việc trên Google Workspace bằng Gemini API.

Bạn cần có

  • Trình duyệt web.
  • Tài khoản Gmail. Hoặc là một tài khoản Google Workspace đã triển khai chế độ thiết lập cụ thể của Gemini API.
  • Kết nối từ một khu vực được hỗ trợ cho Gemini API.
  • Không bắt buộc: Giao diện dòng lệnh với chương trình curl để kiểm thử các yêu cầu API trực tiếp.

Mã nguồn hoàn chỉnh cho lớp học lập trình này có trong Sách hướng dẫn về Gemini API trên GitHub. Hãy kiểm tra xem bạn có cần mã hoàn chỉnh hay không.

2. Thiết lập Gemini API

Giới thiệu về Gemini

Các mô hình Gemini là một loạt mô hình AI lớn nhất và mạnh nhất của Google. Để tận dụng những mô hình này trong các ứng dụng, bạn có thể dùng Gemini API. Bạn cũng có thể dùng thử Gemini API trong Google AI Studio, một giao diện web dành cho API. Tại đây, bạn có thể thử các câu lệnh, điều chỉnh chế độ cài đặt của mô hình và điều chỉnh các mô hình tuỳ chỉnh mà không cần viết mã.

Mua chìa khoá

Không bắt buộc: Kiểm tra khoá

Nếu bạn có quyền truy cập vào một dòng lệnh có curl, hãy thêm khoá của bạn vào dòng đầu tiên của khối sau đây rồi chạy khoá đó trong thiết bị đầu cuối của bạn để kiểm tra khoá API.

export GOOGLE_API_KEY=Paste_your_API_key_here

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

Bạn sẽ thấy danh sách các mô hình ở định dạng JSON, chẳng hạn như mô hình/gemini-1.0-pro. Tức là phương thức đó đã hoạt động bình thường.

3. Không bắt buộc: Gửi yêu cầu đến Gemini API

Ở bước không bắt buộc này, bạn yêu cầu API Gemini để hiểu rõ hơn về cách hoạt động của tính năng tạo nội dung trước khi thêm nội dung đó vào một ứng dụng Apps Script.

Giới thiệu về các mô hình

Gemini API cung cấp một số mô hình có nhiều tính năng và hạn chế. Từng mô hình được liệt kê cùng với chức năng trên trang mô hình Gemini.

Đưa ra yêu cầu đầu tiên của bạn

Để Gemini API hoàn tất một câu lệnh dạng văn bản, bạn cần tạo một yêu cầu JSON rồi gửi yêu cầu đó đến điểm cuối của API REST.

Để thực hiện việc này, hãy làm theo các bước sau:

  1. Trong tệp mới, hãy nhập yêu cầu JSON sau:
{
  contents: [
   {
     parts: [
       { text: 'The most important aspects of a persuasive presentation are:' }
     ]
   }
 ]
}

Yêu cầu JSON bao gồm lời nhắc sau: The most important aspects of a persuasive presentation are:. Mô hình sẽ hoàn thành hướng dẫn này và trực tiếp cung cấp cho bạn kết quả.

Yêu cầu JSON có 3 trường cấp cao nhất để điền sẵn là contents, generationConfigsafetySettings. Chỉ cần có contents. Các phần khác cung cấp cơ chế kiểm soát đầu ra.

  1. Lưu tệp JSON này vào tệp presentation.txt rồi truyền trực tiếp đến curl như sau:
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}

Trong ví dụ này, bạn đặt các giá trị sau trong URL:

  • v1beta chỉ định phiên bản API.
  • gemini-1.0-pro-latest chỉ định Gemini 1.0 Pro làm mô hình và sử dụng bản tổng quan nhanh mới nhất.
  • generateContent chỉ định phương thức API mà bạn gọi.

Bạn sẽ thấy kết quả tương tự như sau:

{
  "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": [...]
  }
}

Để dễ đọc, dưới đây là đầu ra của thiết bị đầu cuối được định dạng thường xuyên:

  • Độ tin cậy: Khán giả phải tin tưởng rằng bạn là chuyên gia về vấn đề đó và bạn luôn quan tâm đến lợi ích tốt nhất của họ.
  • Rõ ràng: Thông điệp của bạn phải dễ hiểu và dễ theo dõi. Tránh sử dụng các thuật ngữ hoặc thuật ngữ kỹ thuật mà khán giả có thể không quen thuộc.
  • Tính cụ thể: Dùng ví dụ và dữ liệu cụ thể để củng cố cho lập luận của bạn. Tránh đưa ra những tuyên bố mơ hồ hoặc chung chung.
  • Sự hấp dẫn về mặt cảm xúc: Ngoài việc thu hút khán giả theo khía cạnh logic, bạn cũng nên cố gắng kết nối với họ ở khía cạnh cảm xúc. Hãy dùng lối kể chuyện, khiếu hài hước và giai thoại cá nhân để giúp nội dung trở nên đáng nhớ và hấp dẫn hơn.
  • Kết thúc ấn tượng: Kết thúc bản trình bày bằng một lời kêu gọi hành động mạnh mẽ. Cho khán giả biết bạn muốn họ làm gì và lý do họ cần làm việc đó.

Để tìm hiểu thêm về các chế độ cài đặt khác, bao gồm cả generationConfigsafetySettings, hãy xem lời nhắc và hướng dẫn về an toàn.

4. Gọi API Gemini từ Apps Script

  1. Hãy truy cập vào script.new, sau đó, một tệp Apps Script code.gs sẽ được tự động tạo cho bạn.
  2. Giữ con trỏ trên tệp code.gs, sau đó nhấp vào 8bfe57773be886ab.png. > Đổi tên.
  3. Thay đổi tên tệp thành utils.gs.
  4. Trong tệp này, hãy xoá hàm myFunction để tệp trống.

Thêm khoá API vào dự án

  1. Trong trình đơn điều hướng, hãy chọn Project settings (Cài đặt dự án).
  2. Trong phần Thuộc tính của tập lệnh, hãy nhấp vào Thêm thuộc tính của tập lệnh.
  3. Trong mục Tài sản, hãy nhập GOOGLE_API_KEY.
  4. Trong mục Giá trị, hãy nhập khoá API do Google AI Studio tạo.

fcfe205a93879c49.png

  1. Nhấp vào Lưu thuộc tính của tập lệnh.
  2. Quay lại trình chỉnh sửa.

Thêm mã Gemini API

Trong tệp utils.gs, hãy làm theo các bước sau:

Thiết lập khoá API và điểm cuối:

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. Thêm hàm sau để gọi Gemini API bằng một câu lệnh cụ thể:
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. Thêm hàm sau để đặt lời nhắc:
function testGemini() {
  const prompt = "The best thing since sliced bread is";
  const output = callGemini(prompt);
  console.log(prompt, output);
}

Kiểm tra

  1. Nhấp vào 76113423d1f91775.pngS Lưu.
  2. Chọn testGemini trong danh sách hàm thả xuống rồi nhấp vào 5b9034ff679c8761.pngS.
  3. Chấp nhận các quyền cần thiết. Mã của bạn sẽ chạy và bạn sẽ thấy một số kết quả của bảng điều khiển kèm theo kết quả trong nhật ký thực thi.

Nhật ký thực thi

Đã hoạt động!

5. Gọi Gemini API bằng hình ảnh

Một trong những tính năng mạnh mẽ nhất của bộ mô hình Gemini là hỗ trợ nhập dữ liệu đa phương thức, tức là bạn có thể cung cấp nhiều phương thức khác ngoài văn bản! Trong phần này, bạn sẽ thêm một hàm để gọi Gemini API bằng một hình ảnh.

  • Ở đầu tệp utils.gs sau phần khai báo const geminiEndpoint hiện tại, hãy thêm dòng sau:
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${geminiApiKey}`;

Thêm mã Gemini Vision

  1. Thêm một hàm vào tệp utils.gs để gọi điểm cuối mới được thêm này:
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. Thêm hàm kiểm thử sau:
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);
}

Hàm này tải một hình ảnh kiểm thử từ Internet rồi chuyển hình ảnh đó vào hàm mà bạn đã xác định. Sau đó, bạn kết nối dây để sử dụng biểu đồ trong bảng tính, vì vậy đây chỉ là một thử nghiệm.

Kiểm tra

  • Lưu và chạy hàm testGeminiVision, sau đó kiểm tra kết quả.

849c6728bfb5ec52.pngs

6. Gọi API Gemini bằng các công cụ

Ngoài văn bản và hình ảnh, bạn cũng có thể cấp quyền sử dụng các công cụ trong câu lệnh.

Thêm mã xử lý công cụ

  • Thêm một hàm vào tệp utils.gs chấp nhận thông số kỹ thuật của công cụ:
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;
}

Để biết thêm thông tin về giản đồ này và các trường có sẵn, hãy xem tài liệu tham khảo API FunctionDeclaration.

Kiểm tra

  1. Xác định công cụ mà mô hình có thể sử dụng để tìm ngày và giờ hiện tại:
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);
}

Định dạng được sử dụng ở đây là giản đồ FunctionDeclaration. Trên thực tế, bạn không gọi hàm ngày-giờ. Bạn chỉ nhận được chỉ báo cho biết mô hình đã yêu cầu lệnh gọi hàm. Bạn sẽ xử lý các lệnh gọi hàm ở bước sau.

  1. Lưu và chạy hàm testGeminiTools để xem kết quả.

Nhật ký thực thi

7. Tổng quan về các công cụ tích hợp minh hoạ với Google Workspace

Giờ đây, khi đã hiểu cách hoạt động của chức năng gọi hàm, bạn có thể dễ dàng mở rộng chức năng của mô hình Gemini sang các dịch vụ khác. Trong các phần tiếp theo, bạn sẽ xây dựng các công cụ tích hợp với các sản phẩm của Google Workspace như Google Drive, Google Trang trình bày và Google Trang tính. Dưới đây là sơ đồ được đơn giản hoá:

3 công cụ

Nhìn chung, khi có câu hỏi của người dùng, bạn sẽ sử dụng chức năng gọi của API Gemini để xác định công cụ sẽ được dùng. Bạn sẽ tạo 3 công cụ có thể thực hiện những việc sau:

  • Thiết lập cuộc họp. Hàm setupMeeting() trong sơ đồ gọi API Gemini 1.0 Pro để tóm tắt một blog trong Google Drive và thêm bản tóm tắt vào một cuộc họp mới tạo trong Lịch Google.
  • Soạn email dựa trên thông tin chi tiết từ biểu đồ. Hàm draftEmail() trong sơ đồ gọi Gemini 1.0 Pro Vision để phân tích một biểu đồ trong Google Trang tính và soạn email trong Gmail dựa trên dữ liệu phân tích đó.
  • Tạo bộ khung. Hàm createDeck() trong sơ đồ gọi Gemini 1.0 Pro để lên ý tưởng cho các dấu đầu dòng cho một bản trình bày trong Google Trang trình bày.

Đối với mỗi công cụ, bạn cần làm ba việc sau:

  1. Xác định xem phản hồi gọi hàm của Gemini API có yêu cầu gọi công cụ cụ thể đó trong khối if...else hay không.
  2. Thêm hàm thực tế để triển khai chức năng của công cụ.
  3. Khai báo công cụ bằng API Gemini để mô hình Gemini biết sự tồn tại của công cụ này và có thể trả về đúng phản hồi gọi hàm.

8. Thiết lập cuộc họp bằng Apps Script

Trước tiên, bạn tự động thiết lập cuộc họp trong Lịch Google nhưng cũng thêm mô tả, là bản tóm tắt về tệp trong Google Drive.

Để thực hiện việc này, hãy làm theo các bước sau:

  1. Tải tệp văn bản này xuống. Đây là nội dung văn bản của blog về việc ra mắt Gemini 1.5 Pro.
  2. Tải tệp lên thư mục gốc trong Google Drive.
  3. Trong trình chỉnh sửa, hãy tạo tệp main.gs rồi thêm đoạn mã sau:
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");
}

Tại đây, bạn sẽ gọi chức năng gọi chức năng của Gemini API. Tiếp theo, bạn cần xác định hàm công cụ.

  1. Ở bên trái trình chỉnh sửa, bên cạnh Dịch vụ, hãy nhấp vào + Thêm dịch vụ > API Lịch Google > Thêm. Thao tác này sẽ bật dịch vụ Lịch Google nâng cao mà bạn cần sử dụng cho một số API nâng cao sau này.

Thêm dịch vụ

  1. Trong tệp utils.gs, hãy thêm mã sau:
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);
}

Mã này sẽ thực hiện những việc sau:

  • Hàm setupMeeting() xem qua Google Drive của bạn và tìm tệp Gemini-blog.txt. Tên tệp này được tự động trả về bằng lệnh gọi hàm của Gemini API ở bước 3.
  • Hàm setupMeeting() gọi Gemini API để tóm tắt nội dung của tệp, thiết lập cuộc họp bằng ứng dụng Lịch bằng cách sử dụng nội dung mô tả dạng biểu mẫu tuỳ ý, đồng thời thêm bản tóm tắt vào cuộc họp.
  • Hàm setupMeeting() gọi hàm attachFileToMeeting() để sử dụng dịch vụ Lịch Google nâng cao nhằm đính kèm tệp blog vào cuộc họp.
  1. Ở đầu tệp utils.gs, hãy thêm mã sau:
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. Trong trình chỉnh sửa, hãy quay lại tệp main.gs rồi nhấp vào 5b9034ff679c8761.pngS.
  2. Nếu Google Workspace yêu cầu bạn cấp quyền chạy tập lệnh, hãy nhấp vào OK.

Trong vài giây, nhật ký thực thi sẽ hiển thị thông báo cho bạn biết cuộc họp đã được thiết lập.

  1. Trong Lịch Google, hãy tìm cuộc họp có bản tóm tắt và tệp đính kèm.

Lời mời tham gia cuộc họp

9. Soạn email bằng Apps Script

Tiếp theo, bạn sẽ tự động soạn email trong Gmail. Đây là tình huống: Giả sử bạn tiến hành phân tích dữ liệu trong Google Trang tính. Bạn đặt tất cả các số vào đúng chỗ và tạo biểu đồ. Bạn muốn sử dụng Gemini Pro Vision API để soạn email dựa trên biểu đồ.

Để thực hiện việc này, hãy làm theo các bước sau:

  1. Mở trang tính này rồi nhấp vào Tệp -> Tạo bản sao.
  2. Trong hộp văn bản Tên của hộp thoại Sao chép tài liệu, hãy thay thế tên mặc định Copy of CollegeExpenses bằng CollegeExpenses.
  3. Trong tệp main.gs, hãy thay thế truy vấn trước đó của người dùng bằng một truy vấn mới, sau đó thêm mã sau vào câu lệnh 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. Trong tệp utils.gs, hãy thêm mã sau:
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'
  });
}

Hàm này truy xuất biểu đồ chi phí cho trường đại học từ trang tính đó rồi gửi đến Gemini Pro Vision để soạn email. Gemini Pro Vision trích xuất thông tin từ biểu đồ và thay mặt bạn soạn thảo nội dung email.

  1. Trong tệp utils.gs, hãy thêm mã sau vào đối tượng WORKSPACE_TOOLS sau nhận xét 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. Trong trình chỉnh sửa, hãy quay lại tệp main.gs rồi nhấp vào 5b9034ff679c8761.pngS.
  2. Sau 10 đến 20 giây, hãy mở Gmail của bạn. Bạn sẽ thấy email nháp như sau:

Bạn có thể sửa đổi bản nháp email trước khi gửi. Email này hoàn toàn do Gemini Pro Vision viết sau khi bạn đưa ra một câu lệnh ngắn và biểu đồ.

10. Tạo bộ khung bằng Apps Script

Tiếp theo, bạn sẽ tự động hoá việc tạo bản trình bày trong Google Trang trình bày bằng Apps Script.

Để thực hiện việc này, hãy làm theo các bước sau:

  1. Trong tệp main.gs, hãy thay thế truy vấn trước đó của người dùng bằng một truy vấn mới và thêm mã sau vào câu lệnh 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. Trong tệp utils.gs, hãy thêm mã sau:
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();
}

Hàm này gọi Gemini API để lên ý tưởng về một chủ đề cụ thể và trả về các dấu đầu dòng theo định dạng

JSON rồi sử dụng Apps Script để lấp đầy bộ khung.

  1. Trong tệp utils.gs, hãy thêm mã sau vào đối tượng WORKSPACE_TOOLS sau nhận xét 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. Ở đầu tệp utils.gs, hãy xác định hằng số sau:
const NUM_SLIDES = 3;

Đây là số lượng trang trình bày mà mô hình Gemini tạo thêm ngoài trang trình bày mở đầu.

  1. Trong trình chỉnh sửa, hãy quay lại tệp main.gs rồi nhấp vào 5b9034ff679c8761.pngS. Sau vài giây, bạn sẽ thấy một URL bản trình bày trong nhật ký thực thi.
  2. Hãy dùng trình duyệt để mở URL đó. Bạn sẽ thấy một bản trình bày khung xương chứa đầy các dấu đầu dòng.

Bản trình bày nháp

11. Ý tưởng nên khám phá

Ngoài 3 tính năng tích hợp này, bạn có thể khám phá các ý tưởng sau:

  • Tạo bot trò chuyện trên Google Chat. Việc xây dựng bot trò chuyện là một trong những trường hợp sử dụng phổ biến nhất của Mô hình ngôn ngữ lớn (LLM). Với API Gemini, bạn có thể dễ dàng tạo bot trò chuyện cho Google Chat. Để biết thêm thông tin, hãy xem API Google Chat và lớp học lập trình Tạo ứng dụng cho Google Chat bằng Gemini.
  • Truy xuất dữ liệu tăng cường (RAG) bằng dữ liệu của riêng bạn trong Google Drive hoặc Keep. Trong lớp học lập trình này, bạn chỉ sử dụng một tệp văn bản duy nhất để tóm tắt. Tuy nhiên, bạn cũng có thể sử dụng nội dung trong Google Drive và Keep cá nhân của mình (chẳng hạn như ghi chú, tệp PDF và hình ảnh) bằng Gemini API, cơ sở dữ liệu vectơ và một công cụ điều phối (nếu muốn) như LangChain để thực hiện RAG và cá nhân hoá câu trả lời của mô hình dựa trên dữ liệu của bạn.
  • Sử dụng chức năng gọi chức năng nhiều lượt của Gemini API. Chức năng gọi của API Gemini không chỉ giới hạn ở một lượt và bạn có thể gọi hàm nhiều lượt cho những việc phức tạp hơn nữa.
  • Ngoài Google Workspace. Giờ đây, khi đã hiểu cách tích hợp API Gemini với Google Workspace, bạn có thể khai thác các API khác của Google Workspace và khai thác các API khác trên thế giới.

12. Xin chúc mừng

Bạn đã tìm hiểu về các chức năng đa phương thức và chức năng gọi hàm của Gemini API. Bạn đã dùng Apps Script để tự động hoá một số công việc trên Google Workspace!

Tìm hiểu thêm