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 tác vụ trên Google Workspace bằng tính năng gọi hàm và đa phương thức của Gemini API.

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

  • Làm quen với Apps Script, JavaScript hoặc một ngôn ngữ lập trình tương tự

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

  • Cách tận dụng tính năng gọi hàm và tính năng đa phương thức của Gemini API.
  • Cách kết hợp nhiều lệnh gọi Gemini API với nhau.
  • Cách tự động hoá các tác vụ trong Google Workspace bằng Gemini API.

Bạn cần có

  • Trình duyệt web.
  • Tài khoản Gmail. Hoặc 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 có chương trình curl để kiểm thử các yêu cầu API trực tiếp.

Bạn có thể xem toàn bộ mã nguồn của lớp học lập trình này trong Gemini API Cookbook trên GitHub. Hãy xem nếu bạn cần mã hoàn chỉnh.

2. Thiết lập Gemini API

Giới thiệu về Gemini

Các mô hình Gemini là bộ 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 của mình, bạn có thể sử 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 cho API này. Tại đây, bạn có thể thử các câu lệnh, điều chỉnh chế độ cài đặt mô hình và tinh chỉnh các mô hình tuỳ chỉnh mà không cần viết mã.

Mua khoá

  • Để sử dụng Gemini API, hãy tạo khoá API trong Google AI Studio.

Không bắt buộc: Kiểm thử 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 rồi chạy khoá đó trong thiết bị đầu cuối để kiểm thử 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ư models/gemini-1.0-pro. Điều này có nghĩa là bạn đã thành công.

3. Không bắt buộc: Tạo yêu cầu đối với Gemini API

Trong bước không bắt buộc này, bạn sẽ gửi yêu cầu đến Gemini API để 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ó các chức năng và hạn chế khác nhau. Mỗi mô hình đều được liệt kê cùng với các chức năng của mô hình trên trang mô hình Gemini.

Gửi yêu cầu đầu tiên

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

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

  1. Trong một 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 câu lệnh sau: The most important aspects of a persuasive presentation are:. Mô hình sẽ hoàn tất chỉ dẫn này và đưa ra kết quả trực tiếp cho bạn.

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

  1. Lưu JSON này trong tệp presentation.txt, sau đó bạn chuyển trực tiếp JSON này đế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 ảnh chụp 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, sau đâ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 rằng bạn là chuyên gia về chủ đề đó và bạn luôn quan tâm đến lợi ích của họ.
  • Rõ ràng: Thông báo của bạn phải dễ hiểu và dễ thực hiện. Tránh sử dụng biệ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ể: Sử dụng các ví dụ và dữ liệu cụ thể để hỗ trợ lập luận của bạn. Tránh đưa ra những tuyên bố mơ hồ hoặc chung chung.
  • Lời kêu gọi cảm xúc: Ngoài việc thu hút khía cạnh logic của khán giả, bạn cũng nên cố gắng kết nối với họ ở cấp độ cảm xúc. Sử dụng cách kể chuyện, sự hài hước và giai thoại cá nhân để giúp khán giả ghi nhớ và tương tác nhiều hơn với những điểm bạn muốn truyền tải.
  • Kết thúc mạnh mẽ: Kết thúc bài thuyết trình 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à tại sao 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 hướng dẫn về lệnhan toàn.

4. Gọi Gemini API từ Apps Script

  1. Truy cập vào script.new và hệ thống sẽ tự động tạo một tệp Apps Script code.gs cho bạn.
  2. Di chuyển con trỏ lên tệp code.gs, rồi nhấp vào 8bfe57773be886ab.png > Đổi tên.
  3. Đổ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 Cài đặt dự án.
  2. Trong mục 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 của bạn từ Google AI Studio.

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 đây để 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 câu lệnh:
function testGemini() {
  const prompt = "The best thing since sliced bread is";
  const output = callGemini(prompt);
  console.log(prompt, output);
}

Kiểm thử

  1. Nhấp vào 76113423d1f91775.png Lưu.
  2. Chọn testGemini trong danh sách thả xuống của hàm rồi nhấp vào 5b9034ff679c8761.png.
  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ả đầu ra trên bảng điều khiển trong nhật ký thực thi.

Nhật ký thực thi

Đã thành cô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à khả năng hỗ trợ dữ liệu đầu vào đa phương thức. Điều này có nghĩa là bạn có thể cung cấp nhiều dữ liệu đầu vào hơn chỉ là văn bản! Trong phần này, bạn sẽ thêm một hàm gọi Gemini API bằng hình ảnh.

  • Ở đầu tệp utils.gs sau phần khai báo const geminiEndpoint hiện có, 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 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 và truyền hình ảnh đó đến hàm mà bạn đã xác định. Sau đó, bạn sẽ kết nối biểu đồ này để sử dụng biểu đồ trong bảng tính, vì vậy, đây chỉ là một thử nghiệm.

Kiểm thử

  • Lưu và chạy hàm testGeminiVision, rồi kiểm tra kết quả.

849c6728bfb5ec52.png

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

Ngoài văn bản và hình ảnh, bạn cũng có thể cung cấp quyền truy cập vào 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 hiện có, hãy xem tài liệu tham khảo API FunctionDeclaration.

