Tích hợp Các trợ lý Gemini Enterprise với Google Workspace

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

83e1c1629d14fb31.png

Gemini Enterprise là gì?

Gemini Enterprise là một nền tảng tác nhân tiên tiến, mang đến những công nghệ AI chất lượng nhất của Google cho mọi nhân viên và mọi quy trình công việc. Nền tảng này cho phép các nhóm khám phá, sáng tạo, chia sẻ và chạy tác nhân AI trong một môi trường bảo mật.

  • Sử dụng các mô hình tiên tiến: Người dùng có thể sử dụng ngay AI đa phương thức mạnh nhất của Google, bao gồm cả Gemini, để giải quyết các thách thức kinh doanh phức tạp.
  • Sử dụng các tác nhân chuyên biệt: Bộ công cụ này bao gồm các tác nhân của Google sẵn sàng sử dụng cho việc nghiên cứu, lập trình và ghi chú để mang lại giá trị tức thì.
  • Hỗ trợ mọi nhân viên: Các lựa chọn không cần lập trình và cần lập trình cho phép nhân viên ở tất cả các phòng ban xây dựng và quản lý các tác nhân tuỳ chỉnh của riêng họ để tự động hoá quy trình công việc.
  • Dựa trên dữ liệu: Các tác nhân có thể được kết nối an toàn với dữ liệu nội bộ của công ty và các ứng dụng bên thứ ba để đảm bảo câu trả lời của chúng chính xác theo ngữ cảnh.
  • Quản trị tập trung: Quản trị viên có thể trực quan hoá và kiểm tra mọi hoạt động của tác nhân để đảm bảo tổ chức đáp ứng các tiêu chuẩn nghiêm ngặt về bảo mật và việc tuân thủ.
  • Mở rộng với hệ sinh thái: Nền tảng này tích hợp với một mạng lưới rộng lớn gồm các ứng dụng đối tác và nhà cung cấp dịch vụ để mở rộng phạm vi tự động hoá trên nhiều hệ thống.

127f2ed7d484722c.png

Google Workspace là gì?

Google Workspace là một bộ giải pháp cộng tác và tăng năng suất trên đám mây, được thiết kế cho cá nhân, trường học và doanh nghiệp:

  • Giao tiếp: Dịch vụ email chuyên nghiệp (Gmail), hội nghị truyền hình (Meet) và nhắn tin cho nhóm (Chat).
  • Tạo nội dung: Các công cụ để viết tài liệu (Tài liệu), tạo bảng tính (Trang tính) và thiết kế bản trình bày (Trang trình bày).
  • Tổ chức: Lịch dùng chung (Lịch) và ghi chú kỹ thuật số (Keep).
  • Bộ nhớ: Không gian tập trung trên đám mây để lưu và chia sẻ tệp một cách an toàn (Drive).
  • Quản lý: Các chế độ kiểm soát của quản trị viên để quản lý người dùng và chế độ cài đặt bảo mật (Bảng điều khiển dành cho quản trị viên Workspace).

Những loại tích hợp tuỳ chỉnh nào?

Google Workspace và Gemini Enterprise tạo ra một vòng phản hồi mạnh mẽ, trong đó Workspace cung cấp dữ liệu theo thời gian thực và bối cảnh cộng tác, còn Gemini Enterprise cung cấp các mô hình, khả năng suy luận dựa trên tác nhân và khả năng điều phối cần thiết để tự động hoá các quy trình công việc thông minh.

  • Khả năng kết nối thông minh: Các kho dữ liệu, API và máy chủ MCP (do Google quản lý và tuỳ chỉnh) cho phép các tác nhân truy cập vào dữ liệu trên Workspace một cách an toàn và liền mạch, đồng thời thực hiện hành động thay cho người dùng.
  • Tác nhân tuỳ chỉnh: Bằng cách sử dụng trình thiết kế không cần mã hoặc khung chuyên nghiệp, các nhóm có thể tạo tác nhân chuyên biệt dựa trên dữ liệu và hành động do quản trị viên quản lý trong Workspace.
  • Tích hợp tự nhiên: Tiện ích bổ sung Workspace giúp thu hẹp khoảng cách giữa các hệ thống AI và các ứng dụng như Chat và Gmail, cho dù thông qua các thành phần giao diện người dùng chuyên dụng hay các quy trình nền. Điều này cho phép các nhân viên hỗ trợ gặp gỡ người dùng đúng lúc và hỗ trợ ngay lập tức dựa trên ngữ cảnh.

Bằng cách kết hợp hệ sinh thái năng suất mạnh mẽ của Google Workspace với sức mạnh của các tác nhân tiên tiến của Gemini Enterprise, các tổ chức có thể chuyển đổi hoạt động của mình thông qua các tác nhân AI tuỳ chỉnh dựa trên dữ liệu, giúp tự động hoá các quy trình làm việc phức tạp ngay trong những công cụ mà các nhóm của họ vẫn đang sử dụng hằng ngày.

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

Nếu muốn tự mình thực hiện tất cả các bước trên môi trường của mình, bạn sẽ cần:

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, chúng ta sẽ xây dựng 3 giải pháp bằng các tác nhân AI Gemini Enterprise được tích hợp chặt chẽ với Google Workspace. Các mẫu này sẽ minh hoạ những mẫu kiến trúc có thể dùng để tương tác với dữ liệu, thao tác và giao diện người dùng.

Tạo tác nhân tuỳ chỉnh không cần lập trình

Tác nhân này cho phép người dùng tìm kiếm dữ liệu và thực hiện các thao tác cho Workspace bằng ngôn ngữ tự nhiên. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu và hành động: Kho lưu trữ dữ liệu của Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm.
  • Công cụ tạo tác nhân: Gemini Enterprise Agent Designer.
  • Máy chủ lưu trữ tác nhân: Gemini Enterprise.
  • Giao diện người dùng: Ứng dụng web Gemini Enterprise.

90e42539e5959634.png

60e62437ce29a818.png

Tác nhân tuỳ chỉnh chuyên nghiệp

Trợ lý này cho phép người dùng tìm kiếm dữ liệu và thực hiện các thao tác cho Workspace bằng ngôn ngữ tự nhiên thông qua các công cụ và quy tắc tuỳ chỉnh. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu và hành động: Kho dữ liệu Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm, máy chủ Giao thức bối cảnh mô hình tìm kiếm (MCP) Vertex AI do Google quản lý, hàm công cụ tuỳ chỉnh để gửi tin nhắn Google Chat (thông qua Google Chat API).
  • Công cụ tạo tác nhân: Bộ công cụ phát triển tác nhân (ADK).
  • Máy chủ lưu trữ tác nhân: Vertex AI Agent Engine.
  • Giao diện người dùng: Ứng dụng web Gemini Enterprise.

1647ebff031c42e7.png

a8087d2351e77fb4.png

Tác nhân mặc định dưới dạng tiện ích bổ sung của Google Workspace

