1. Trước khi bắt đầu
Ứng dụng Google Chat nào có trong Gemini?
Các ứng dụng Google Chat có Gemini có những chức năng sau:
- Đưa các dịch vụ và tài nguyên của bạn vào Google Chat để người dùng có thể nhận thông tin và thực hiện hành động mà không cần rời khỏi cuộc trò chuyện.
- Tích hợp với mô hình AI tạo sinh Gemini để họ có thể tạo hoặc tìm dữ liệu như văn bản hoặc hình ảnh vào những thời điểm cụ thể, giúp đơn giản hoá quy trình làm việc của bạn.
Tại sao bạn nên tích hợp ứng dụng Google Chat với Gemini?
Sau đây là các trường hợp sử dụng điển hình của các mô hình AI tạo sinh như Gemini:
- Tạo và nâng cao nội dung. Tạo nội dung tiếp thị, tạo bài đăng trên mạng xã hội, tạo hình ảnh chân thực, soạn nhạc hoặc hỗ trợ sáng tạo nội dung video.
- Tìm kiếm dữ liệu. Trích xuất thông tin chi tiết chính từ cơ sở kiến thức chưa có cấu trúc, tóm tắt văn bản dài, phân loại nội dung hoặc dịch ngôn ngữ với độ chính xác và tốc độ cao hơn.
- Cuộc trò chuyện. Tham gia vào các cuộc trò chuyện tự nhiên, giàu thông tin và sáng tạo.
Khả năng tích hợp trực tiếp những chức năng này trong giao diện quen thuộc của Google Chat là một cơ hội lớn cho những ai muốn cải thiện trải nghiệm và năng suất làm việc của người dùng.
Điều kiện tiên quyết
- Có kiến thức cơ bản về Apps Script, Google Cloud và Node.js.
- Có kiến thức cơ bản về các khái niệm của Google Chat, bao gồm trình xử lý sự kiện, lệnh dấu gạch chéo, hộp thoại, thẻ, tin nhắn, xác thực ứng dụng và API.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ tạo 3 ứng dụng Google Chat bằng Gemini để bao gồm 3 trường hợp sử dụng đã giới thiệu trong phần trước.
Ứng dụng quản lý vấn đề (tạo và nâng cao nội dung)
Ứng dụng này thực hiện những việc sau:
- Quản lý các vấn đề từ khi tạo cho đến đóng bằng các hoạt động tương tác cơ bản, trang chủ ứng dụng và xác thực ứng dụng.
- Theo dõi tin nhắn và hỗ trợ hoà nhập thông qua các sự kiện và tiện ích phụ.
Bạn sử dụng Gemini để thực hiện những việc sau:
- Tạo báo cáo vấn đề dựa trên nhật ký tin nhắn và thông tin chi tiết về vấn đề.
- Phân loại các từ không bao hàm trong thư bằng câu lệnh có kiểm soát.
Các công nghệ chính được sử dụng là Vertex AI, Gemini, Apps Script và các API của Google Workspace (Quản trị, Chat, Tài liệu, Sự kiện).
Ứng dụng tri thức (tìm kiếm dữ liệu)
Ứng dụng này dựa vào Gemini để hiểu và trả lời câu hỏi bằng ngôn ngữ tự nhiên, cũng như trả về tham chiếu nguồn từ dữ liệu không có cấu trúc.
Các công nghệ chính được sử dụng là tác nhân cửa hàng dữ liệu Dialogflow CX, webhook CX, Google Cloud Functions và Gemini.
Ứng dụng phản hồi (cuộc trò chuyện)
Ứng dụng này dựa vào Gemini để thu thập và lưu trữ bài đánh giá với các cuộc trò chuyện bằng ngôn ngữ tự nhiên.
Các công nghệ chính được sử dụng là dự án hỗ trợ dự án Dialogflow CX, công cụ Dialogflow CX, OpenAPI, Google Cloud Functions và Gemini.
Kiến thức bạn sẽ học được
- Cách tích hợp các ứng dụng Google Chat với Gemini thông qua Vertex AI.
- Cách tích hợp các ứng dụng Google Chat với nhân viên hỗ trợ dự án Dialogflow CX.
- Cách sử dụng các tính năng mới nhất của Google Chat: trang chủ ứng dụng, Sự kiện trong Google Chat và các tiện ích phụ.
Những gì bạn cần
- Đã hoàn thành hướng dẫn bắt đầu nhanh Tạo ứng dụng Google Chat bằng Apps Script. Lớp học lập trình này được xây dựng dựa trên Apps Script và dự án Google Cloud thu được.
2. Bắt đầu thiết lập
Khởi chạy tài nguyên
Trong phần này, bạn truy cập và định cấu hình các tài nguyên sau đây trên trình duyệt web mà bạn ưa thích.
Dự án Apps Script
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Nhấp vào Cài đặt, rồi bật API Google Apps Script.
- Chọn dự án của bạn.
- Nhấp vào Cài đặt dự án.
- Chọn hộp đánh dấu Show "
appsscript.json
" manifest file in editor (Hiển thị tệp kê khai trong trình chỉnh sửa). - Đổi tên dự án thành
Chat Apps Gemini
.
Dự án trong Google Cloud
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Nhấp vào Trình đơn ⋮ > API và dịch vụ > màn hình xin phép OAuth > Chỉnh sửa ứng dụng, sau đó đặt Tên ứng dụng thành
Chat Apps Gemini
.
- Chuyển đến cấu hình API Google Chat rồi đặt Tên ứng dụng và Nội dung mô tả thành
Chat Apps Gemini
.
Google Chat
Trong Google Chat, hãy làm theo các bước sau:
- Nếu cần, hãy bắt đầu trò chuyện bằng ứng dụng Google Chat.
- Gửi một tin nhắn, chẳng hạn như
Hello
, để đảm bảo rằng tin nhắn này hoạt động.
Tải mã nguồn và tài nguyên xuống thiết bị
- Tải kho lưu trữ GitHub này xuống.
- Trong môi trường phát triển ưu tiên, hãy mở thư mục
apps-script/chat-apps-gemini
rồi chuyển đến cùng thư mục đó trong dòng lệnh của bạn.
Cài đặt và định cấu hình clasp
Chúng tôi sử dụng clasp
để dễ dàng chỉnh sửa và đẩy các phiên bản của mã nguồn từ môi trường cục bộ sang dự án Apps Script.
- Trong môi trường cục bộ, hãy cài đặt các phiên bản mới nhất của
node
,npm
vàclasp
.
npm install -g @google/clasp
- Đăng nhập bằng tài khoản của bạn:
clasp login
Nếu thành công, bạn sẽ thấy một màn hình xác nhận cơ bản trong trình duyệt web, đồng thời cập nhật tệp .clasprc.json
chứa thông tin xác thực ứng dụng. Bạn có thể tìm thấy vị trí của thiết bị trong thiết bị đầu cuối.
3. Ứng dụng 1: Bản dựng
Ôn 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ác giải pháp AI, trình tạo nhân viên hỗ trợ, hơn 130 mô hình nền tảng và một nền tảng AI hợp nhất.
Gemini
Gemini là một mô hình ngôn ngữ lớn đa phương thức của Google mà Google có thể tiếp cận thông qua Vertex AI. Dữ liệu này giúp mọi người khai phá tiềm năng con người để nâng cao trí tưởng tượng, mở rộng trí tò mò và nâng cao năng suất.
Dịch vụ Chat nâng cao
Dịch vụ Trò chuyện nâng cao cho phép bạn sử dụng API Google Chat trong Apps Script. Việc này cho phép các tập lệnh tìm, tạo và sửa đổi phòng Chat, thêm hoặc xoá thành viên khỏi không gian, đọc hoặc đăng tin nhắn có văn bản, thẻ, tệp đính kèm và lượt thể hiện cảm xúc.
Xem xét cấu trúc
Ứng dụng Google Chat này được xây dựng bằng Apps Script. Cách hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, qua tin nhắn trực tiếp hoặc trong không gian.
- Ứng dụng này (được triển khai trong dự án Apps Script và liên kết với một dự án Google Cloud) sẽ xử lý tin nhắn.
- Ứng dụng tích hợp với các API Google Tài liệu và Google Chat.
- Ứng dụng dùng Dịch vụ thuộc tính để lưu trữ dữ liệu trong các thuộc tính của tập lệnh.
- Ứng dụng gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Quy trình xem xét
Tạo vấn đề
Khắc phục sự cố liên quan đến không gian chuyên biệt
Đóng vấn đề của không gian chuyên biệt
Mã nguồn của bài đánh giá
Dự án Apps Script chứa các tập lệnh sau:
Configuration
: Các hằng số cần chỉnh sửa dựa trên môi trường.ChatApp
: Xử lý các sự kiện tương tác trong Google Chat, bao gồm cả tin nhắn, lượt nhấp vào thẻ, lệnh dấu gạch chéo và hộp thoại.Storage
: Các hàm hiệu dụng dựa trên Dịch vụ thuộc tính.ChatAppAuth
: Các hàm tiện ích dựa vào tính năng xác thực của ứng dụng Google Chat.Docs
: Các hàm hiệu dụng phụ thuộc vào Google Tài liệu.VertexAi
: Các hàm hiệu dụng dựa trên Vertex AI.
Sau đây là những phần được sử dụng thường xuyên khi tạo tài liệu báo cáo bằng nhật ký Gemini và không gian trò chuyện:
appsscript.json
// Enables the Admin SDK Directory and Chat services, which you need to retrieve
// messages and usernames.
"enabledAdvancedServices": [
...
{
"userSymbol": "AdminDirectory",
"version": "directory_v1",
"serviceId": "admin"
},
{
"userSymbol": "Chat",
"version": "v1",
"serviceId": "chat"
}
...
]
// Includes the OAuth scopes to request the Admin SDK Directory, Google Chat,
// Google Docs, and Vertex AI APIs.
"oauthScopes": [
...
"https://www.googleapis.com/auth/admin.directory.user.readonly",
"https://www.googleapis.com/auth/chat.messages.readonly",
"https://www.googleapis.com/auth/documents",
"https://www.googleapis.com/auth/cloud-platform",
...
]
Configuration.js
// Relies on two constants: the first one is the Google Cloud project ID and the
// second one is the Vertex AI location to be used.
...
const PROJECT_ID = 'replace-with-gcp-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
...
ChatApp.js
// The slash command process function retrieves history, generates content, and passes
// it to the report generator.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
const history = exportSpaceHistory(spaceId);
const summary = summarizeSpace(history);
const docUrl = createReport(
issue.title, issue.description, resolution, history, summary
);
...
}
...
}
/**
* Fetches and concatenates the 100 first space messages by using the Google Chat API.
*
* Messages with slash commands are filtered (app command invocations).
*
* @return {string} concatenate space messages in the format "Sender's name: Message"
*/
function exportSpaceHistory(spaceName) {
const messages = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 }).messages;
// Returns results after fetching message sender display names.
let users = new Map();
return messages
.filter(message => message.slashCommand === undefined)
.map(message =>
`${getUserDisplayName(users, message.sender.name)}: ${message.text}`
).join('\n');
}
/**
* Fetches a user's display name by using the Admin Directory API.
*
* A cache is used to only call the API once per user.
*
* @param {Map} cache the map containing users previously fetched
* @param {string} userId the user ID to fetch
* @return {string} the user's display name
*/
function getUserDisplayName(cache, userId) {
if (cache.has(userId)) {
return cache.get(userId);
}
let displayName = 'Unknown User';
try {
const user = AdminDirectory.Users.get(
userId.replace("users/", ""),
{ projection: 'BASIC', viewType: 'domain_public' });
displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
} catch (e) {
// Ignores errors, uses 'Unknown User' by default.
}
cache.set(userId, displayName);
return displayName;
}
VertexAi.js
/**
* Summarizes a Google Chat space history with the Gemini Pro model using
* Vertex AI API.
*
* @param {string} history the history
* @return {string} the summary
*/
function summarizeSpace(history) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Summarize the following conversation between engineers resolving"
+ " an issue in a few sentences.\n\n" + history
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
Docs.js
// The report generator function adds two sections: the first one is for the summary and the second one is for history.
function createReport(..., history, summary) {
...
body.appendParagraph("Summary").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(summary);
body.appendParagraph("History").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(history);
...
}
Cập nhật dự án trên Google Cloud
Cho phép API
- Trong bảng điều khiển Google Cloud, hãy bật các API Google Tài liệu, SDK dành cho quản trị viên của Google và Vertex AI:
- Nhấp vào biểu tượng Trình đơn ⋮ > API và dịch vụ > API và dịch vụ đã bật, sau đó xác nhận rằng các API đó đã được bật.
Bắt đầu 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:
- Nhấp vào biểu tượng Trình đơn ⋮ > IAM và Quản trị viên > Tài khoản dịch vụ > + Tạo tài khoản dịch vụ.
- Đặt Tên tài khoản dịch vụ thành
chat-app
. - Đặt Nội dung mô tả tài khoản dịch vụ thành
Chat app auth
. - Nhấp vào Tạo và tiếp tục.
- 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ể xem tài khoản dịch vụ mà bạn đã tạo.
- Chọn tài khoản dịch vụ mới tạo.
- Chọn thẻ Khoá.
- Nhấp vào Thêm khoá.
- Nhấp vào Create new key (Tạo khoá mới).
- Chọn JSON.
- Nhấp vào Tạo.
Hộp thoại sẽ đóng và cặp khoá công khai/riêng tư mà bạn mới tạo sẽ tự động được tải xuống môi trường cục bộ dưới dạng tệp JSON. Sau này, bạn sẽ sử dụng nội dung của nhóm đó khi chỉnh sửa mã nguồn của dự án Apps Script.
Cập nhật cấu hình API Google Chat
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Thêm lệnh dấu gạch chéo.
- Đặt Name (Tên) thành
/create
. - Đặt Command ID thành
1
. - Đặt Description (Mô tả) thành
Create a new issue
. - Chọn hộp đánh dấu Mở hộp thoại.
- Thêm một lệnh dấu gạch chéo khác.
- Đặt Name (Tên) thành
/close
. - Đặt Command ID thành
2
. - Đặt Description (Mô tả) thành
Close an issue
. - Nhấp vào Lưu.
Cập nhật dự án Apps Script
- Thay đổi thư mục hiện tại trong dòng lệnh cục bộ thành
issue-management/1-baseline
. Lớp này chứa mã nguồn. Trước khi đẩy mã nguồn vào dự án Apps Script, bạn cần định cấu hình một vài mục.
Định cấu hình mã nguồn
- Đặt hằng số JSON có tên
CHAT_CREDENTIALS
trong tệpConfiguration.js
thành nội dung tệp khoá riêng tư mà bạn đã tải xuống trước đó.
- Trong Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Trình đơn ⋮ > IAM và Quản trị viên > Cài đặt.
- Sao chép mã dự án.
- Đặt hằng số chuỗi có tên
PROJECT_ID
trong tệpConfiguration.js
thành mã dự án.
Định cấu hình chế độ cài đặt clasp
Để khởi chạy chế độ cài đặt clasp
nhằm đẩy mã nguồn vào đúng dự án Apps Script, hãy làm theo các bước sau:
- Trong bảng điều khiển Apps Script, hãy chọn dự án của bạn.
- Chọn Cài đặt dự án.
- Trong mục Mã nhận dạng, hãy nhấp vào Sao chép.
- Trong thư mục hiện tại, hãy tạo một tệp
.clasp.json
. - Thay thế
<your-script-id>
bằng mã đã sao chép. - Sao chép kết quả vào tệp
.clasp.json
. - Lưu tệp
.clasp.json
.
{
"scriptId": "<your-script-id>"
}
Đẩy mã nguồn
- Chạy lệnh sau:
$clasp push ? Manifest file has been updated. Do you want to push and overwrite? Yes └─ appsscript.json └─ ChatApp.js └─ ChatAppAuth.js └─ Configuration.js └─ Docs.js └─ Storage.js └─ VertexAi.js Pushed 7 files.
Hãy dùng thử it
- Trong Google Chat, hãy gửi tin nhắn trực tiếp cho
Hello!
bằng tin nhắn trực tiếp cho ứng dụng. Ứng dụng không trả lời nhưng một thông báo nhắc bạn định cấu hình sẽ xuất hiện.
- Nhấp vào Định cấu hình.
- Chọn Tài khoản Google của bạn.
- Xác thực.
- Xem lại và cho phép truy cập vào ứng dụng.
Nếu thành công, bạn sẽ thấy một màn hình xác nhận cơ bản trên trang web và phản hồi thực tế từ ứng dụng cho tin nhắn ban đầu của bạn.
- Gửi một tin nhắn trực tiếp khác đến ứng dụng nhưng bằng lệnh dấu gạch chéo
/create
.
- Trong hộp thoại, hãy đặt Tiêu đề thành
Issue Title 1
. - Đặt phần Mô tả cho ấn bản
Description 1
. - Nhấp vào Tạo.
Ứng dụng thực hiện những việc sau:
- Khi bạn chọn nút này, hộp thoại sẽ đóng.
- Tạo không gian dành riêng cho vấn đề mới tạo có cùng tiêu đề.
- Tham gia không gian mới tạo.
- Gửi tin nhắn chứa nội dung mô tả về vấn đề trong không gian mới tạo.
- Gửi tin nhắn trực tiếp cho bạn kèm theo đường liên kết đến không gian mới tạo.
- Trong không gian mới tạo, hãy gửi tin nhắn bằng lệnh dấu gạch chéo
/close
và độ phân giải nhưNot reproducible
.
Ứng dụng thực hiện những việc sau:
- Tạo tài liệu báo cáo trong Google Tài liệu.
- Gửi tin nhắn đến không gian dành riêng cho vấn đề này, kèm theo đường liên kết đến tài liệu báo cáo mới tạo.
- Mở tài liệu báo cáo. Bảng này chứa thông tin cơ bản, lịch sử và bản tóm tắt.
4. Không bắt buộc: Ứng dụng 1: Thêm trang chủ ứng dụng
Ôn lại các khái niệm
Trang chủ ứng dụng là thông báo thẻ có thể tuỳ chỉnh mà một ứng dụng Chat gửi cho người dùng khi người dùng truy cập vào thẻ Trang chủ qua tin nhắn trực tiếp bằng ứng dụng Chat. Thông báo này thường dùng để hiển thị tài liệu về ứng dụng hoặc thông tin tổng quan. Về mặt kỹ thuật, có một sự kiện dành riêng để xử lý và sự kiện này dựa trên các nguyên tắc cốt lõi giống như thông báo thẻ.
Quy trình xem xét
Quản lý vấn đề
Mã nguồn của bài đánh giá
Bạn cần chỉnh sửa dự án Apps Script.
ChatApp.js
/**
* Handles app home requests in Google Chat.
*
* Displays the latest status of all issues.
*/
function onAppHome() {
// Generates one card section per issue.
var sections = [];
for (var issueKey in appProperties.getProperties()) {
const issue = JSON.parse(appProperties.getProperty(issueKey));
if (issue.spaceId) {
sections.push({
header: `${issue.status} - ${issue.title}`,
widgets: [{ textParagraph: {
text: `Description: ${issue.description}`
}}, { textParagraph: {
text: `Resolution: ${issue.resolution}`
}}, { buttonList: { buttons: [{
text: "Open space",
onClick: { openLink: {
url: `https://mail.google.com/mail/u/0/#chat/space/${issue.spaceId}`
}}
}, {
text: "Open report",
onClick: { openLink: {
url: issue.reportUrl !== "" ? issue.reportUrl : "docs.new"
}},
disabled: issue.reportUrl === ""
}]}
}]
});
}
}
return { action: { navigations: [{ push_card: {
sections: sections
}}]}};
}
Cập nhật 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:
Trong môi trường cục bộ của bạn, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong dòng lệnh thành
issue-management/2-app-home
. Lớp này chứa mã nguồn mà bạn cần sử dụng. - Sao chép tệp
issue-management/1-baseline/.clasp.json
vào thư mục hiện tại. - Sao chép tệp
issue-management/1-baseline/Configuration.js
vào thư mục hiện tại để tệp này thay thế tệp hiện tại. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp bằng lệnh dấu gạch chéo
/create
đến ứng dụng. Ứng dụng sẽ mở một hộp thoại. - Đặt Title (Tiêu đề) thành
Issue Title 2
. - Đặt phần Mô tả cho ấn bản
Description 2
. - Nhấp vào Tạo.
- Chọn thẻ Trang chủ trong không gian của bạn có ứng dụng Google Chat. Bạn có thể xem thông tin chi tiết về các vấn đề mà mình đã tạo.
5. Không bắt buộc: Ứng dụng 1: Thêm tính năng giám sát không gian
Ôn lại các khái niệm
Pub/Sub
Pub/Sub là một dịch vụ nhắn tin không đồng bộ và có thể mở rộng, có thể tách các dịch vụ tạo tin nhắn từ các dịch vụ xử lý những tin nhắn đó. Pub/Sub giúp bạn tạo ra hệ thống gồm các nhà sản xuất và người tiêu dùng sự kiện, được gọi là nhà xuất bản và người đăng ký. Nhà xuất bản giao tiếp không đồng bộ với người đăng ký bằng cách phát sóng sự kiện, thay vì bằng lệnh gọi quy trình từ xa đồng bộ (RPC).
Nhà xuất bản gửi sự kiện đến dịch vụ Pub/Sub mà không quan tâm đến cách thức hoặc thời điểm xử lý những sự kiện này. Sau đó, Pub/Sub phân phối sự kiện đến tất cả các dịch vụ tương tác với sự kiện đó. Trong các hệ thống giao tiếp thông qua RPC, nhà xuất bản phải đợi người đăng ký nhận được dữ liệu. Tuy nhiên, tính năng tích hợp không đồng bộ trong Pub/Sub giúp tăng tính linh hoạt và mạnh mẽ của hệ thống tổng thể.
Chủ đề: Một tài nguyên được đặt tên đại diện cho một nguồn cấp dữ liệu tin nhắn. Bạn phải tạo một chủ đề trước khi có thể xuất bản hoặc đăng ký chủ đề đó.
Đăng ký: Để nhận thông báo được đăng lên một chủ đề, bạn phải tạo gói đăng ký cho chủ đề đó. Khách hàng là người đăng ký sẽ nhận và xử lý thông báo đã đăng lên chủ đề. Một chủ đề có thể có nhiều kênh đăng ký, nhưng một gói đăng ký nhất định lại thuộc về một chủ đề duy nhất.
Sự kiện liên quan đến Google Workspace
Sự kiện trên Google Workspace cho biết những thay đổi đối với tài nguyên trên Google Workspace, chẳng hạn như thời điểm tạo, cập nhật hoặc xoá tài nguyên. Các ứng dụng có thể đăng ký tài nguyên của Google Workspace để nhận và xử lý các sự kiện có liên quan một cách không đồng bộ.
Sau đây là cách API Sự kiện của Google Workspace phân phối sự kiện đến một ứng dụng thông qua gói thuê bao:
- Ứng dụng đăng ký một tài nguyên trong ứng dụng của Google Workspace, chẳng hạn như một không gian.
- Tài nguyên mà ứng dụng đăng ký đã thay đổi.
- Ứng dụng Google Workspace phân phối sự kiện về một chủ đề trong Pub/Sub, đóng vai trò là điểm cuối thông báo cho gói thuê bao Google Workspace của ứng dụng. Sự kiện chứa dữ liệu về những nội dung đã thay đổi trong tài nguyên.
- Ứng dụng xử lý thông báo Pub/Sub chứa sự kiện và thực hiện hành động (nếu cần).
Quy trình xem xét
Tạo vấn đề (cập nhật)
Khắc phục sự cố liên quan đến không gian chuyên biệt (bản cập nhật)
Đóng vấn đề từ không gian chuyên biệt (cập nhật)
Xử lý gói thuê bao
Mã nguồn của bài đánh giá
Bạn cần chỉnh sửa dự án Apps Script.
appsscript.json
// Enables the Workspace Events service.
"enabledAdvancedServices": [
...
{
"userSymbol": "WorkspaceEvents",
"version": "v1",
"serviceId": "workspaceevents"
}
...
]
Configuration.js
// Adds two constants: the first one is the Pub/Sub topic ID and the second one
// is the Pub/Sub subscription ID to be used to retrieve Google Workspace events.
...
const GWS_PUBSUB_TOPIC_ID = `projects/${PROJECT_ID}/topics/workspace-events`;
const GWS_PUBSUB_SUBSCRIPTION_ID =
`projects/${PROJECT_ID}/subscriptions/workspace-events-sub`;
...
ChatApp.js
// Edits the function to delete the subscription at issue closure.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
deleteSubscription(issue.subscriptionId);
...
}
...
}
// Edits the function to create the subscription.
function createIssue(event) {
...
const subscriptionId = createSpaceSubscription(spaceUrl);
const createdIssue = saveCreatedIssue(..., subscriptionId);
...
}
// Edits the function to delete the subscription.
function onRemoveFromSpace(event) {
...
deleteSubscription(issue.subscriptionId);
...
}
Storage.js
// Edits the function to keep track of the subscription ID.
function saveCreatedIssue(..., spaceId, subscriptionId) {
...
appProperties.setProperty(spaceId, JSON.stringify({
...
subscriptionId: subscriptionId,
...
}));
...
}
WorkspaceEvent.js
/**
* Creates a new subscription to Google Workspace Events associated to a
* Google Chat space.
*
* The subscription scope includes message creation events and resources.
*
* @param {string} spaceId the space ID to create a subscription for
* @return the ID of the newly created subscription
*/
function createSpaceSubscription(spaceId) {
const operation = WorkspaceEvents.Subscriptions.create({
targetResource: `//chat.googleapis.com/${spaceId}`,
eventTypes: ["google.workspace.chat.message.v1.created"],
notificationEndpoint: { pubsubTopic: GWS_PUBSUB_TOPIC_ID },
payloadOptions: { includeResource: true },
});
return operation.response.name;
}
/**
* Processes events from subscription by using the Google Cloud PubSub API.
*
* It pulls and acknowledges each event.
*/
function processSubscription() {
const response = UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:pull`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({ maxMessages: 10 })
}
);
const messages = JSON.parse(response.getContentText()).receivedMessages;
for (var messageIndex in messages) {
const message = messages[messageIndex];
const ceType = message.message.attributes["ce-type"];
const dataStr = Utilities.newBlob(Utilities.base64Decode(message.message.data))
.getDataAsString();
if (ceType === "google.workspace.events.subscription.v1.expirationReminder") {
// Renews subscription.
renewSubscription(JSON.parse(dataStr).subscription.name);
} else if (ceType === "google.workspace.chat.message.v1.created") {
// Processes the message text when it's sent in a space.
const chatMessage = JSON.parse(dataStr).message;
if (chatMessage.sender.type !== "BOT") {
console.log("Message was processed.");
}
}
// Acknowledges successful processing to avoid getting it again next time.
ackSubscription(message.ackId);
}
}
/**
* Acknowledges a subscription event by using the Google Cloud PubSub API.
*
* @param {string} ackId the ID of the event acknowledgment to send
*/
function ackSubscription(ackId) {
UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:acknowledge`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({
ackIds: [ackId]
})
}
);
}
/**
* Renews a subscription to Google Workspace Events.
*
* The default time to live option is used.
*
* @param {string} subscriptionId the ID of the subscription to renew
*/
function renewSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.patch({ttl: '0s'}, subscriptionId);
}
/**
* Deletes a subscription to Google Workspace Events.
*
* @param {string} subscriptionId the ID of the subscription to delete
*/
function deleteSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.remove(subscriptionId);
}
Cập nhật dự án trên Google Cloud
Cho phép API
- Trong bảng điều khiển Google Cloud, hãy bật tính năng Sự kiện trên Google Workspace và PubSub.
- 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 cả hai đều được bật.
Bắt đầu gói thuê bao
Bạn cần tạo và đăng ký một chủ đề Xuất bản/Đăng ký để đăng tất cả các sự kiện trên Workspace.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến biểu tượng Trình đơn ⋮ > Pub/Sub > Chủ đề.
- Nhấp vào Tạo chủ đề.
- Đặt Mã chủ đề thành
workspace-events
. - Chọn hộp đánh dấu Add a default subscription (Thêm gói thuê bao mặc định).
- Nhấp vào Tạo.
Để cấp quyền truy cập xuất bản thông báo Pub/Sub cho chủ đề bạn mới tạo trên Google Chat, hãy làm theo các bước sau:
- Chọn chủ đề trong danh sách.
- Chọn thẻ Permissions (Quyền).
- Thêm
chat-api-push@system.gserviceaccount.com
vào phần New principals (Đối tượng chính mới). - Chọn Nhà xuất bản Pub/Sub cho Vai trò.
- Nhấp vào Lưu.
Cập nhật dự án Apps Script
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến biểu tượng Trình đơn CLAIM > IAM và Quản trị viên > Cài đặt.
- Sao chép mã dự án.
Trong môi trường cục bộ của bạn, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong dòng lệnh thành
issue-management/3-message-monitoring
. Lớp này chứa mã nguồn mà bạn cần. - Đặt hằng số chuỗi có tên
PROJECT_ID
trong tệpConfiguration.js
thành mã dự án đã sao chép. - Đặt hằng số JSON có tên
CHAT_CREDENTIALS
trong tệpConfiguration.js
thành nội dung tệp khoá riêng tư mà bạn đã tải xuống trước đó. - Sao chép tệp
issue-management/2-app-home/.clasp.json
vào thư mục hiện tại. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp bằng lệnh dấu gạch chéo
/create
đến ứng dụng. Ứng dụng sẽ mở một hộp thoại. - Đặt Title (Tiêu đề) thành
Issue Title 3
. - Đặt phần Mô tả cho ấn bản
Description 3
. - Nhấp vào Tạo.
- Trong không gian mới tạo, hãy gửi một vài tin nhắn thảo luận về vấn đề.
- Gửi tin nhắn bằng lệnh dấu gạch chéo
/close
và độ phân giải nhưFixed
.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến biểu tượng Trình đơn vậy > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này cho thấy các thông báo liên quan đến nội dung bạn đã gửi đến không gian mới tạo.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs
. - Chọn
processSubscription
trong mục Run (Chạy). - Nhấp vào biểu tượng
Run
.Bạn có thể thấy thông báo đã được xử lý trong nhật ký thực thi.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến biểu tượng Trình đơn vậy > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này không còn hiển thị những tin nhắn liên quan đến nội dung bạn đã gửi đến không gian mới tạo.
- Trong Google Chat, trong không gian dành riêng cho vấn đề thứ ba mà bạn đã tạo bằng lệnh dấu gạch chéo
/create
, hãy gửi thêm một vài tin nhắn thảo luận về vấn đề đó.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến biểu tượng Trình đơn vậy > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này không hiển thị những tin nhắn liên quan đến nội dung bạn đã gửi đến không gian mới tạo.
6. Không bắt buộc: Ứng dụng 1: Thêm dịch vụ trợ giúp hoà nhập
Ôn lại các khái niệm
Tính năng đặt câu hỏi dựa trên AI tạo sinh là nghệ thuật đưa ra hướng dẫn hoặc câu hỏi để định hướng một mô hình AI tạo sinh hướng đến loại đầu ra cụ thể mong muốn. Có một phương pháp phổ biến là đặt câu trả lời bằng cách thêm quy tắc và điều kiện vào câu lệnh. Điều này có thể giúp tạo dữ liệu đầu ra an toàn, phù hợp, nhất quán và đúng với kỳ vọng.
Quy trình xem xét
Xử lý gói thuê bao (cập nhật)
Mã nguồn của bài đánh giá
Bạn cần chỉnh sửa dự án Apps Script.
WorkspaceEvent.js
// Edits the function to replace logging by an actual card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
const inclusivityCheck = getInclusivityFeedback(chatMessage.text);
if (inclusivityCheck !== "It's inclusive!") {
createAppMessageUsingChatService({
cardsV2: [{ cardId: "1", card: { header: {
title: "Inclusivity",
subtitle: `The following words are not inclusive: ${inclusivityCheck}`
}}}]
},
chatMessage.space.name);
}
...
}
...
}
...
}
VertexAi.js
/**
* Gets feedback on inclusivity for a text with the Gemini Pro model using
* Vertex AI API.
*
* Returns "It's inclusive!" when it is otherwise a list of word(s) that might not
* be optimal.
*
* @param {string} text the text
* @return {string} the feedback
*/
function getInclusivityFeedback(text) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Are there any words that obviously go against inclusivity "
+ "in this text:"
+ `\n\n----------\n${text}\n----------\n\n`
+ "If there are not, answer \"It's inclusive!\" "
+ "otherwise answer by listing them separated by commas. "
+ "Do not answer with any explanation."
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
Cập nhật dự án Apps Script
Trong môi trường cục bộ của bạn, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong dòng lệnh thành
issue-management/4-inclusivity-help
. Lớp này chứa mã nguồn mà bạn cần. - Sao chép tệp
issue-management/3-message-monitoring/.clasp.json
vào thư mục hiện tại. - Sao chép tệp
issue-management/3-message-monitoring/Configuration.js
vào thư mục hiện tại để tệp này thay thế tệp hiện có. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp bằng lệnh dấu gạch chéo
/create
đến ứng dụng. Ứng dụng sẽ mở một hộp thoại. - Đặt Title (Tiêu đề) thành
Issue Title 4
. - Đặt phần Mô tả cho ấn bản
Description 4
. - Nhấp vào Tạo.
- Trong không gian mới tạo, hãy gửi
It happened to me last week as well
.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs
. - Chọn
processSubscription
trong mục Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy thông báo đã được xử lý trong nhật ký thực thi.
Trong Google Chat, hãy làm theo các bước sau:
- Lưu ý rằng ứng dụng này không gửi trợ giúp hoà nhập trong không gian mới tạo.
- Trong không gian mới tạo, hãy gửi tin nhắn
I had to add myself from the master to fix it
.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs
. - Chọn
processSubscription
trong mục Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy thông báo đã được xử lý trong nhật ký thực thi. Trong Google Chat, ứng dụng đã gửi tin nhắn trợ giúp về sự hoà nhập trong không gian mới tạo.
7. Không bắt buộc: Ứng dụng 1: Thêm lựa chọn ưu tiên
.
Ôn lại các khái niệm
Tiện ích phụ kiện là một tiện ích không có đường viền được đính kèm ở cuối tin nhắn do ứng dụng gửi. Tiện ích này thường dùng để giúp người dùng bày tỏ cảm xúc nhanh chóng trong một ngữ cảnh cụ thể của tin nhắn. Về mặt kỹ thuật, nút điều khiển dựa trên các nguyên tắc cốt lõi giống như nút thẻ.
Quy trình xem xét
Tắt tính năng trợ giúp hoà nhập
Mã nguồn của bài đánh giá
Bạn cần chỉnh sửa dự án Apps Script.
ChatApp.js
// Edits the function to handle the inclusivity help disablement action for a
// given space.
function onCardClick(event) {
...
if (event.action.actionMethodName === "disableInclusivityHelp") {
disableInclusivityHelp(event.common.parameters.spaceId);
}
}
Storage.js
// Edits the function to keep track of the inclusivity help setting.
function saveCreatedIssue(title, description, spaceId, subscriptionId) {
appProperties.setProperty(spaceId, JSON.stringify({
...
inclusivityHelp: true,
...
}));
...
}
/**
* Disables inclusivity help in a space.
*
* @param {string} spaceId the ID of dedicated space of the issue
*/
function disableInclusivityHelp(spaceId) {
var issue = JSON.parse(appProperties.getProperty(spaceId));
issue.inclusivityHelp = false;
appProperties.setProperty(spaceId, JSON.stringify(issue));
}
/**
* Checks whether the app should help with inclusivity in a given space.
*
* @param {string} spaceId the ID of dedicated space of the issue
* @return whether the app should help with inclusivity
*/
function shouldHelpWithInclusivity(spaceId) {
return JSON.parse(appProperties.getProperty(spaceId)).inclusivityHelp;
}
WorkspaceEvent.js
// Edits the function to display the accessory widget to the existing card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
if (... && shouldHelpWithInclusivity(chatMessage.space.name)) {
createAppMessageUsingChatService({
...
accessoryWidgets: [{ buttonList: { buttons: [{
altText: "Disable inclusivity help",
icon: {
iconUrl: "https://upload.wikimedia.org/.../Stop_hand_rugen.png"
},
onClick: { action: {
function: "disableInclusivityHelp",
parameters: [{
key: "spaceId",
value: chatMessage.space.name
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
Cập nhật dự án Apps Script
Trong môi trường cục bộ của bạn, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong dòng lệnh thành
issue-management/5-disable-help
. Lớp này chứa mã nguồn mà bạn cần. - Sao chép tệp
issue-management/4-inclusivity-help/.clasp.json
vào thư mục hiện tại. - Sao chép tệp
issue-management/4-inclusivity-help/Configuration.js
vào thư mục hiện tại để tệp này thay thế tệp hiện có. - Chạy lệnh sau:
clasp push
Thử nào
Tắt trợ giúp
- Trong Google Chat, trong không gian dành cho vấn đề thứ tư mà bạn đã tạo bằng lệnh dấu gạch chéo
/create
, hãy gửi tin nhắnI had to add myself from the master to fix
.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs
. - Chọn
processSubscription
trong mục Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy thông báo đã được xử lý trong nhật ký thực thi.
Trong Google Chat, hãy làm theo các bước sau:
- Lưu ý rằng ứng dụng đã gửi tin nhắn hỗ trợ sự hoà nhập thông qua một tiện ích phụ kiện trong không gian dành riêng cho vấn đề này.
- Nhấp vào tiện ích phụ kiện để tắt tính năng trợ giúp hoà nhập.
Kiểm tra trạng thái vô hiệu hoá
- Trong Google Chat, trong không gian dành cho vấn đề thứ tư mà bạn đã tạo bằng lệnh dấu gạch chéo
/create
, hãy gửi tin nhắnI had to add myself from the master to fix
.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs
. - Chọn
processSubscription
trong mục Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy thông báo đã được xử lý trong nhật ký thực thi. Trong Google Chat, ứng dụng này đã không gửi tin nhắn có thông tin trợ giúp về sự hoà nhập tới không gian chuyên về vấn đề này vì ứng dụng đã bị vô hiệu hoá.
8. Ứng dụng 2: Xây dựng
Ôn lại các khái niệm
Tiếp đất dựa trên AI tạo sinh
Mục đích của vấn đề này là giúp các mô hình AI trở nên thực tế và đáng tin cậy hơn bằng cách kết nối chúng với các nguồn kiến thức có thể xác minh. Kỹ thuật này giúp ngăn AI phát minh ra thông tin và có thể giúp các câu trả lời phù hợp với bối cảnh và bớt thiên vị.
Ngôn ngữ tự nhiên
Bất kỳ ngôn ngữ nào mà con người nói hoặc viết cho giao tiếp hằng ngày, trái ngược với ngôn ngữ nhân tạo hoặc ngôn ngữ sử dụng máy tính.
Bộ nhớ trên đám mây
Cloud Storage cho phép lưu trữ và truy xuất mọi lượng dữ liệu trên toàn thế giới vào bất kỳ lúc nào. Ứng dụng có thể được sử dụng cho nhiều trường hợp, chẳng hạn như phân phối nội dung trang web, lưu trữ dữ liệu để lưu trữ và phục hồi sau thảm hoạ hoặc phân phối các đối tượng dữ liệu lớn cho người dùng thông qua tính năng tải xuống trực tiếp.
Kho lưu trữ dữ liệu Dialogflow CX
Dialogflow CX tích hợp với kho dữ liệu – những tập hợp trang web và tài liệu mà các nhân viên lưu trữ dữ liệu sử dụng để tìm câu trả lời cho các thắc mắc của người dùng cuối dựa trên những dữ liệu cụ thể. Đối với câu hỏi nhất định, tác nhân lưu trữ dữ liệu sẽ tìm kiếm câu trả lời từ nội dung nguồn đã cho và tóm tắt kết quả tìm được thành một câu trả lời nhất quán. Chủ đề này cũng cung cấp các đường liên kết hỗ trợ đến các nguồn của câu trả lời để người dùng cuối tìm hiểu thêm.
Xem xét cấu trúc
Ứng dụng Google Chat này do Dialogflow CX xây dựng và hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, qua tin nhắn trực tiếp hoặc trong không gian.
- Đây là một nhân viên hỗ trợ dự án Dialogflow CX và được liên kết với một dự án Google Cloud, sẽ xử lý tin nhắn.
- Ứng dụng tích hợp với một kho dữ liệu trong Cloud Storage.
- Ứng dụng gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Quy trình xem xét
Trả lời câu hỏi
Mã nguồn của bài đánh giá
Nguồn duy nhất bạn cần không phải là mã, mà là dữ liệu bạn dùng để nối đất.
google-chat-overview.pdf
Chứa thông tin không có cấu trúc của các ứng dụng trong Google Chat (một phiên bản in của một trang trên trang web dành cho nhà phát triển Google Workspace).
Cập nhật 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:
- Bật API Dialogflow và Cloud Storage.
- Bật Vertex AI Agent Builder API.
- 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 tất cả API đều được bật.
.
Tạo tác nhân lưu trữ dữ liệu Dialogflow CX
Bắt đầu khai thác dữ liệu tri thức
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Cloud Storage > Bộ chứa.
- Nhấp vào Tạo.
- Đặt name (tên) thành
gchat-knowledge
. - Nhấp vào Tạo.
- Chọn bộ chứa gchat- Insights.
- Nhấp vào Tải tệp lên.
- Chọn tệp
knowledge-app/grounding/google-chat-overview.pdf
từ môi trường cục bộ của bạn.
Tạo ứng dụng
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Trình tạo nhân viên hỗ trợ > Ứng dụng.
- Nhấp vào Ứng dụng mới.
- Chọn loại Trò chuyện.
- Đặt
Company name
thành tên công ty của bạn. - Đặt
Agent name
thànhknowledge
. - Nhấp vào Tiếp tục.
- Nhấp vào Tạo kho dữ liệu mới.
- Chọn Cloud Storage làm nguồn dữ liệu.
- Chọn Tệp.
- Nhấp vào Duyệt xem.
- Chọn tệp
google-chat-overview.pdf
. - Nhấp vào Tiếp tục.
- Đặt tên kho dữ liệu thành
gchat-knowledge-ds
. - Nhấp vào Tạo.
- Chọn kho dữ liệu gchat-knowledge-ds trong bảng.
- Nhấp vào Tạo.
- Sau vài phút, hãy nhấp vào biểu tượng Trình đơn ⋮ > Trình tạo tác nhân > Ứng dụng và bạn sẽ thấy ứng dụng.
- Nhấp vào Trình đơn ⋮ > Trình tạo tác nhân > Kho dữ liệu.
- Nhấp vào kho lưu trữ dữ liệu gchat-knowledge-ds. Số lượng tài liệu là
1
, cho biết tài liệu đã sẵn sàng.
Ứng dụng hoàn chỉnh và thử nghiệm
Trong bảng điều khiểnDialogflow CX, hãy làm theo các bước sau:
- Chọn dự án của bạn trên Google Cloud.
- Chọn tác nhân kiến thức.
- Chọn Cài đặt tác nhân > AI tạo sinh > Tác nhân tạo sinh.
- Chuyển mô hình từ Text Bison sang Gemini Pro.
- Nhấp vào Lưu.
- Nhấp vào Kiểm thử tác nhân.
- Gửi
What is Google Chat?
. Nhân viên hỗ trợ sẽ phản hồi bằng nội dung có ý nghĩa.
Tích hợp ứng dụng Google Chat
Trong bảng điều khiểnDialogflow CX, hãy làm theo các bước sau:
- Chọn dự án của bạn trên Google Cloud.
- Trong hàng của tác nhân kiến thức, hãy nhấp vào biểu tượng > Sao chép tên.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến phần cấu hình API Google Chat.
- Trong phần Cài đặt kết nối, hãy chọn Dialogflow.
- Trong phần Settings (Cài đặt hộp thoại), hãy chọn Dialogflow CX.
- Đặt Tên tác nhân hoặc Môi trường thành tên nhân viên hỗ trợ mà bạn đã sao chép.
- Xoá hai lệnh dấu gạch chéo.
- Trong Google Chat, hãy gửi tin nhắn trực tiếp cho
What is Google Chat?
đến ứng dụng Google Chat. Nhân viên hỗ trợ sẽ trả lời bằng nội dung có ý nghĩa.
9. Không bắt buộc: Ứng dụng 2: Thêm nguồn
Ôn lại các khái niệm
Webhook CX củaDialogflow
Dịch vụ lưu trữ logic nghiệp vụ hoặc gọi các dịch vụ khác. Trong một phiên Dialogflow CX, webhook có thể dựa vào dữ liệu được trích xuất bằng phương pháp xử lý ngôn ngữ tự nhiên để tạo phản hồi động, xác thực dữ liệu đã thu thập hoặc kích hoạt hành động trên phần phụ trợ.
Chức năng đám mây
Chức năng đám mây rất phù hợp để xây dựng phần phụ trợ không máy chủ, xử lý dữ liệu theo thời gian thực và tạo ứng dụng thông minh. Không có máy chủ để cấp phép, quản lý, vá hoặc cập nhật. Các đường liên kết này tự động mở rộng quy mô, khả năng hoạt động cao và kháng lỗi.
Quy trình xem xét
Trả lời câu hỏi (cập nhật)
Mã nguồn của bài đánh giá
Mã nguồn duy nhất mà bạn cần là chức năng điều chỉnh câu trả lời của nhân viên hỗ trợ theo tin nhắn trong Google Chat. Thẻ này được dùng làm webhook.
package.json
// The function relies on the Cloud Functions framework to run.
{
"name": "agent-response-adapter",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It takes a Dialogflow CX agent response as input and returns a
* valid Google Chat card message with both the text and source links
*/
functions.http('agent-response-adapter', (request, response) => {
// Creates Google Chat buttons based on the data store agent response
// grounding details.
var linkTitles = [];
var linkButtons = [];
const grounding = request.body.messages[1].payload.richContent[0][0];
if (grounding.type === "match_citations") {
// Supports citation match type.
grounding.citations.forEach((citation) => {
// Avoid duplications.
if (linkTitles.indexOf(citation.title) < 0) {
linkButtons.push({
text: citation.title,
onClick: { openLink: {
url: citation.actionLink
}}
});
linkTitles.push(citation.title);
}
});
} else if (grounding.type === "info") {
// Supports info type.
if (linkTitles.indexOf(grounding.title) < 0) {
linkButtons.push({
text: grounding.title,
onClick: { openLink: {
url: grounding.actionLink
}}
});
linkTitles.push(grounding.title);
}
}
// Sends the Dialogflow CX fulfillment response to replace the agent response
// with the Chat message with text and source buttons.
response.send({ fulfillment_response: {
merge_behavior: "REPLACE",
messages: [{ payload: {
// Reuses the original data store agent response text.
text: request.body.messages[0].text.text[0],
cardsV2: [{
cardId: "sourcesCard",
card: { sections: [{
header: "Sources",
widgets: [{ buttonList: {
buttons: linkButtons
}}]
}]}
}]
}}]
}});
});
Cập nhật 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:
- Bật Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry và Cloud Run API.
- Nhấp vào biểu tượng Trình đơn ⋮ > API và dịch vụ > API và dịch vụ đã bật, sau đó xác nhận rằng các API đó đã được bật.
Cập nhật tác nhân cửa hàng dữ liệu Dialogflow CX
Bạn cần triển khai Chức năng đám mây và cập nhật webhook Dialogflow CX để kích hoạt webhook bằng nhiều nguồn khi có thể.
Trả về nhiều nguồn
Theo mặc định, một tác nhân lưu trữ dữ liệu mới chỉ trả về tối đa một nguồn, nhưng bạn có thể thay đổi để có nhiều nguồn hơn.
Trong bảng điều khiểnDialogflow CX, hãy làm theo các bước sau:
- Chọn dự án của bạn trên Google Cloud.
- Chọn tác nhân kiến thức.
- Chọn Trang chủ.
- Chọn Chỉnh sửa kho dữ liệu.
- Trong mục Phản hồi của nhân viên hỗ trợ, hãy đặt Các tuỳ chọn phản hồi của kho dữ liệu thành
5
. - Nhấp vào Lưu.
Bắt đầu chức năng đám mây
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn DMARC > Cloud Functions.
- Nhấp vào Create function (Tạo hàm).
- Trong phần Basics (Cơ bản), hãy đặt name thành
function-1
. - Trong mục Xác thực, hãy chọn Nút chọn cho phép các lệnh gọi chưa được xác thực.
- Trong phần Các chế độ cài đặt thời gian chạy, bản dựng, kết nối và bảo mật, hãy đặt Số lượng thực thể tối đa thành
3
. - Nhấp vào Tiếp theo.
- Đặt Entry Points (Điểm truy cập) thành
agent-response-adapter
. - Thay thế nội dung mặc định bằng các tệp nằm trong thư mục
knowledge-app/agent-response-adapter
. - Nhấp vào Deploy (Triển khai).
- Sao chép URL trong khi đợi vài phút để hàm này triển khai.
Khởi động webhook
Bạn cần thiết lập nhân viên hỗ trợ Dialogflow CX để sử dụng một webhook kích hoạt chức năng mới triển khai.
Trong bảng điều khiểnDialogflow CX, hãy làm theo các bước sau:
- Chọn dự án của bạn trên Google Cloud.
- Chọn tác nhân kiến thức.
- Chọn Quản lý > Webhook > Tạo.
- Đặt Tên hiển thị thành
Google Chat Response Adapter
. - Đặt URL webhook thành URL mà bạn đã sao chép trước đó.
- Nhấp vào Lưu.
- Nhấp vào Build (Bản dựng).
- Chọn Trang chủ.
- Chọn Chỉnh sửa kho dữ liệu.
- Trong phần Cài đặt webhook, hãy nhấp vào nút bật/tắt Bật webhook.
- Chọn Bộ chuyển đổi phản hồi của Google Chat dành cho Webhook.
- Đặt tag thành
arbitrary_tag
. - Nhấp vào Lưu.
Ứng dụng kiểm thử
- Trong Google Chat, hãy gửi tin nhắn trực tiếp cho
What is Google Chat?
qua ứng dụng Google Chat. Nhân viên hỗ trợ sẽ trả lời bằng nội dung có ý nghĩa và một thẻ có ghi nguồn (nếu có).
10. Ứng dụng 3: Xây dựng
Ôn lại các khái niệm
Hoạt động tương tác trò chuyện
Đó là sự trao đổi thông tin hoặc ý tưởng qua lại giữa hai hoặc nhiều người thông qua ngôn ngữ tự nhiên. Điều này trái ngược với những giao diện kỹ thuật thường dựa vào cơ chế trao đổi không có trạng thái, có cấu trúc chặt chẽ và không khoan dung.
Thông số kỹ thuật OpenAPI
Lớp này cung cấp một phương thức nhất quán để truyền thông tin qua từng giai đoạn trong vòng đời API. Đây là ngôn ngữ thông số kỹ thuật cho các API HTTP, giúp xác định cấu trúc và cú pháp theo cách không liên quan đến ngôn ngữ lập trình mà API được tạo. Thông số kỹ thuật của API thường được viết bằng YAML hoặc JSON, cho phép dễ dàng chia sẻ và sử dụng thông số kỹ thuật.
Tác nhân Dialogflow CX
Thành phần cơ bản của ứng dụng tác nhân. Một ứng dụng tác nhân thường có nhiều tác nhân, trong đó mỗi tác nhân được xác định để xử lý các tác vụ cụ thể. Dữ liệu nhân viên hỗ trợ được cung cấp cho LLM, vì vậy, mô hình này có thông tin cần thiết để trả lời câu hỏi và thực thi các nhiệm vụ. Mỗi nhân viên hỗ trợ có thể cung cấp thông tin, gửi câu hỏi cho các dịch vụ bên ngoài hoặc trì hoãn việc xử lý cuộc trò chuyện cho một quy trình Dialogflow CX hoặc một nhân viên hỗ trợ khác để xử lý các công việc phụ.
Công cụ Dialogflow CX
Công cụ dùng để kết nối ứng dụng tác nhân với hệ thống bên ngoài. Các hệ thống này có thể nâng cao kiến thức về các ứng dụng tác nhân và cho phép chúng thực thi các tác vụ phức tạp một cách hiệu quả.
Xem xét cấu trúc
Ứng dụng Google Chat này do Dialogflow CX xây dựng và hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, qua tin nhắn trực tiếp hoặc trong không gian.
- Đây là một nhân viên hỗ trợ dự án Dialogflow CX và được liên kết với một dự án Google Cloud, sẽ xử lý tin nhắn.
- Ứng dụng tích hợp với một nhân viên hỗ trợ.
- Ứng dụng gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Quy trình xem xét
Thu thập bài đánh giá
Mã nguồn của bài đánh giá
Mã nguồn duy nhất bạn cần là hàm mô phỏng dịch vụ phụ trợ mà tác nhân sử dụng làm công cụ.
package.json
// The function relies on the Cloud Functions framework to run.
{
"name": "feedback-app-backend",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It always returns OK in plain text.
*/
functions.http('feedback-app-backend', (request, response) => {
response.send('OK');
});
service-openapi.yaml
// Defines the backend service structure and how to request it.
openapi: 3.1.0
info:
title: Review Store
license:
name: Apache 2.0
identifier: Apache-2.0
version: 0.0.1
servers:
- url: https://us-central1-project-0.cloudfunctions.net
paths:
/store-review:
post:
operationId: storeReview
summary: Store a new review
requestBody:
content:
application/json:
schema:
type: object
properties:
stars:
type: integer
format: int64
responses:
'200':
description: success
content:
application/json:
schema:
type: string
Bắt đầu bản mô phỏng dịch vụ phụ trợ
Bạn triển khai Chức năng đám mây để mô phỏng một dịch vụ phụ trợ mà ứng dụng tác nhân Dialogflow CX cần để tích hợp và gọi dưới dạng công cụ.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn DMARC > Cloud Functions.
- Nhấp vào Create function (Tạo hàm).
- Trong phần Basics (Cơ bản), hãy đặt name thành
function-2
. - Trong mục Xác thực, hãy chọn nút chọn Cho phép lệnh gọi chưa được xác thực.
- Trong phần Các chế độ cài đặt thời gian chạy, bản dựng, kết nối và bảo mật, hãy đặt Số lượng thực thể tối đa thành
3
. - Nhấp vào Tiếp theo.
- Đặt Entry Points (Điểm truy cập) thành
feedback-app-backend
. - Thay thế nội dung mặc định bằng các tệp nằm trong thư mục
feedback-app
. - Nhấp vào Deploy (Triển khai).
- Sao chép URL trong khi đợi vài phút để hàm này triển khai.
Tạo ứng dụng cho nhân viên hỗ trợ Dialogflow CX
Tạo ứng dụng
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Trình tạo nhân viên hỗ trợ > Ứng dụng.
- Nhấp vào Ứng dụng mới.
- Chọn Nhân viên hỗ trợ.
- Đặt Tên hiển thị thành
Feedback App
. - Nhấp vào Tạo.
Bắt đầu sử dụng công cụ
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Trình tạo nhân viên hỗ trợ > Ứng dụng.
- Chọn tác nhân Ứng dụng phản hồi.
- Nhấp vào Công cụ > + Tạo.
- Đặt Name (Tên) thành
review
. - Chọn OpenAPI.
- Đặt description thành giá trị sau:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Thay thế
$URL
trong tệpfeedback-app/service-openapi.yaml
bằng URL mà bạn đã sao chép trước đó. - Đặt
YAML Schema
thành nội dung đã chỉnh sửa của tệpfeedback-app/service-openapi.yaml
. - Nhấp vào Lưu.
Bắt đầu nhân viên hỗ trợ
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Trình tạo nhân viên hỗ trợ > Ứng dụng.
- Chọn tác nhân Ứng dụng phản hồi.
- Chọn Agents > Default Generative Agent (Tác nhân > Tác nhân tạo sinh mặc định).
- Đặt Tên nhân viên hỗ trợ thành
Feedback collector
. - Đặt
goal
thành giá trị sau:
You are an agent that collects reviews from Google Chat app developers. A review may be between 0 and 5 stars. The more stars, the more positive the review.
- Đặt instructions thành giá trị sau:
If the developer didn't provide the number of stars, ask for the number of stars. After the developer provides the number of stars of the review, confirm the number with the developer and use ${TOOL: review} to store the review with the number of stars. If ${TOOL: review} fails, apologize and ask to try again later. Otherwise, thank the developer for the review.
- Nhấp vào Lưu.
Ứng dụng thử nghiệm
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ⋮ > Trình tạo nhân viên hỗ trợ > Ứng dụng.
- Chọn tác nhân Ứng dụng phản hồi.
- Chuyển đến phần Preview agent (Xem trước tác nhân).
- Trong phần Tác nhân, chọn Trình thu thập phản hồi.
- Trong phần Chọn mô hình tạo sinh, hãy chọn gemini-pro.
- Gửi tin nhắn
Hello!
để bắt đầu.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn DMARC > Cloud Functions.
- Chọn hàm-2 > Nhật ký. Một số nhật ký cho thấy Google-Dialogflow là phương thức gọi.
Tích hợp ứng dụng Google Chat
Trong bảng điều khiểnDialogflow CX, hãy làm theo các bước sau:
- Chọn dự án của bạn trên Google Cloud.
- Nhấp vào trình đơn thao tác của tác nhân
Feedback App
. - Nhấp vào Sao chép tên.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến phần cấu hình API Google Chat.
- Đặt Tên tác nhân hoặc Tài nguyên môi trường thành tên nhân viên hỗ trợ mà bạn đã sao chép trước đó.
- Trong Google Chat, hãy gửi tin nhắn trực tiếp cho
Hello!
đến ứng dụng Google Chat để bắt đầu. Nhân viên hỗ trợ trả lời tương tự như kết quả kiểm tra của bạn trong bảng điều khiển Dialogflow CX.
11. Dọn dẹp
Xoá dự án trên Google Cloud
Để tránh làm phát sinh phí đối với 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 Google Cloud trên Google Cloud.
Trong bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào biểu tượng Trình đơn ⋮ > IAM và Quản trị viên > Cài đặt.
- Nhấp vào Tắt.
- Nhập mã dự án.
- Nhấp vào Vẫn tắt.
Xoá dự án Apps Script
Bạn cũng nên xoá dự án Apps Script của mình.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Nhấp vào trình đơn thao tác.
- Nhấp vào Xoá.
12. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo ứng dụng Google Chat bằng Gemini!
Tiếp theo là gì?
Chúng tôi chỉ trình bày các trường hợp sử dụng đơn giản trong lớp học lập trình này, nhưng có nhiều lĩnh vực mở rộng mà bạn có thể cân nhắc trong ứng dụng Google Chat, chẳng hạn như:
- Tích hợp với các mô hình AI tạo sinh khác, bao gồm cả mô hình hải quan.
- Hỗ trợ các loại nội dung nghe nhìn khác, chẳng hạn như âm thanh, hình ảnh và video.
- Sử dụng đa phương thức.
- Sử dụng cửa sổ ngữ cảnh dài hơn và vòng hồi tiếp.
- Phát hành các ứng dụng Google Chat đã sẵn sàng phát hành lên thị trường. Có rất nhiều tài nguyên dành cho nhà phát triển như video trên YouTube, trang web tài liệu, mã mẫu và hướng dẫn.
- Bật Google Chat cho tổ chức của bạn. Tính năng chế độ nhập giúp bạn bắt đầu dễ dàng hơn.
Tìm hiểu thêm
- Trang web tài liệu dành cho nhà phát triển về Google Chat
- Tích hợp Google Chat và Dialogflow CX
- Kho lưu trữ GitHub cho tất cả các mẫu Google Chat
- Chế độ nhập trong Google Chat
- Trang web tài liệu dành cho nhà phát triển về Apps Script
- Kênh YouTube dành cho nhà phát triển của Google Workspace
- Trung tâm dành cho nhà phát triển của Google Cloud
- AI tạo sinh trên Vertex AI
- Mô hình AI tạo sinh
- Mô hình tuỳ chỉnh dựa trên AI tạo sinh
- Đa phương thức AI tạo sinh
- Thời lượng theo bối cảnh dài của AI tạo sinh
- Vòng hồi tiếp AI tạo sinh