Kiểm thử

  1. Xác định một công cụ mà mô hình có thể 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 dùng ở đây là giản đồ FunctionDeclaration. Bạn không thực sự gọi hàm ngày giờ. Bạn chỉ nhận được thông tin cho biết mô hình đã yêu cầu một lệnh gọi hàm. Bạn sẽ xử lý các lệnh gọi hàm trong 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 bản tích hợp minh hoạ với Google Workspace

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

3 công cụ

Ở cấp độ cao, khi nhận được một câu hỏi của người dùng, bạn sẽ sử dụng tính năng gọi hàm của Gemini API để xác định công cụ cần dùng. Bạn sẽ tạo 3 công cụ có thể làm những việc sau:

  • Thiết lập cuộc họp. Hàm setupMeeting() trong sơ đồ gọi Gemini 1.0 Pro API để 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 kết quả phân tích.
  • Tạo bản trình bày sơ lược. Hàm createDeck() trong sơ đồ gọi Gemini 1.0 Pro để lên ý tưởng cho các gạch đầu dòng của 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 3 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 một 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 Gemini API để mô hình Gemini biết sự tồn tại của công cụ và có thể trả về phản hồi gọi hàm chính xác.

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 một cuộc họp trong Lịch Google, nhưng bạn cũng thêm nội dung mô tả, đó là nội dung tóm tắt của một 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à bản sao văn bản của bài đăng trên 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 một 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 hàm 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 Services (Dịch vụ), hãy nhấp vào + Add a service > Google Calendar API > Add (+ Thêm dịch vụ > Google Calendar API > Thêm). Thao tác này cho phép dịch vụ Lịch Google nâng cao, bạn cần sử dụng dịch vụ này 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 đoạn 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 thực hiện những việc sau:

  • Hàm setupMeeting() sẽ duyệt qua Google Drive của bạn và tìm tệp Gemini-blog.txt. Tên tệp này được hàm gọi của Gemini API tự động trả về ở 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 một cuộc họp với CalendarApp bằng nội dung mô tả tự do và 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. Thêm đoạn mã sau vào đầu tệp 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. Trong trình chỉnh sửa, hãy quay lại tệp main.gs rồi nhấp vào 5b9034ff679c8761.png.
  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.

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

  1. Trong Lịch Google, hãy tìm cuộc họp có nội dung 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 hoá việc soạn thảo email trong Gmail. Sau đâ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 con số vào đúng vị trí và tạo một biểu đồ. Bạn muốn 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 đoạn 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 đoạn 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í đại học từ trang tính và gửi biểu đồ đó đến Gemini Pro Vision để soạn email. Gemini Pro Vision trích xuất thông tin từ biểu đồ và soạn thảo nội dung email thay cho bạn.

  1. Trong tệp utils.gs, hãy thêm đoạn mã sau vào đối tượng WORKSPACE_TOOLS sau phần chú thích 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 chuyển về tệp main.gs rồi nhấp vào 5b9034ff679c8761.png.
  2. Sau 10 đến 20 giây, hãy mở Gmail. Bạn sẽ thấy một email nháp như sau:

Bạn có thể chỉnh sửa 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 cung cấp cho công cụ này một câu lệnh ngắn và biểu đồ.

10. Tạo bản trình bày cơ bản bằng Apps Script

Tiếp theo, bạn sẽ tự động hoá việc tạo một bản trình bày cơ bản 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 đoạn 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ể, trả về các dấu đầu dòng ở định dạng

của JSON, sau đó sử dụng Apps Script để điền vào một bản trình bày cơ bản.

  1. Trong tệp utils.gs, hãy thêm đoạn mã sau vào đối tượng WORKSPACE_TOOLS sau phần chú thích 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ố trang trình bày mà mô hình Gemini tạo ra ngoài trang trình bày mở đầu.

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

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

11. Ý tưởng để khám phá

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

  • Tạo chatbot trên Google Chat. Một trong những trường hợp sử dụng phổ biến nhất cho Mô hình ngôn ngữ lớn (LLM) là xây dựng chatbot. Với Gemini API, bạn có thể dễ dàng tạo một chatbot 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.
  • Tạo sinh tăng cường dựa trên thông tin truy xuất (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 từ Google Drive cá nhân và các ghi chú, tệp PDF cũng như hình ảnh tương tự như trên Keep bằng Gemini API, cơ sở dữ liệu vectơ và (không bắt buộc) một công cụ điều phối (chẳng hạ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 khả năng gọi hàm nhiều lượt của Gemini API. Tính năng gọi hàm của Gemini API không giới hạn ở một lượt và bạn có thể sử dụng tính năng gọi hàm nhiều lượt cho những tác vụ phức tạp hơn.
  • Khai thác nhiều hơn nữa với Google Workspace. Giờ đây, khi đã hiểu cách tích hợp Gemini API với Google Workspace, bạn có thể mở rộng phạm vi ra ngoài Google Workspace và tận dụng 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 khả năng đa phương thức và chức năng gọi của Gemini API. Bạn đã sử dụng các API này để tự động hoá một số công việc trong Google Workspace bằng Apps Script!

Tìm hiểu thêm