Trợ lý này cho phép người dùng tìm kiếm dữ liệu cho Workspace bằng ngôn ngữ tự nhiên trong bối cảnh giao diện người dùng của ứng dụng Workspace. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu: Kho lưu trữ dữ liệu Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm.
  • Máy chủ lưu trữ tác nhân: Gemini Enterprise.
  • Giao diện người dùng: Tiện ích bổ sung Google Workspace cho Chat và Gmail (dễ dàng mở rộng sang Lịch, Drive, Tài liệu, Trang tính và Trang trình bày).
  • Tiện ích bổ sung Google Workspace: Apps Script, Gemini Enterprise và API Vertex AI, theo ngữ cảnh (siêu dữ liệu người dùng, thư Gmail được chọn).

c8c63fb3f324fecf.png

d33b8cb50ee251b7.png

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

  • Các điểm tích hợp giữa Gemini Enterprise và Google Workspace cho phép sử dụng dữ liệu và thực hiện hành động.
  • Các lựa chọn không cần mã nguồn và cần mã nguồn để tạo các tác nhân tuỳ chỉnh được lưu trữ trong Gemini Enterprise.
  • Cách người dùng có thể truy cập vào các trợ lý từ ứng dụng web Gemini Enterprise và các ứng dụng Google Workspace.

2. Bắt đầu thiết lập

Xem lại các khái niệm

Ứng dụng Gemini Enterprise

Ứng dụng Gemini Enterprise cung cấp kết quả tìm kiếm, hành động và tác nhân cho người dùng cuối. Thuật ngữ ứng dụng có thể được dùng thay thế cho thuật ngữ công cụ trong bối cảnh API. Ứng dụng phải được kết nối với một kho dữ liệu để sử dụng dữ liệu từ kho đó nhằm phân phát kết quả tìm kiếm, câu trả lời hoặc hành động.

Ứng dụng web Gemini Enterprise

Ứng dụng web Gemini Enterprise được liên kết với ứng dụng Gemini Enterprise. Ứng dụng này hoạt động như một trung tâm AI tập trung, nơi nhân viên sử dụng một giao diện trò chuyện duy nhất để tìm kiếm dữ liệu riêng biệt của công ty, chạy các tác nhân AI chuyên biệt cho quy trình công việc phức tạp và tạo nội dung chuyên nghiệp với quyền riêng tư cấp doanh nghiệp.

Khởi động và truy cập vào các tài nguyên

Trong phần này, bạn sẽ truy cập và định cấu hình các tài nguyên sau đây bằng trình duyệt web mà bạn muốn dùng.

Ứng dụng Gemini Enterprise

Mở Google Cloud Console trong một thẻ mới, sau đó làm theo các bước sau:

  1. Chọn dự án của bạn.
  2. Trong trường tìm kiếm của Google Cloud, hãy tìm và chọn Gemini Enterprise, sau đó nhấp vào + Tạo ứng dụng. Nếu không có giấy phép Gemini Enterprise, bạn sẽ được nhắc kích hoạt giấy phép dùng thử miễn phí trong 30 ngày.

  1. Đặt Tên ứng dụng thành codelab.
  2. Một mã nhận dạng sẽ được tạo dựa trên tên và xuất hiện bên dưới trường, hãy sao chép mã nhận dạng đó.
  3. Đặt Nhiều khu vực thành global (Global).
  4. Nhấp vào Tạo.

8712ada39377205e.png

  1. Ứng dụng sẽ được tạo và bạn sẽ tự động được chuyển hướng đến trang Gemini Enterprise > Tổng quan.
  2. Trong mục Nhận quyền truy cập đầy đủ, hãy nhấp vào Thiết lập danh tính.
  3. Trong màn hình mới, hãy chọn Sử dụng danh tính Google rồi nhấp vào Xác nhận danh tính nhân viên.

3209c156eff4ba43.png

  1. Cấu hình sẽ được lưu và bạn sẽ tự động được chuyển hướng đến trang Gemini Enterprise > Tổng quan.
  2. Chuyển đến phần Cấu hình.
  3. Trong thẻ Quản lý tính năng, hãy bật Bật trình thiết kế tác nhân, rồi nhấp vào Lưu.

f0cd9da419b41cb6.png

Ứng dụng web Gemini Enterprise

Mở Gemini Enterprise trong Bảng điều khiển Cloud ở một thẻ mới, sau đó làm theo các bước sau:

  1. Nhấp vào ứng dụng có tên codelab.
  2. Sao chép URL xuất hiện vì chúng ta sẽ dùng URL đó để chuyển đến ứng dụng Gemini Enterprise trên web trong các bước tiếp theo.

b46ee6176744565d.png

3. Nhân viên hỗ trợ tuỳ chỉnh không cần lập trình

Tác nhân này cho phép người dùng tìm kiếm dữ liệu và thực hiện các thao tác cho Workspace bằng ngôn ngữ tự nhiên. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu và hành động: Kho lưu trữ dữ liệu của Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm.
  • Công cụ tạo tác nhân: Gemini Enterprise Agent Designer.
  • Máy chủ lưu trữ tác nhân: Gemini Enterprise.
  • Giao diện người dùng: Ứng dụng web Gemini Enterprise.

Xem lại các khái niệm

Gemini

Gemini là một LLM đa phương thức của Google. AI giúp mọi người khai phá tiềm năng của bản thân để có thể tăng cường trí tưởng tượng, mở rộng khả năng tìm tòi và nâng cao năng suất.

Kho lưu trữ dữ liệu của Gemini Enterprise

Kho dữ liệu Gemini Enterprise là một thực thể chứa dữ liệu được nhập từ một nguồn dữ liệu của bên thứ nhất, chẳng hạn như Google Workspace hoặc các ứng dụng của bên thứ ba, chẳng hạn như Jira hoặc Salesforce. Kho dữ liệu chứa dữ liệu từ các ứng dụng bên thứ ba còn được gọi là trình kết nối dữ liệu.

Gemini Enterprise Agent Designer

Gemini Enterprise Agent Designer là một nền tảng tương tác không cần mã nguồn, ít phải lập trình để tạo, quản lý và ra mắt các tác nhân một bước và nhiều bước trong Gemini Enterprise.

Xem xét cấu trúc giải pháp

e77aafb772502aaf.png

Cho phép API

Kho lưu trữ dữ liệu Workspace của Gemini Enterprise yêu cầu bạn bật API:

  1. Trong Bảng điều khiển Google Cloud, hãy bật Calendar API, Gmail API và People API:

573322606b715a69.png

  1. Nhấp vào Trình đơn ☰ > API và dịch vụ > API và dịch vụ đã bật, sau đó xác nhận rằng API Lịch Google, Gmail APIPeople API có trong danh sách.

Các thao tác của Gemini Enterprise trên Lịch và Gmail trong Workspace yêu cầu phải có cấu hình màn hình đồng ý:

  1. Trong Bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn ☰ > Nền tảng xác thực của Google > Thương hiệu.

  1. Nhấp vào Bắt đầu.
  2. Trong phần Thông tin về ứng dụng, hãy đặt Tên ứng dụng thành Codelab .
  3. Trong phần Email hỗ trợ người dùng, hãy chọn một địa chỉ email hỗ trợ mà người dùng có thể liên hệ với bạn nếu họ có thắc mắc về sự đồng ý của mình.
  4. Nhấp vào Tiếp theo.
  5. Trong phần Đối tượng, hãy chọn Nội bộ.
  6. Nhấp vào Tiếp theo.
  7. Trong phần Thông tin liên hệ, hãy nhập Địa chỉ email để bạn có thể nhận thông báo về mọi thay đổi đối với dự án của mình.
  8. Nhấp vào Tiếp theo.
  9. Trong phần Hoàn tất, hãy xem kỹ Chính sách dữ liệu người dùng của dịch vụ API của Google. Nếu bạn đồng ý, hãy chọn Tôi đồng ý với Chính sách dữ liệu người dùng của dịch vụ API của Google.
  10. Nhấp vào Tiếp tục rồi nhấp vào Tạo.

578c2b38219b2f7b.png

  1. Cấu hình sẽ được lưu và bạn sẽ tự động được chuyển hướng đến trang Google Auth Platform > Overview (Nền tảng xác thực của Google > Tổng quan).
  2. Chuyển đến phần Quyền truy cập vào dữ liệu.
  3. Nhấp vào Thêm hoặc xoá phạm vi.
  4. Sao chép các phạm vi sau rồi dán vào trường Thêm phạm vi theo cách thủ công.
https://www.googleapis.com/auth/calendar.readonly
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/calendar.calendars
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.readonly
  1. Nhấp vào Thêm vào bảng, sau đó nhấp vào Cập nhật rồi nhấp vào Lưu.

874b1dda14e8f379.png

Để tìm hiểu thêm, hãy xem hướng dẫn đầy đủ về cách Định cấu hình màn hình xin phép bằng OAuth.

Tạo thông tin đăng nhập của ứng dụng OAuth

Tạo một ứng dụng OAuth mới cho Gemini Enterprise để xác thực người dùng:

  1. Trong Bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn ☰ > Nền tảng xác thực của Google > Ứng dụng.

  1. Nhấp vào + Tạo ứng dụng.
  2. Đối với Loại ứng dụng, hãy chọn Ứng dụng web.
  3. Đặt Tên thành codelab.
  4. Bỏ qua Nguồn gốc JavaScript được uỷ quyền.
  5. Trong phần Authorized redirect URIs (URI chuyển hướng được uỷ quyền), hãy nhấp vào Add URI (Thêm URI) rồi nhập https://vertexaisearch.cloud.google.com/oauth-redirect.
  6. Nhấp vào Tạo.
  7. Một hộp thoại sẽ xuất hiện cùng với mã ứng dụng khách và khoá bí mật OAuth mới tạo của bạn. Lưu thông tin này ở nơi an toàn.

a46e5ebfb851aea5.png

Tạo kho dữ liệu

Mở Gemini Enterprise trong Bảng điều khiển Cloud ở một thẻ mới, sau đó làm theo các bước sau:

  1. Nhấp vào ứng dụng có tên codelab.
  2. Trong trình đơn điều hướng, hãy nhấp vào Kho dữ liệu được kết nối.
  3. Nhấp vào + Kho dữ liệu mới.
  4. Trong phần Nguồn, hãy tìm Lịch Google rồi nhấp vào Chọn.
  5. Trong mục Actions (Hành động), hãy nhập Client ID (Mã ứng dụng khách) và Client Secret (Khoá bí mật của ứng dụng khách) đã lưu từ các bước trước, sau đó nhấp vào Verify Auth (Xác minh uỷ quyền) rồi làm theo các bước để xác thực và uỷ quyền cho ứng dụng OAuth.
  6. Bật các thao tác Tạo sự kiện trên lịchCập nhật sự kiện trên lịch.
  7. Nhấp vào Tiếp tục.

a1d76e70edec0cf.png

  1. Trong mục Cấu hình, hãy đặt Tên trình kết nối dữ liệu thành calendar.
  2. Nhấp vào Tạo.
  3. Bạn sẽ được tự động chuyển hướng đến Kho dữ liệu được kết nối, nơi bạn có thể thấy kho dữ liệu mới thêm.

Tạo kho dữ liệu Google Gmail:

  1. Nhấp vào + Kho dữ liệu mới.
  2. Trong phần Nguồn, hãy tìm Google Gmail rồi nhấp vào Chọn.
  3. Trong phần Actions (Hành động), hãy nhập Client ID (Mã ứng dụng khách) và Client Secret (Khoá bí mật của ứng dụng khách) đã lưu từ các bước trước, rồi nhấp vào Verify Auth (Xác minh uỷ quyền).
  4. Bật thao tác Gửi email.
  5. Nhấp vào Tiếp tục.
  6. Trong mục Cấu hình, hãy đặt Tên trình kết nối dữ liệu thành gmail.
  7. Nhấp vào Tạo.
  8. Bạn sẽ được tự động chuyển hướng đến Kho dữ liệu được kết nối, nơi bạn có thể thấy kho dữ liệu mới thêm.

Tạo kho dữ liệu Google Drive:

  1. Nhấp vào + Kho dữ liệu mới.
  2. Trong phần Nguồn, hãy tìm Google Drive rồi nhấp vào Chọn.
  3. Trong mục Dữ liệu, hãy chọn Tất cả, rồi nhấp vào Tiếp tục.
  4. Trong mục Cấu hình, hãy đặt Tên trình kết nối dữ liệu thành drive.
  5. Nhấp vào Tạo.
  6. Bạn sẽ được tự động chuyển hướng đến Kho dữ liệu được kết nối, nơi bạn có thể thấy kho dữ liệu mới thêm.

Tạo kho dữ liệu NotebookLM:

  1. Nhấp vào + Kho dữ liệu mới.
  2. Trong phần Nguồn, hãy tìm NotebookLM rồi nhấp vào Chọn.
  3. Trong mục Cấu hình, hãy đặt Tên trình kết nối dữ liệu thành notebooklm.
  4. Nhấp vào Tạo.
  5. Bạn sẽ được tự động chuyển hướng đến Kho dữ liệu được kết nối, nơi bạn có thể thấy kho dữ liệu mới thêm.

Sau vài phút, trạng thái của tất cả các kho dữ liệu được kết nối (ngoại trừ NotebookLM) sẽ là Đang hoạt động. Nếu thấy lỗi, bạn có thể nhấp vào nguồn dữ liệu để xem thông tin chi tiết về lỗi.

ceba9eb2480a2696.png

Kho dữ liệu thử nghiệm

Mở URL của ứng dụng web Gemini Enterprise mà chúng ta đã sao chép trước đó:

  1. Nhấp vào Trình đơn ☰ > Cuộc trò chuyện mới.
  2. Trong chân trang của trường tin nhắn trò chuyện mới, hãy nhấp vào biểu tượng Trình kết nối rồi bật tất cả trình kết nối.
  3. Giờ đây, bạn có thể thử nghiệm với các câu lệnh liên quan đến các trình kết nối. Ví dụ: trong cuộc trò chuyện, hãy nhập Do I have any meetings today? rồi nhấn enter.
  4. Tiếp theo, hãy thử nhập How many emails did I receive today? rồi nhấn enter.
  5. Cuối cùng, hãy nhập Give me the title of the last Drive file I created rồi nhấn enter.

90e42539e5959634.png

Tạo nhân viên hỗ trợ tuỳ chỉnh

Trong ứng dụng web Gemini Enterprise, hãy tạo một tác nhân mới bằng Trình thiết kế tác nhân:

  1. Nhấp vào Trình đơn ☰ > + Nhân viên hỗ trợ mới.
  2. Trong cuộc trò chuyện, hãy nhập An agent that always sends pirate-themed emails but use normal English otherwise rồi nhấn enter.

2803c1dedd20433e.png

  1. Agent Designer sẽ tạo bản nháp cho tác nhân dựa trên câu lệnh và mở tác nhân đó trong trình chỉnh sửa.
  2. Nhấp vào Tạo

Dùng thử tác nhân tuỳ chỉnh

  1. Trong ứng dụng web Gemini Enterprise, hãy trò chuyện với đặc vụ mới tạo:
  2. Nhấp vào Trình đơn ☰ > Nhân viên hỗ trợ.
  3. Chọn tác nhân trong mục Tác nhân của bạn.
  4. Trong chân trang của trường tin nhắn trò chuyện mới, hãy nhấp vào biểu tượng Trình kết nối, sau đó nhấp vào Bật thao tác cho Thư và làm theo hướng dẫn để uỷ quyền cho trợ lý
  5. Trong cuộc trò chuyện, hãy nhập Send an email to someone@example.com saying I'll see them at Cloud Next, generate some subject and body yourself rồi nhấn enter. Bạn có thể thay thế địa chỉ email mẫu bằng địa chỉ email của mình.
  6. Nhấp vào ✔️ để gửi email.

60e62437ce29a818.png

d4fb65d14fdf27da.png

4. Nhân viên hỗ trợ tuỳ chỉnh bằng mã chuyên nghiệp

Trợ lý này cho phép người dùng tìm kiếm dữ liệu và thực hiện các thao tác cho Workspace bằng ngôn ngữ tự nhiên thông qua các công cụ và quy tắc tuỳ chỉnh. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu và hành động: Kho dữ liệu Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm, máy chủ Giao thức bối cảnh mô hình tìm kiếm (MCP) Vertex AI do Google quản lý, hàm công cụ tuỳ chỉnh để gửi tin nhắn Google Chat (thông qua Google Chat API).
  • Công cụ tạo tác nhân: Bộ công cụ phát triển tác nhân (ADK).
  • Máy chủ lưu trữ tác nhân: Vertex AI Agent Engine.
  • Giao diện người dùng: Ứng dụng web Gemini Enterprise.

Công cụ này sẽ được tích hợp trong Gemini Enterprise bằng tính năng tự cung cấp, vì vậy, chúng ta cần thực hiện các bước triển khai, đăng ký và định cấu hình.

Xem lại các khái niệm

Vertex AI

Vertex AI cung cấp mọi thứ bạn cần để xây dựng và sử dụng AI tạo sinh, bao gồm các giải pháp AI, tính năng tìm kiếm và trò chuyện, hơn 130 mô hình nền tảng và một nền tảng AI hợp nhất.

4670fcf7a826af4d.png

Agent Development Kit (ADK)

Bộ công cụ phát triển tác nhân (ADK) là một bộ công cụ và khung chuyên biệt được thiết kế để đơn giản hoá việc tạo các tác nhân AI tự trị bằng cách cung cấp các mô-đun dựng sẵn để suy luận, quản lý bộ nhớ và tích hợp công cụ.

Giao thức ngữ cảnh mẫu (MCP)

Giao thức ngữ cảnh mô hình (MCP) là một tiêu chuẩn mở được thiết kế để cho phép tích hợp liền mạch và an toàn giữa các ứng dụng AI và nhiều nguồn dữ liệu hoặc công cụ thông qua một giao diện "cắm và chạy" phổ biến.

Công cụ hàm

Công cụ hàm là một quy trình thực thi được xác định trước mà mô hình AI có thể kích hoạt để thực hiện các hành động cụ thể hoặc truy xuất dữ liệu theo thời gian thực từ các hệ thống bên ngoài, mở rộng khả năng của mô hình này ngoài việc chỉ tạo văn bản đơn giản.

Xem xét cấu trúc giải pháp

43df337e0f3d64e8.png

Xem xét mã nguồn

agent.py

...
MODEL = "gemini-2.5-flash"

# Gemini Enterprise authentication injects a bearer token into the ToolContext state.
# The key pattern is "GE_AUTH_NAME_<random_digits>".
# We dynamically parse this token to authenticate our MCP and API calls.
GE_AUTH_NAME = "enterprise-ai"

VERTEXAI_SEARCH_TIMEOUT = 15.0

def get_project_id():
    """Fetches the consumer project ID from the environment natively."""
    _, project = google.auth.default()
    if project:
        return project
    raise Exception(f"Failed to resolve GCP Project ID from environment.")

def find_serving_config_path():
    """Dynamically finds the default serving config in the engine."""
    project_id = get_project_id()
    engines = discoveryengine_v1.EngineServiceClient().list_engines(
        parent=f"projects/{project_id}/locations/global/collections/default_collection"
    )
    for engine in engines:
        # engine.name natively contains the numeric Project Number
        return f"{engine.name}/servingConfigs/default_serving_config"
    raise Exception(f"No Discovery Engines found in project {project_id}")

def _get_access_token_from_context(tool_context: ToolContext) -> str:
    """Helper method to dynamically parse the intercepted bearer token from the context state."""
    escaped_name = re.escape(GE_AUTH_NAME)
    pattern = re.compile(fr"^{escaped_name}_\d+$")
    # Handle ADK varying state object types (Raw Dict vs ADK State)
    state_dict = tool_context.state.to_dict() if hasattr(tool_context.state, 'to_dict') else tool_context.state
    matching_keys = [k for k in state_dict.keys() if pattern.match(k)]
    if matching_keys:
        return state_dict.get(matching_keys[0])
    raise Exception(f"No bearer token found in ToolContext state matching pattern {pattern.pattern}")

def auth_header_provider(tool_context: ToolContext) -> dict[str, str]:
    token = _get_access_token_from_context(tool_context)
    return {"Authorization": f"Bearer {token}"}

def send_direct_message(email: str, message: str, tool_context: ToolContext) -> dict:
    """Sends a Google Chat Direct Message (DM) to a specific user by email address."""
    chat_client = chat_v1.ChatServiceClient(
        credentials=Credentials(token=_get_access_token_from_context(tool_context))
    )

    # 1. Setup the DM space or find existing one
    person = chat_v1.User(
        name=f"users/{email}",
        type_=chat_v1.User.Type.HUMAN
    )
    membership = chat_v1.Membership(member=person)
    space_req = chat_v1.Space(space_type=chat_v1.Space.SpaceType.DIRECT_MESSAGE)
    setup_request = chat_v1.SetUpSpaceRequest(
        space=space_req,
        memberships=[membership]
    )
    space_response = chat_client.set_up_space(request=setup_request)
    space_name = space_response.name
    
    # 2. Send the message
    msg = chat_v1.Message(text=message)
    message_request = chat_v1.CreateMessageRequest(
        parent=space_name,
        message=msg
    )
    message_response = chat_client.create_message(request=message_request)
    
    return {"status": "success", "message_id": message_response.name, "space": space_name}

vertexai_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://discoveryengine.googleapis.com/mcp",
        timeout=VERTEXAI_SEARCH_TIMEOUT,
        sse_read_timeout=VERTEXAI_SEARCH_TIMEOUT
    ),
    tool_filter=['search'],
    # The auth_header_provider dynamically injects the bearer token from the ToolContext
    # into the MCP call for authentication.
    header_provider=auth_header_provider
)

# Answer nicely the following user queries:
#  - Please find my meetings for today, I need their titles and links
#  - What is the latest Drive file I created?
#  - What is the latest Gmail message I received?
#  - Please send the following message to someone@example.com: Hello, this is a test message.

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""
        You are a helpful assistant that always uses the Vertex AI MCP search tool to answer the user's message, unless the user asks you to send a message to someone.
        If the user asks you to send a message to someone, use the send_direct_message tool to send the message.
        You MUST unconditionally use the Vertex AI MCP search tool to find answer, even if you believe you already know the answer or believe the Vertex AI MCP search tool does not contain the data.
        The Vertex AI MCP search tool accesses the user's data through datastores including Google Drive, Google Calendar, and Gmail.
        Only use the Vertex AI MCP search tool with servingConfig and query parameters, do not use any other parameters.
        Always use the servingConfig {find_serving_config_path()} while using the Vertex AI MCP search tool.
    """,
    tools=[vertexai_mcp, FunctionTool(send_direct_message)]
)

Cho phép API

Giải pháp này yêu cầu bạn bật thêm các API sau:

  1. Trong Google Cloud Console, hãy bật Vertex AI, Cloud Resource Manager và Google Chat API:

4f02a36b050bab00.png

  1. Nhấp vào Trình đơn ☰ > API và Dịch vụ > API và Dịch vụ đã bật, sau đó xác nhận rằng Vertex AI API, Cloud Resource Manager APIGoogle Chat API có trong danh sách.

Giải pháp này cần có thêm quyền truy cập vào dữ liệu:

  1. Trong Bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn ☰ > Nền tảng xác thực của Google > Quyền truy cập vào dữ liệu.

  1. Nhấp vào Thêm hoặc xoá phạm vi.
  2. Sao chép các phạm vi sau rồi dán vào trường Thêm phạm vi theo cách thủ công.
  3. Nhấp vào Thêm vào bảng, sau đó nhấp vào Cập nhật rồi nhấp vào Lưu.
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/chat.messages.create
https://www.googleapis.com/auth/chat.spaces.create
  1. Nhấp vào Thêm vào bảng, sau đó nhấp vào Cập nhật rồi nhấp vào Lưu.

56fbba733139acfe.png

Cập nhật thông tin đăng nhập của ứng dụng OAuth

Giải pháp này yêu cầu thêm một URI chuyển hướng được uỷ quyền:

  1. Trong Bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn ☰ > Nền tảng xác thực của Google > Ứng dụng.

  1. Nhấp vào tên khách hàng codelab.
  2. Trong phần URI chuyển hướng được uỷ quyền, hãy nhấp vào Thêm URI rồi nhập https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  3. Nhấp vào Lưu.

deed597aa54fec91.png

Bật MCP của Vertex AI Search

  1. Trong một thiết bị đầu cuối, hãy thực thi:
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

Định cấu hình ứng dụng Chat

  1. Trong Google Cloud Console, hãy tìm Google Chat API trong trường tìm kiếm của Google Cloud, nhấp vào Google Chat API, nhấp vào Quản lý rồi nhấp vào Cấu hình.

  1. Đặt Tên ứng dụngNội dung mô tả thành Gemini Enterprise.
  2. Đặt URL của hình đại diện thành https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
  3. Huỷ chọn Bật các tính năng tương tác rồi nhấp vào Tắt trong hộp thoại phương thức xuất hiện.
  4. Chọn Ghi lỗi vào Nhật ký.
  5. Nhấp vào Lưu.

90cb612e51bce4e6.png

Triển khai tác nhân trong Vertex AI Agent Engine

  1. Tải kho lưu trữ này trên GitHub xuống.

  1. Trong một cửa sổ dòng lệnh, hãy mở thư mục solutions/enterprise-ai-agent rồi thực thi:
# 1. Create and activate a new virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 2. Install poetry and project dependencies
pip install poetry
poetry install

# 3. Deploy the agent
adk deploy agent_engine \
  --project=$(gcloud config get-value project) \
  --region=us-central1 \
  --display_name="Enterprise AI" \
  enterprise_ai

eafd2f9c4fbf305.png

  1. Khi bạn thấy dòng Deploying to agent engine... (Đang triển khai cho công cụ tác nhân...) trong nhật ký, hãy mở một cửa sổ dòng lệnh mới và thực thi lệnh sau để thêm các quyền cần thiết vào Vertex AI Reasoning Engine Service Agent (Tác nhân dịch vụ Công cụ suy luận Vertex AI):
# 1. Get the current Project ID
PROJECT_ID=$(gcloud config get-value project)

# 2. Extract the Project Number for that ID
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

# 3. Construct the Service Account name
SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"

# 4. Apply the IAM policy binding
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:$SERVICE_ACCOUNT" \
     --role="roles/discoveryengine.viewer"
  1. Đợi lệnh adk deploy hoàn tất, sau đó sao chép tên tài nguyên của tác nhân mới triển khai từ đầu ra lệnh có màu xanh lục.

d098fe1347d6581b.png

Đăng ký tác nhân trong Gemini Enterprise

Mở Gemini Enterprise trong Bảng điều khiển Cloud ở một thẻ mới, sau đó làm theo các bước sau:

  1. Nhấp vào ứng dụng có tên codelab.
  2. Trong trình đơn điều hướng, hãy nhấp vào Nhân viên.
  3. Nhấp vào + Thêm nhân viên hỗ trợ.
  4. Nhấp vào Thêm cho Nhân viên hỗ trợ tuỳ chỉnh thông qua Agent Engine. Mục Uỷ quyền sẽ xuất hiện.
  5. Nhấp vào Thêm uỷ quyền.
  6. Đặt Tên uỷ quyền thành enterprise-ai. Một mã nhận dạng sẽ được tạo dựa trên tên và xuất hiện bên dưới trường, hãy sao chép mã nhận dạng đó.
  7. Đặt Mã ứng dụng thành cùng giá trị với ứng dụng OAuth đã tạo và cập nhật ở các bước trước.
  8. Đặt Khoá bí mật của ứng dụng thành cùng giá trị với ứng dụng OAuth đã tạo và cập nhật ở các bước trước.
  9. Đặt URI mã thông báo thành https://oauth2.googleapis.com/token.
  10. Đặt URI uỷ quyền thành giá trị sau đây sau khi thay thế <CLIENT_ID> bằng mã ứng dụng OAuth đã tạo và cập nhật ở các bước trước.
https://accounts.google.com/o/oauth2/v2/auth?client_id=<CLIENT_ID>&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Fstatic%2Foauth%2Foauth.html&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.messages.create%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.spaces.create&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
  1. Nhấp vào Xong rồi nhấp vào Tiếp theo. Phần Cấu hình sẽ xuất hiện.
  2. Đặt Tên tác nhânNội dung mô tả về tác nhân thành Enterprise AI.
  3. Đặt công cụ suy luận Agent Engine thành tên tài nguyên của công cụ suy luận đã sao chép ở các bước trước. Tham số này có định dạng như sau:
projects/<PROJECT_ID>/locations/<LOCATION>/reasoningEngines/<REASONING_ENGINE_ID>
  1. Nhấp vào Tạo. Nhân viên hỗ trợ mới được thêm hiện có trong mục Nhân viên hỗ trợ.

Dùng thử tác nhân

  1. Trong ứng dụng web Gemini Enterprise, hãy trò chuyện với tác nhân vừa đăng ký:
  2. Nhấp vào Trình đơn ☰ > Nhân viên hỗ trợ.
  3. Chọn tác nhân trong phần Từ tổ chức của bạn.
  4. Trong cuộc trò chuyện, hãy nhập Please find my meetings for today, I need their titles and links rồi nhấn enter.
  5. Nhấp vào Uỷ quyền, sau đó làm theo quy trình uỷ quyền.

ed61cf654cbcd76c.png

  1. Trợ lý sẽ trả lời bằng danh sách các sự kiện trên Lịch (tuỳ thuộc vào tài khoản của người dùng).
  2. Trong cuộc trò chuyện, hãy nhập Please send a Chat message to someone@example.com with the following text: Hello! rồi nhấn enter.
  3. Trợ lý sẽ trả lời bằng một thông báo xác nhận.

1647ebff031c42e7.png

a8087d2351e77fb4.png

5. Tác nhân mặc định dưới dạng tiện ích bổ sung của Google Workspace

Trợ lý này cho phép người dùng tìm kiếm dữ liệu cho Workspace bằng ngôn ngữ tự nhiên trong bối cảnh giao diện người dùng của ứng dụng Workspace. Thành phần này dựa vào các phần tử sau:

  • Mô hình: Gemini.
  • Dữ liệu: Kho lưu trữ dữ liệu Gemini Enterprise cho Google Workspace (Lịch, Gmail, Drive, NotebookLM), Google Tìm kiếm.
  • Máy chủ lưu trữ tác nhân: Gemini Enterprise.
  • Giao diện người dùng: Tiện ích bổ sung Google Workspace cho Chat và Gmail (dễ dàng mở rộng sang Lịch, Drive, Tài liệu, Trang tính và Trang trình bày).
  • Tiện ích bổ sung Google Workspace: Apps Script, Gemini Enterprise và API Vertex AI, theo ngữ cảnh (siêu dữ liệu người dùng, thư Gmail được chọn).

Tiện ích bổ sung Google Workspace sẽ được kết nối với Gemini Enterprise bằng API StreamAssist.

Xem lại các khái niệm

Tiện ích bổ sung của Google Workspace

Tiện ích bổ sung Google Workspace là một ứng dụng tuỳ chỉnh giúp mở rộng một hoặc nhiều ứng dụng Google Workspace (Gmail, Chat, Lịch, Tài liệu, Drive, Meet, Trang tính và Trang trình bày).

Apps Script

Apps Script là một nền tảng JavaScript dựa trên đám mây do Google Drive cung cấp, cho phép bạn tích hợp và tự động hoá các tác vụ trên các sản phẩm của Google.

Khung thẻ Google Workspace

Khung thẻ trong Google Workspace cho phép nhà phát triển tạo giao diện người dùng phong phú và có tính tương tác. Thư viện này cho phép tạo các thẻ có tổ chức và bắt mắt, có thể bao gồm văn bản, hình ảnh, nút và các tiện ích khác. Các thẻ này giúp nâng cao trải nghiệm người dùng bằng cách cung cấp thông tin có cấu trúc và cho phép thực hiện các thao tác nhanh ngay trong các ứng dụng Workspace.

Xem xét kiến trúc giải pháp

1798c39f7aaed8fc.png

Xem xét mã nguồn

appsscript.json

...
"addOns": {
    "common": {
      "name": "Enterprise AI",
      "logoUrl": "https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png"
    },
    "chat": {},
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onAddonEvent"
        }
      ]
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/discoveryengine.assist.readwrite",
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
  ]
...

Chat.gs

...
// Service that handles Google Chat operations.

// Handle incoming Google Chat message events, actions will be taken via Google Chat API calls
function onMessage(event) {
  if (isInDebugMode()) {
    console.log(`MESSAGE event received (Chat): ${JSON.stringify(event)}`);
  }
  // Extract data from the event.
  const chatEvent = event.chat;
  setChatConfig(chatEvent.messagePayload.space.name);

  // Request AI agent to answer the message
  requestAgent(chatEvent.messagePayload.message);
  // Respond with an empty response to the Google Chat platform to acknowledge execution
  return null; 
}

// --- Utility functions ---

// The Chat direct message (DM) space associated with the user
const SPACE_NAME_PROPERTY = "DM_SPACE_NAME"

// Sets the Chat DM space name for subsequent operations.
function setChatConfig(spaceName) {
  const userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty(SPACE_NAME_PROPERTY, spaceName);
  console.log(`Space is set to ${spaceName}`);
}

// Retrieved the Chat DM space name to sent messages to.
function getConfiguredChat() {
  const userProperties = PropertiesService.getUserProperties();
  return userProperties.getProperty(SPACE_NAME_PROPERTY);
}

// Finds the Chat DM space name between the Chat app and the given user.
function findChatAppDm(userName) {
  return Chat.Spaces.findDirectMessage(
    { 'name': userName },
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

// Creates a Chat message in the configured space.
function createMessage(message) {
  const spaceName = getConfiguredChat();
  console.log(`Creating message in space ${spaceName}...`);
  return Chat.Spaces.Messages.create(
    message,
    spaceName,
    {},
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

Sidebar.gs

...
// Service that handles Gmail operations.

// Triggered when the user opens the Gmail Add-on or selects an email.
function onAddonEvent(event) {
  // If this was triggered by a button click, handle it
  if (event.parameters && event.parameters.action === 'send') {
    return handleSendMessage(event);
  }

  // Otherwise, just render the default initial sidebar
  return createSidebarCard();
}

// Creates the standard Gmail sidebar card consisting of a text input and send button.
// Optionally includes an answer section if a response was generated.
function createSidebarCard(optionalAnswerSection) {
  const card = CardService.newCardBuilder();
  const actionSection = CardService.newCardSection();

  // Create text input for the user's message
  const messageInput = CardService.newTextInput()
    .setFieldName("message")
    .setTitle("Message")
    .setMultiline(true);

  // Create action for sending the message
  const sendAction = CardService.newAction()
    .setFunctionName('onAddonEvent')
    .setParameters({ 'action': 'send' });

  const sendButton = CardService.newTextButton()
    .setText("Send message")
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setOnClickAction(sendAction);

  actionSection.addWidget(messageInput);
  actionSection.addWidget(CardService.newButtonSet().addButton(sendButton));

  card.addSection(actionSection);

  // Attach the response at the bottom if we have one
  if (optionalAnswerSection) {
    card.addSection(optionalAnswerSection);
  }

  return card.build();
}

// Handles clicks from the Send message button.
function handleSendMessage(event) {
  const commonEventObject = event.commonEventObject || {};
  const formInputs = commonEventObject.formInputs || {};
  const messageInput = formInputs.message;

  let userMessage = "";
  if (messageInput && messageInput.stringInputs && messageInput.stringInputs.value.length > 0) {
    userMessage = messageInput.stringInputs.value[0];
  }

  if (!userMessage || userMessage.trim().length === 0) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Please enter a message."))
      .build();
  }

  let finalQueryText = `USER MESSAGE TO ANSWER: ${userMessage}`;

  // If we have an email selected in Gmail, append its content as context
  if (event.gmail && event.gmail.messageId) {
    try {
      GmailApp.setCurrentMessageAccessToken(event.gmail.accessToken);
      const message = GmailApp.getMessageById(event.gmail.messageId);

      const subject = message.getSubject();
      const bodyText = message.getPlainBody() || message.getBody();

      finalQueryText += `\n\nEMAIL THE USER HAS OPENED ON SCREEN:\nSubject: ${subject}\nBody:\n---\n${bodyText}\n---`;
    } catch (e) {
      console.error("Could not fetch Gmail context: " + e);
      // Invalidate the token explicitly so the next prompt requests the missing scopes
      ScriptApp.invalidateAuth();

      CardService.newAuthorizationException()
        .setResourceDisplayName("Enterprise AI")
        .setAuthorizationUrl(ScriptApp.getAuthorizationUrl())
        .throwException();
    }
  }

  try {
    const responseText = queryAgent({ text: finalQueryText, forceNewSession: true });

    // We leverage the 'showdown' library to parse the LLM's Markdown output into HTML
    // We also substitute markdown listings with arrows and adjust newlines for clearer rendering in the sidebar
    let displayedText = substituteListingsFromMarkdown(responseText);
    displayedText = new showdown.Converter().makeHtml(displayedText).replace(/\n/g, '\n\n');

    const textParagraph = CardService.newTextParagraph();
    textParagraph.setText(displayedText);

    const answerSection = CardService.newCardSection()
      .addWidget(textParagraph);

    const updatedCard = createSidebarCard(answerSection);

    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().updateCard(updatedCard))
      .build();

  } catch (err) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Error fetching response: " + err.message))
      .build();
  }
}
...

AgentHandler.gs

...
// Service that handles Gemini Enterprise AI Agent operations.

// Submits a query to the AI agent and returns the response string synchronously
function queryAgent(input) {
  const isNewSession = input.forceNewSession || !PropertiesService.getUserProperties().getProperty(AGENT_SESSION_NAME);
  const sessionName = input.forceNewSession ? createAgentSession() : getOrCreateAgentSession();

  let systemPrompt = "SYSTEM PROMPT START Do not respond with tables but use bullet points instead.";
  if (input.forceNewSession) {
    systemPrompt += " Do not ask the user follow-up questions or converse with them as history is not kept in this interface.";
  }
  systemPrompt += " SYSTEM PROMPT END\n\n";

  const queryText = isNewSession ? systemPrompt + input.text : input.text;

  const requestPayload = {
    "session": sessionName,
    "userMetadata": { "timeZone": Session.getScriptTimeZone() },
    "query": { "text": queryText },
    "toolsSpec": { "vertexAiSearchSpec": { "dataStoreSpecs": getAgentDataStores().map(ds => { dataStore: ds }) } },
    "agentsSpec": { "agentSpecs": [{ "agentId": getAgentId() }] }
  };

  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1alpha/${getReasoningEngine()}/assistants/default_assistant:streamAssist?alt=sse`,
    {
      method: 'post',
      headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` },
      contentType: 'application/json',
      payload: JSON.stringify(requestPayload),
      muteHttpExceptions: true
    }
  ).getContentText();

  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }

  const events = responseContentText.split('\n').map(s => s.replace(/^data:\s*/, '')).filter(s => s.trim().length > 0);
  console.log(`Received ${events.length} agent events.`);

  let answerText = "";
  for (const eventJson of events) {
    if (isInDebugMode()) {
      console.log("Event: " + eventJson);
    }
    const event = JSON.parse(eventJson);

    // Ignore internal events
    if (!event.answer) {
      console.log(`Ignored: internal event`);
      continue;
    }

    // Handle text replies
    const replies = event.answer.replies || [];
    for (const reply of replies) {
      const content = reply.groundedContent.content;
      if (content) {
        if (isInDebugMode()) {
          console.log(`Processing content: ${JSON.stringify(content)}`);
        }
        if (content.thought) {
          console.log(`Ignored: thought event`);
          continue;
        }
        answerText += content.text;
      }
    }

    if (event.answer.state === "SUCCEEDED") {
      console.log(`Answer text: ${answerText}`);
      return answerText;
    } else if (event.answer.state !== "IN_PROGRESS") {
      throw new Error("Something went wrong, check the Apps Script logs for more info.");
    }
  }
  return answerText;
}

// Gets the list of data stores configured for the agent to include in the request.
function getAgentDataStores() {
  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1/${getReasoningEngine().split('/').slice(0, 6).join('/')}/dataStores`,
    {
      method: 'get',
      // Use the add on service account credentials for data store listing access
      headers: { 'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}` },
      contentType: 'application/json',
      muteHttpExceptions: true
    }
  ).getContentText();
  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }
  const dataStores = JSON.parse(responseContentText).dataStores.map(ds => ds.name);
  if (isInDebugMode()) {
    console.log(`Data stores: ${dataStores}`);
  }
  return dataStores;
}
...

Khởi tạo tài khoản dịch vụ

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:

  1. Nhấp vào Trình đơn ☰ > IAM và Quản trị > Tài khoản dịch vụ > + Tạo tài khoản dịch vụ.

  1. Đặt Tên tài khoản dịch vụ thành ge-add-on.

d44d6aae29e2464c.png

  1. Nhấp vào Tạo và tiếp tục.
  2. Thêm vai trò Người xem công cụ Khám phá vào phần quyền.

f1374efa4f326ef5.png

  1. Nhấp vào Tiếp tục rồi nhấp vào Xong. Bạn sẽ được chuyển hướng đến trang Tài khoản dịch vụ và có thể thấy tài khoản dịch vụ mà bạn đã tạo.

b9496085f1404c5c.png

  1. Chọn tài khoản dịch vụ mới tạo rồi chọn thẻ Khoá.
  2. Nhấp vào Thêm khoá rồi nhấp vào Tạo khoá mới.
  3. Chọn JSON rồi nhấp vào Tạo.

f4280f5533a08821.png

  1. Hộp thoại sẽ đóng và cặp khoá công khai/riêng tư mà bạn vừa tạo sẽ tự động tải xuống môi trường cục bộ dưới dạng tệp JSON.

Tạo và định cấu hình dự án Apps Script

  1. Nhấp vào nút sau để mở dự án Apps Script Tiện ích bổ sung AI cho doanh nghiệp:

  1. Nhấp vào Tổng quan > Tạo bản sao.
  2. Trong dự án Apps Script, hãy nhấp vào Cài đặt dự án > Chỉnh sửa thuộc tính tập lệnh > Thêm thuộc tính tập lệnh để thêm thuộc tính tập lệnh.
  3. Đặt REASONING_ENGINE_RESOURCE_NAME thành tên tài nguyên ứng dụng Gemini Enterprise. Tham số này có định dạng như sau:
# 1. Replace PROJECT_ID with the Google Cloud project ID.
# 2. Replace GE_APP_ID with the codelab app ID found in Google Cloud console > Gemini Enterprise > Apps.

projects/<PROJECT_ID>/locations/global/collections/default_collection/engines/<GE_APP_ID>
  1. Đặt APP_SERVICE_ACCOUNT_KEY thành khoá JSON trong tệp tài khoản dịch vụ đã tải xuống ở các bước trước.
  2. Nhấp vào Lưu thuộc tính của tập lệnh

Triển khai cho Gmail và Chat

Trong dự án Apps Script, hãy làm theo các bước sau:

  1. Nhấp vào Triển khai > Triển khai thử nghiệm, rồi nhấp vào Cài đặt. Tính năng này hiện đã có trong Gmail.
  2. Nhấp vào Sao chép trong phần Mã triển khai tiêu đề.

2ed2df972ad92715.png

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:

  1. Tìm Google Chat API trong trường tìm kiếm của Google Cloud, nhấp vào Google Chat API, nhấp vào Quản lý rồi nhấp vào Cấu hình.

  1. Chọn Bật các tính năng tương tác.
  2. Huỷ chọn Tham gia không gian và cuộc trò chuyện nhóm.
  3. Trong phần Cài đặt kết nối, hãy chọn Apps Script.
  4. Đặt Mã hoạt động triển khai thành Mã hoạt động triển khai đầu trang đã sao chép ở các bước trước.
  5. Trong phần Chế độ hiển thị, hãy chọn Cho phép một số người và nhóm cụ thể trong miền Workspace của bạn sử dụng ứng dụng Chat này rồi nhập địa chỉ email của bạn.
  6. Nhấp vào Lưu.

3b7d461c423f7c51.png

Dùng thử Tiện ích bổ sung

Mở Google Chat trong thẻ mới, sau đó làm theo các bước sau:

  1. Mở một không gian nhắn tin trực tiếp với Gemini Enterprise trong ứng dụng Chat.

3da8690d19baf2d0.png

  1. Nhấp vào Định cấu hình rồi thực hiện quy trình xác thực.
  2. Nhập What are my meetings for today? rồi nhấn enter. Ứng dụng trò chuyện Gemini Enterprise sẽ trả lời bằng kết quả.

c8c63fb3f324fecf.png

Mở Gmail trong một thẻ mới, sau đó làm theo các bước sau:

  1. Gửi email cho chính bạn với Tiêu đề được đặt thành We need to talkNội dung được đặt thành Are you available today between 8 and 9 AM?
  2. Mở email mới nhận được.
  3. Mở thanh bên của tiện ích bổ sung AI cho doanh nghiệp.
  4. Đặt Message (Thông báo) thành Am I?
  5. Nhấp vào Gửi tin nhắn.
  6. Câu trả lời sẽ xuất hiện sau nút này.

d33b8cb50ee251b7.png

6. Dọn dẹp

Xoá dự án trên Google Cloud

Để tránh phát sinh phí cho Tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong lớp học lập trình này, bạn nên xoá dự án trên Google Cloud.

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:

  1. Nhấp vào Trình đơn ☰ > IAM và Quản trị > Cài đặt.

  1. Nhấp vào Tắt.
  2. Nhập mã dự án.
  3. Nhấp vào Vẫn tắt.

3b9492d97f771b2c.png

7. Xin chúc mừng

Xin chúc mừng! Bạn đã xây dựng các giải pháp khai thác sức mạnh của việc kết hợp Gemini Enterprise và Google Workspace cho nhân viên!

Tiếp theo là gì?

Trong lớp học lập trình này, chúng tôi chỉ giới thiệu những trường hợp sử dụng điển hình nhất, nhưng có rất nhiều lĩnh vực mở rộng mà bạn có thể muốn cân nhắc trong các giải pháp của mình, chẳng hạn như:

  • Sử dụng các công cụ dành cho nhà phát triển dựa trên AI, chẳng hạn như Gemini CLI và Antigravity.
  • Tích hợp với các khung và công cụ tác nhân khác, chẳng hạn như MCP tuỳ chỉnh, lệnh gọi hàm tuỳ chỉnh và giao diện người dùng tạo sinh.
  • Tích hợp với các mô hình AI khác, bao gồm cả mô hình tuỳ chỉnh, được lưu trữ trong các nền tảng chuyên dụng như Vertex AI.
  • Tích hợp với các tác nhân khác, được lưu trữ trong các nền tảng chuyên dụng như Dialogflow hoặc do bên thứ ba cung cấp thông qua Cloud Marketplace.
  • Xuất bản các tác nhân trên Cloud Marketplace để hỗ trợ các nhóm, tổ chức hoặc người dùng công khai.

Tìm hiểu thêm

Có rất nhiều tài nguyên dành cho nhà phát triển, chẳng hạn như video trên YouTube, trang web tài liệu, mã mẫu và hướng dẫn: