สร้างแอปสำหรับ Google Chat ด้วย Gemini

1. ก่อนเริ่มต้น

แอป Google Chat พร้อม Gemini คืออะไร

แอป Google Chat ที่มี Gemini จะทำสิ่งต่อไปนี้

  • นำบริการและแหล่งข้อมูลของคุณมาไว้ใน Google Chat ซึ่งจะช่วยให้ผู้ใช้ได้รับข้อมูลและดำเนินการได้โดยไม่ต้องออกจากการสนทนา
  • ผสานรวมกับโมเดล Generative AI อย่าง Gemini เพื่อให้สามารถสร้างหรือค้นหาข้อมูล เช่น ข้อความหรือรูปภาพ ในเวลาที่เฉพาะเจาะจงเพื่อปรับปรุงขั้นตอนการทำงาน

เหตุผลที่ควรผสานรวมแอป Google Chat กับ Gemini

กรณีการใช้งานทั่วไปของโมเดล Generative AI เช่น Gemini จะอยู่ในหมวดหมู่ต่อไปนี้

  • การสร้างและการปรับปรุงเนื้อหา สร้างข้อความทางการตลาด ร่างโพสต์โซเชียลมีเดีย สร้างรูปภาพที่สมจริง แต่งเพลง หรือช่วยในการสร้างเนื้อหาวิดีโอ
  • การค้นหาข้อมูล ดึงข้อมูลเชิงลึกที่สำคัญจากฐานความรู้แบบไม่มีโครงสร้าง สรุปข้อความยาวๆ จัดประเภทเนื้อหา หรือแปลภาษาด้วยความแม่นยำและความเร็วที่เพิ่มขึ้น
  • การสนทนา พูดคุยอย่างเป็นธรรมชาติ ให้ข้อมูล และสร้างสรรค์

ความสามารถในการผสานรวมความสามารถเหล่านี้โดยตรงภายในอินเทอร์เฟซที่คุ้นเคยของ Google Chat เป็นโอกาสอันยิ่งใหญ่สำหรับทุกคนที่ต้องการปรับปรุงประสบการณ์และประสิทธิภาพการทำงานของผู้ใช้

ข้อกำหนดเบื้องต้น

สิ่งที่คุณสร้าง

ในโค้ดแล็บนี้ คุณจะได้สร้างแอป Google Chat 3 แอปด้วย Gemini เพื่อครอบคลุมกรณีการใช้งาน 3 กรณีที่แนะนำในส่วนก่อนหน้า

แอปการจัดการปัญหา (การสร้างและการปรับปรุงเนื้อหา)

แอปนี้จะทำสิ่งต่อไปนี้

  • จัดการปัญหาตั้งแต่การสร้างจนถึงการปิดด้วยการโต้ตอบพื้นฐาน หน้าแรกของแอป และการตรวจสอบสิทธิ์แอป
  • ตรวจสอบข้อความและให้ความช่วยเหลือด้านการไม่แบ่งแยกกับวิดเจ็ตกิจกรรมและวิดเจ็ตอุปกรณ์เสริม

คุณใช้ Gemini เพื่อทำสิ่งต่อไปนี้ได้

  • สร้างรายงานปัญหาโดยอิงตามประวัติข้อความและรายละเอียดปัญหา
  • จัดประเภทคำที่ไม่ครอบคลุมในข้อความด้วยพรอมต์ที่มีการควบคุม

เทคโนโลยีหลักที่ใช้คือ Vertex AI, Gemini, Apps Script และ Google Workspace API (ผู้ดูแลระบบ, Chat, เอกสาร, กิจกรรม)

22efdecff4601417.png

2d127c63518673b2.png

9aea694937f2f3ed.png

แอปนี้ใช้ Gemini เพื่อทำความเข้าใจและตอบคำถามในภาษาง่ายๆ รวมถึงแสดงการอ้างอิงแหล่งที่มาจากข้อมูลที่ไม่มีโครงสร้าง

เทคโนโลยีหลักที่ใช้คือเอเจนต์คลังข้อมูล Dialogflow CX, เว็บฮุก Dialogflow CX, Google Cloud Functions และ Gemini

9468866bfe848bb8.png

แอปความคิดเห็น (การสนทนา)

แอปนี้ใช้ Gemini เพื่อรวบรวมและจัดเก็บรีวิวพร้อมการสนทนาในภาษาที่เป็นธรรมชาติ

เทคโนโลยีหลักที่ใช้คือ Agent ของ Dialogflow CX, เครื่องมือ Dialogflow CX, OpenAPI, Google Cloud Functions และ Gemini

99a7a0295f122f31.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีผสานรวมแอป Google Chat กับ Gemini ผ่าน Vertex AI
  • วิธีผสานรวมแอป Google Chat กับเอเจนต์ Dialogflow CX
  • วิธีใช้ฟีเจอร์ล่าสุดของ Google Chat ได้แก่ หน้าแรกของแอป กิจกรรมใน Google Chat และวิดเจ็ตอุปกรณ์เสริม

สิ่งที่คุณต้องมี

2. ตั้งค่า

เริ่มต้นทรัพยากร

ในส่วนนี้ คุณจะเข้าถึงและกำหนดค่าทรัพยากรต่อไปนี้จากเว็บเบราว์เซอร์ที่ต้องการ

โปรเจ็กต์ Apps Script

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกการตั้งค่า แล้วเปิดใช้ Google Apps Script API

ea06c593b347b9d1.png

  1. เลือกโปรเจ็กต์
  2. คลิกการตั้งค่าโปรเจ็กต์
  3. เลือกช่องทำเครื่องหมายแสดงไฟล์ Manifest "appsscript.json" ในเครื่องมือแก้ไข
  4. เปลี่ยนชื่อโปรเจ็กต์เป็น Chat Apps Gemini

12c1485bd248b766.png

โปรเจ็กต์ Google Cloud

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. คลิกเมนู ☰ > API และบริการ > หน้าจอขอความยินยอม OAuth > แก้ไขแอป แล้วตั้งชื่อแอปเป็น Chat Apps Gemini

  1. ไปที่การกำหนดค่า Google Chat API แล้วตั้งค่าชื่อแอปและคำอธิบายเป็น Chat Apps Gemini

a71f040755da3b8b.png

Google Chat

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. หากจำเป็น ให้เริ่มแชทด้วยแอป Google Chat
  2. ส่งข้อความ เช่น Hello เพื่อให้แน่ใจว่าใช้งานได้

9625418251528ae9.png

ดาวน์โหลดซอร์สโค้ดและทรัพยากรในเครื่อง

  1. ดาวน์โหลดที่เก็บ GitHub นี้

  1. ในสภาพแวดล้อมการพัฒนาที่คุณต้องการ ให้เปิดไดเรกทอรี apps-script แล้วไปที่ไดเรกทอรีเดียวกันในเทอร์มินัล

da9478df97c99194.png

ติดตั้งและกำหนดค่า clasp

เราใช้ clasp เพื่อแก้ไขและพุชเวอร์ชันของซอร์สโค้ดจากสภาพแวดล้อมในเครื่องไปยังโปรเจ็กต์ Apps Script ได้อย่างง่ายดาย

  1. ในสภาพแวดล้อมในเครื่อง ให้ติดตั้ง node, npm และ clasp เวอร์ชันล่าสุด
npm install -g @google/clasp
  1. เข้าสู่ระบบด้วยบัญชีของคุณโดยทำดังนี้
clasp login

8bc2434e6dc6f22a.png

หากสำเร็จ คุณจะเห็นหน้าจอยืนยันพื้นฐานในเว็บเบราว์เซอร์และระบบจะอัปเดตไฟล์ .clasprc.json ที่มีข้อมูลเข้าสู่ระบบของไคลเอ็นต์ คุณดูตำแหน่งได้ในเทอร์มินัล

e1d833eb4d5b3a8f.png

3. แอป 1: สร้าง

แนวคิดเกี่ยวกับรีวิว

Vertex AI

Vertex AI มีทุกสิ่งที่คุณต้องการในการสร้างและใช้ Generative AI ซึ่งรวมถึงโซลูชัน AI, เครื่องมือสร้างเอเจนต์, โมเดลพื้นฐานกว่า 130 รายการ และแพลตฟอร์ม AI แบบครบวงจร

c9e9c7a1945b22ac.png

Gemini

Gemini คือ LLM แบบมัลติโมดัลจาก Google ที่เข้าถึงได้ผ่าน Vertex AI โดยช่วยให้ผู้คนปลดล็อกศักยภาพของตนเองเพื่อเสริมจินตนาการ ขยายความอยากรู้อยากเห็น และเพิ่มประสิทธิภาพการทำงาน

บริการ Chat ขั้นสูง

บริการแชทขั้นสูงช่วยให้คุณใช้ Google Chat API ใน Apps Script ได้ ซึ่งจะช่วยให้สคริปต์ค้นหา สร้าง และแก้ไขพื้นที่ใน Chat เพิ่มหรือนำสมาชิกออกจากพื้นที่ทำงาน รวมถึงอ่านหรือโพสต์ข้อความที่มีข้อความ การ์ด ไฟล์แนบ และรีแอ็กชันได้

ตรวจสอบสถาปัตยกรรม

8c9c7b7328a69ea6.png

แอป Google Chat นี้สร้างขึ้นด้วย Apps Script ซึ่งจะทำงานดังนี้

  1. ผู้ใช้ส่งข้อความไปยังแอป ไม่ว่าจะในข้อความส่วนตัวหรือในพื้นที่ทำงาน
  2. แอปซึ่งติดตั้งใช้งานในโปรเจ็กต์ Apps Script และเชื่อมโยงกับโปรเจ็กต์ Google Cloud จะประมวลผลข้อความ
  3. แอปนี้ผสานรวมกับ Google เอกสารและ Google Chat API
  4. แอปใช้บริการพร็อพเพอร์ตี้เพื่อจัดเก็บข้อมูลในพร็อพเพอร์ตี้ของสคริปต์
  5. แอปจะส่งการตอบกลับแบบซิงโครนัสในข้อความส่วนตัวหรือในพื้นที่ทำงานเดิม

ขั้นตอนการตรวจสอบ

สร้างปัญหา

7ca0e8ba3c8255bb.png

แก้ปัญหาจากพื้นที่เฉพาะ

51b47714c378a24b.png

ปิดปัญหาจากพื้นที่เฉพาะ

89e50228deeab0f9.png

ตรวจสอบซอร์สโค้ด

โปรเจ็กต์ Apps Script มีสคริปต์ต่อไปนี้

  • Configuration: ค่าคงที่ที่จะแก้ไขตามสภาพแวดล้อม
  • ChatApp: จัดการเหตุการณ์การโต้ตอบใน Google Chat ซึ่งรวมถึงข้อความ การคลิกการ์ด คำสั่ง Slash และกล่องโต้ตอบ
  • Storage: ฟังก์ชันยูทิลิตีที่อิงตามบริการพร็อพเพอร์ตี้
  • ChatAppAuth: ฟังก์ชันยูทิลิตีที่ต้องใช้การตรวจสอบสิทธิ์แอป Google Chat
  • Docs: ฟังก์ชันยูทิลิตีที่ใช้ Google เอกสาร
  • VertexAi: ฟังก์ชันยูทิลิตีที่ใช้ Vertex AI

และนี่คือส่วนที่ใช้ในการสร้างเอกสารรายงานด้วย Gemini และประวัติการแชทในพื้นที่แชท

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);
  ...
}

อัปเดตโปรเจ็กต์ Google Cloud

เปิดใช้ API

  1. ในคอนโซล Google Cloud ให้เปิดใช้ API ของ Google เอกสาร, Google Admin SDK และ Vertex AI โดยทำดังนี้

  1. คลิกเมนู ☰ > API และบริการ > API และบริการที่เปิดใช้ แล้วยืนยันว่าได้เปิดใช้ API แล้ว

เริ่มต้นใช้งานบัญชีบริการ

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > IAM และผู้ดูแลระบบ > บัญชีบริการ > + สร้างบัญชีบริการ

74cf57426419f39.png

  1. ตั้งชื่อบัญชีบริการเป็น chat-app
  2. ตั้งค่าคำอธิบายบัญชีบริการเป็น Chat app auth
  3. คลิกสร้างและต่อไป
  4. คลิกเสร็จสิ้น ระบบจะเปลี่ยนเส้นทางคุณไปยังหน้าบัญชีบริการ และคุณจะเห็นบัญชีบริการที่สร้างขึ้น

ca0468f1f93990f9.png

  1. เลือกบัญชีบริการที่สร้างขึ้นใหม่
  2. เลือกแท็บคีย์
  3. คลิกเพิ่มคีย์
  4. คลิกสร้างคีย์ใหม่
  5. เลือก JSON
  6. คลิกสร้าง

9f7e6ea020978ab0.png

กล่องโต้ตอบจะปิดลง และระบบจะดาวน์โหลดคู่คีย์สาธารณะ/ส่วนตัวที่สร้างขึ้นใหม่ลงในสภาพแวดล้อมในเครื่องโดยอัตโนมัติเป็นไฟล์ JSON คุณจะใช้เนื้อหาของไฟล์นี้ในภายหลังเมื่อแก้ไขซอร์สโค้ดของโปรเจ็กต์ Apps Script

อัปเดตการกำหนดค่า Google Chat API

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. เพิ่มคำสั่งเครื่องหมายทับ
  2. ตั้งค่าชื่อเป็น /create
  3. ตั้งค่ารหัสคำสั่งเป็น 1
  4. ตั้งค่าคำอธิบายเป็น Create a new issue
  5. เลือกช่องทําเครื่องหมายเปิดกล่องโต้ตอบ
  6. เพิ่มคำสั่งเครื่องหมายทับอีก
  7. ตั้งค่าชื่อเป็น /close
  8. ตั้งค่ารหัสคำสั่งเป็น 2
  9. ตั้งค่าคำอธิบายเป็น Close an issue
  10. คลิกบันทึก

bee2e7b63659ab33.png

อัปเดตโปรเจ็กต์ Apps Script

  • เปลี่ยนไดเรกทอรีปัจจุบันในเทอร์มินัลในเครื่องเป็น issue-management/1-baseline ซึ่งมีซอร์สโค้ด ก่อนที่จะพุชซอร์สโค้ดไปยังโปรเจ็กต์ Apps Script คุณต้องกำหนดค่าบางอย่าง

กำหนดค่าซอร์สโค้ด

  1. ตั้งค่าค่าคงที่ JSON ที่ชื่อ CHAT_CREDENTIALS ในไฟล์ Configuration.js เป็นเนื้อหาไฟล์คีย์ส่วนตัวที่คุณดาวน์โหลดไว้ก่อนหน้านี้

d721f6bff73c5304.png

  1. ใน Google Cloud Console ให้คลิกเมนู ☰ > IAM และผู้ดูแลระบบ > การตั้งค่า

  1. คัดลอกรหัสโปรเจ็กต์

82592fa0bd113469.png

  1. ตั้งค่าค่าคงที่สตริงชื่อ PROJECT_ID ในไฟล์ Configuration.js เป็นรหัสโปรเจ็กต์

383cee561130ceba.png

กำหนดclasp การตั้งค่า

หากต้องการเริ่มต้นการตั้งค่า clasp เพื่อพุชซอร์สโค้ดไปยังโปรเจ็กต์ Apps Script ที่ถูกต้อง ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ในคอนโซล Apps Script
  2. เลือกการตั้งค่าโปรเจ็กต์
  3. คลิกคัดลอกในส่วนรหัส

20ea033b6de882c6.png

  1. สร้างไฟล์ .clasp.json ในไดเรกทอรีปัจจุบัน
  2. แทนที่ <your-script-id> ด้วยรหัสที่คัดลอก
  3. คัดลอกผลลัพธ์ไปยังไฟล์ .clasp.json
  4. บันทึกไฟล์ .clasp.json
{
  "scriptId": "<your-script-id>"
}

พุชซอร์สโค้ด

  • เรียกใช้คำสั่งต่อไปนี้
$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.

ลองใช้เลย

  1. ใน Google Chat ให้ส่ง Hello! ในข้อความส่วนตัวไปยังแอป แอปจะไม่ตอบกลับ แต่จะมีข้อความปรากฏขึ้นเพื่อแจ้งให้กำหนดค่า

4c1fc68121dcffed.png

  1. คลิกกำหนดค่า
  2. เลือกบัญชี Google
  3. ตรวจสอบสิทธิ์
  4. ตรวจสอบและอนุญาตให้เข้าถึงแอป

4a2fd7ac5918bf1a.png

หากสำเร็จ คุณจะเห็นหน้าจอยืนยันพื้นฐานในหน้าเว็บและเห็นการตอบกลับจริงจากแอปไปยังข้อความต้นฉบับ

acb9065568fe47d2.png

2d6ef9c62f47e082.png

  1. ส่งข้อความส่วนตัวถึงแอปอีกครั้ง แต่ใช้คำสั่งเครื่องหมายทับ /create

be3f3c6eb0f929c1.png

  1. ในกล่องโต้ตอบ ให้ตั้งค่าชื่อเป็น Issue Title 1
  2. ตั้งค่าคำอธิบายเป็นปัญหา Description 1
  3. คลิกสร้าง

22efdecff4601417.png

แอปจะดำเนินการต่อไปนี้

  1. ปิดกล่องโต้ตอบ
  2. สร้างพื้นที่ทำงานสำหรับปัญหาที่สร้างขึ้นใหม่โดยเฉพาะซึ่งมีชื่อเดียวกัน
  3. เข้าร่วมพื้นที่ทำงานที่สร้างขึ้นใหม่
  4. ส่งข้อความที่มีรายละเอียดของปัญหาในพื้นที่ที่สร้างขึ้นใหม่
  5. ส่งข้อความส่วนตัวพร้อมลิงก์ไปยังพื้นที่ทำงานที่สร้างขึ้นใหม่ให้คุณ

3253cec2392e281f.png

  1. ในพื้นที่ทำงานที่สร้างขึ้นใหม่ ให้ส่งข้อความด้วยคำสั่ง Slash /close และความละเอียด เช่น Not reproducible

132cc4acfc10b98c.png

แอปจะดำเนินการต่อไปนี้

  1. สร้างเอกสารรายงานใน Google เอกสาร
  2. ส่งข้อความไปยังพื้นที่ทำงานที่เกี่ยวข้องกับปัญหาพร้อมลิงก์ไปยังเอกสารรายงานที่สร้างขึ้นใหม่

2d127c63518673b2.png

  1. เปิดเอกสารรายงาน โดยมีข้อมูลพื้นฐาน ประวัติ และข้อมูลสรุป

9aea694937f2f3ed.png

4. ไม่บังคับ: แอป 1: เพิ่มหน้าแรกของแอป

แนวคิดเกี่ยวกับรีวิว

หน้าแรกของแอปคือข้อความในการ์ดที่ปรับแต่งได้ซึ่งแอปใน Chat จะส่งให้ผู้ใช้เมื่อผู้ใช้เข้าถึงแท็บหน้าแรกจากข้อความส่วนตัวกับแอปใน Chat โดยปกติแล้วจะใช้เพื่อแสดงเอกสารประกอบของแอปหรือภาพรวม ในทางเทคนิคแล้ว มีเหตุการณ์เฉพาะที่ใช้จัดการ และอิงตามหลักการหลักเดียวกันกับข้อความในการ์ด

65f56f70f67a32e4.png

ขั้นตอนการตรวจสอบ

จัดการปัญหา

10663f5fc107fb3f.png

ตรวจสอบซอร์สโค้ด

ต้องแก้ไขโปรเจ็กต์ 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
  }}]}};
}

อัปเดตโปรเจ็กต์ Google Cloud

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ในส่วนฟีเจอร์แบบอินเทอร์แอกทีฟ ให้เลือกช่องทำเครื่องหมายรองรับหน้าแรกของแอป

97159c1c69ca8303.png

ในสภาพแวดล้อมในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้

  1. เปลี่ยนไดเรกทอรีปัจจุบันในเทอร์มินัลเป็น issue-management/2-app-home ซึ่งมีซอร์สโค้ดที่คุณต้องใช้
  2. คัดลอกไฟล์ issue-management/1-baseline/.clasp.json ไปยังไดเรกทอรีปัจจุบัน
  3. คัดลอกไฟล์ issue-management/1-baseline/Configuration.js ไปยังไดเรกทอรีปัจจุบันเพื่อแทนที่ไฟล์ที่มีอยู่
  4. เรียกใช้คำสั่งต่อไปนี้
clasp push

ลองใช้

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. ส่งข้อความส่วนตัวพร้อมคำสั่งเครื่องหมายทับ /create ไปยังแอป แล้วแอปจะเปิดกล่องโต้ตอบ
  2. ตั้งค่าชื่อเป็น Issue Title 2
  3. ตั้งค่าคำอธิบายเป็นปัญหา Description 2
  4. คลิกสร้าง

3b2a8690e758f965.png

  1. เลือกแท็บหน้าแรกจากพื้นที่ของคุณด้วยแอป Google Chat คุณจะเห็นรายละเอียดของปัญหาที่สร้างขึ้น

ed8e32da0e6f2ac6.png

5. ไม่บังคับ: แอป 1: เพิ่มการตรวจสอบพื้นที่

ตรวจสอบแนวคิด

Pub/Sub

Pub/Sub เป็นบริการรับส่งข้อความแบบไม่พร้อมกันและปรับขนาดได้ ซึ่งแยกบริการที่สร้างข้อความออกจากบริการที่ประมวลผลข้อความเหล่านั้น Pub/Sub ช่วยให้คุณสร้างระบบของผู้ผลิตและผู้บริโภคเหตุการณ์ที่เรียกว่าผู้เผยแพร่และผู้สมัครใช้บริการ ผู้เผยแพร่จะสื่อสารกับผู้ติดตามแบบไม่พร้อมกันโดยการออกอากาศเหตุการณ์ แทนที่จะใช้การเรียกกระบวนการระยะไกลแบบซิงโครนัส (RPC)

ผู้เผยแพร่โฆษณาส่งเหตุการณ์ไปยังบริการ Pub/Sub โดยไม่ต้องคำนึงถึงวิธีหรือเวลาที่จะประมวลผลเหตุการณ์เหล่านี้ จากนั้น Pub/Sub จะส่งเหตุการณ์ไปยังบริการทั้งหมดที่ตอบสนองต่อเหตุการณ์เหล่านั้น ในระบบที่สื่อสารผ่าน RPC ผู้เผยแพร่โฆษณาต้องรอให้ผู้ติดตามได้รับข้อมูล อย่างไรก็ตาม การผสานรวมแบบไม่พร้อมกันใน Pub/Sub จะเพิ่มความยืดหยุ่นและความแข็งแกร่งของระบบโดยรวม

หัวข้อ: ทรัพยากรที่มีชื่อซึ่งแสดงถึงฟีดของข้อความ คุณต้องสร้างหัวข้อก่อนจึงจะเผยแพร่หรือติดตามหัวข้อได้

การสมัครใช้บริการ: หากต้องการรับข้อความที่เผยแพร่ไปยังหัวข้อ คุณต้องสร้างการสมัครใช้บริการหัวข้อนั้น ไคลเอ็นต์ผู้สมัครรับข้อมูลจะรับและประมวลผลข้อความที่เผยแพร่ไปยังหัวข้อ หัวข้อหนึ่งๆ สามารถมีการสมัครใช้บริการหลายรายการ แต่การสมัครใช้บริการหนึ่งๆ จะเป็นของหัวข้อเดียว

กิจกรรม Google Workspace

เหตุการณ์ใน Google Workspace แสดงถึงการเปลี่ยนแปลงในทรัพยากรของ Google Workspace เช่น เมื่อมีการสร้าง อัปเดต หรือลบทรัพยากร แอปสามารถติดตามทรัพยากร Google Workspace เพื่อรับและประมวลผลเหตุการณ์ที่เกี่ยวข้องแบบไม่พร้อมกันได้

7816e477b112bfb6.png

Google Workspace Events API จะส่งกิจกรรมไปยังแอปผ่านการสมัครใช้บริการดังนี้

  1. แอปจะสมัครใช้ทรัพยากรในแอป Google Workspace เช่น พื้นที่ทำงาน
  2. ทรัพยากรที่แอปสมัครใช้บริการมีการเปลี่ยนแปลง
  3. แอป Google Workspace จะส่งเหตุการณ์ไปยังหัวข้อใน Pub/Sub ซึ่งทำหน้าที่เป็นปลายทางการแจ้งเตือนสำหรับการสมัครใช้บริการ Google Workspace ของแอป เหตุการณ์มีข้อมูลเกี่ยวกับการเปลี่ยนแปลงในทรัพยากร
  4. แอปจะประมวลผลข้อความ Pub/Sub ที่มีเหตุการณ์ และดำเนินการหากจำเป็น

ขั้นตอนการตรวจสอบ

สร้างปัญหา (อัปเดต)

6d7a9d7a68666a80.png

แก้ปัญหาจากพื้นที่เฉพาะ (อัปเดต)

17e60f052f222456.png

ปิดปัญหาจากพื้นที่เฉพาะ (อัปเดต)

742d490ea0b6fe3a.png

ประมวลผลการสมัครใช้บริการ

de3017100dec6401.png

ตรวจสอบซอร์สโค้ด

ต้องแก้ไขโปรเจ็กต์ 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);
}

อัปเดตโปรเจ็กต์ Google Cloud

เปิดใช้ API

  1. ในคอนโซล Google Cloud ให้เปิดใช้เหตุการณ์ Google Workspace และ PubSub

  1. คลิกเมนู ☰ > API และบริการ > API และบริการที่เปิดใช้ แล้วยืนยันว่าทั้ง 2 รายการเปิดใช้อยู่

เริ่มการสมัครใช้บริการ

คุณต้องสร้างและสมัครใช้หัวข้อ Pub/Sub เพื่อให้ระบบโพสต์เหตุการณ์ในพื้นที่ทำงานทั้งหมด

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่เมนู ☰ > Pub/Sub > หัวข้อ

  1. คลิกสร้างหัวข้อ
  2. ตั้งค่ารหัสหัวข้อเป็น workspace-events
  3. เลือกช่องทําเครื่องหมายเพิ่มการสมัครใช้บริการเริ่มต้น
  4. คลิกสร้าง

b39f9a0aec7c9939.png

หากต้องการให้สิทธิ์เข้าถึงเพื่อเผยแพร่ข้อความ Pub/Sub ไปยังหัวข้อที่สร้างขึ้นใหม่จาก Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกหัวข้อจากรายการ
  2. เลือกแท็บสิทธิ์
  3. เพิ่ม chat-api-push@system.gserviceaccount.com ไปยังผู้รับมอบสิทธิ์ใหม่
  4. เลือกผู้เผยแพร่ Pub/Sub สำหรับบทบาท
  5. คลิกบันทึก

8d4016c37532503.png

อัปเดตโปรเจ็กต์ Apps Script

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่เมนู ☰ > IAM และผู้ดูแลระบบ > การตั้งค่า

  1. คัดลอกรหัสโปรเจ็กต์

82592fa0bd113469.png

ในสภาพแวดล้อมในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้

  1. เปลี่ยนไดเรกทอรีปัจจุบันในเทอร์มินัลเป็น issue-management/3-message-monitoring ซึ่งมีซอร์สโค้ดที่คุณต้องการ
  2. ตั้งค่าค่าคงที่สตริงชื่อ PROJECT_ID ในไฟล์ Configuration.js เป็นรหัสโปรเจ็กต์ที่คัดลอก
  3. ตั้งค่าค่าคงที่ JSON ที่ชื่อ CHAT_CREDENTIALS ในไฟล์ Configuration.js เป็นเนื้อหาไฟล์คีย์ส่วนตัวที่คุณดาวน์โหลดไว้ก่อนหน้านี้
  4. คัดลอกไฟล์ issue-management/2-app-home/.clasp.json ไปยังไดเรกทอรีปัจจุบัน
  5. เรียกใช้คำสั่งต่อไปนี้
clasp push

ลองใช้

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. ส่งข้อความส่วนตัวพร้อมคำสั่งเครื่องหมายทับ /create ไปยังแอป แล้วแอปจะเปิดกล่องโต้ตอบ
  2. ตั้งค่าชื่อเป็น Issue Title 3
  3. ตั้งค่าคำอธิบายเป็นปัญหา Description 3
  4. คลิกสร้าง
  5. ในพื้นที่ทำงานที่สร้างขึ้นใหม่ ให้ส่งข้อความ 2-3 ข้อความที่พูดถึงปัญหา
  6. ส่งข้อความด้วยคำสั่งเครื่องหมายทับ /close และความละเอียด เช่น Fixed

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่เมนู ☰ > Pub/Sub > การสมัครใช้บริการ

  1. เลือกการสมัครใช้บริการ workspace-events-sub
  2. เลือกแท็บข้อความ
  3. คลิกดึง ตารางจะแสดงข้อความที่เกี่ยวข้องกับสิ่งที่คุณส่งไปยังพื้นที่ทำงานที่สร้างขึ้นใหม่

82631c9792d83889.png

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. เลือกตัดต่อวิดีโอ
  3. เลือกไฟล์ WorkspaceEvent.gs
  4. เลือก processSubscription ในส่วนเรียกใช้
  5. คลิก Run คุณจะเห็นจากบันทึกการดำเนินการว่าระบบประมวลผลข้อความแล้ว

c612e8fa2bd0a163.png

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่เมนู ☰ > Pub/Sub > การสมัครใช้บริการ

  1. เลือกการสมัครใช้บริการ workspace-events-sub
  2. เลือกแท็บข้อความ
  3. คลิกดึง ตารางจะไม่แสดงข้อความที่เกี่ยวข้องกับสิ่งที่คุณส่งไปยังพื้นที่ทำงานที่สร้างขึ้นใหม่

e185454cac862a7b.png

  • ใน Google Chat ในพื้นที่ทำงานที่สร้างขึ้นสำหรับปัญหาที่ 3 โดยใช้คำสั่ง Slash /create ให้ส่งข้อความเพิ่มเติมอีก 2-3 ข้อความที่พูดถึงปัญหาดังกล่าว

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่เมนู ☰ > Pub/Sub > การสมัครใช้บริการ

  1. เลือกการสมัครใช้บริการ workspace-events-sub
  2. เลือกแท็บข้อความ
  3. คลิกดึง ตารางจะไม่แสดงข้อความที่เกี่ยวข้องกับสิ่งที่คุณส่งไปยังพื้นที่ทำงานที่สร้างขึ้นใหม่

6. ไม่บังคับ: แอป 1: เพิ่มความช่วยเหลือด้านการไม่แบ่งแยก

ตรวจสอบแนวคิด

การเขียนพรอมต์สำหรับ Gen AI คือศิลปะในการสร้างคำสั่งหรือคำถามเพื่อชี้นำโมเดล Generative AI ไปยังเอาต์พุตประเภทที่ต้องการ แนวทางปฏิบัติทั่วไปคือการจำกัดคำตอบโดยการเพิ่มกฎและเงื่อนไขในพรอมต์ ซึ่งจะช่วยให้เอาต์พุตมีความปลอดภัย เกี่ยวข้อง สอดคล้องกัน และตรงตามความคาดหวัง

ขั้นตอนการตรวจสอบ

ประมวลผลการสมัครใช้บริการ (อัปเดต)

780d0802f77dd180.png

ตรวจสอบซอร์สโค้ด

ต้องแก้ไขโปรเจ็กต์ 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;
}

อัปเดตโปรเจ็กต์ Apps Script

ในสภาพแวดล้อมในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้

  1. เปลี่ยนไดเรกทอรีปัจจุบันในเทอร์มินัลเป็น issue-management/4-inclusivity-help ซึ่งมีซอร์สโค้ดที่คุณต้องการ
  2. คัดลอกไฟล์ issue-management/3-message-monitoring/.clasp.json ไปยังไดเรกทอรีปัจจุบัน
  3. คัดลอกไฟล์ issue-management/3-message-monitoring/Configuration.js ไปยังไดเรกทอรีปัจจุบันเพื่อแทนที่ไฟล์ที่มีอยู่
  4. เรียกใช้คำสั่งต่อไปนี้
clasp push

ลองใช้

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. ส่งข้อความส่วนตัวพร้อมคำสั่งเครื่องหมายทับ /create ไปยังแอป แล้วแอปจะเปิดกล่องโต้ตอบ
  2. ตั้งค่าชื่อเป็น Issue Title 4
  3. ตั้งค่าคำอธิบายเป็นปัญหา Description 4
  4. คลิกสร้าง
  5. ส่ง It happened to me last week as well ในพื้นที่ทำงานที่สร้างขึ้นใหม่

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. เลือกตัดต่อวิดีโอ
  3. เลือกไฟล์ WorkspaceEvent.gs
  4. เลือก processSubscription ในส่วนเรียกใช้
  5. คลิกเรียกใช้ คุณจะเห็นจากบันทึกการดำเนินการว่าระบบประมวลผลข้อความแล้ว

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. โปรดสังเกตว่าแอปไม่ได้ส่งความช่วยเหลือด้านการไม่แบ่งแยกในพื้นที่ทำงานที่สร้างขึ้นใหม่
  2. ส่งข้อความ I had to add myself from the master to fix it ในพื้นที่ทำงานที่สร้างขึ้นใหม่

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. เลือกตัดต่อวิดีโอ
  3. เลือกไฟล์ WorkspaceEvent.gs
  4. เลือก processSubscription ในส่วนเรียกใช้
  5. คลิกเรียกใช้ คุณจะเห็นจากบันทึกการดำเนินการว่าระบบประมวลผลข้อความแล้ว ใน Google Chat แอปได้ส่งข้อความช่วยเหลือด้านการไม่แบ่งแยกในพื้นที่ทำงานที่สร้างขึ้นใหม่

7936342847acbe2d.png

7. ไม่บังคับ: แอป 1: เพิ่มค่ากำหนด

.

ตรวจสอบแนวคิด

วิดเจ็ตเสริมคือวิดเจ็ตแบบไม่มีเส้นขอบที่แนบไปกับด้านล่างของข้อความที่แอปส่ง โดยปกติแล้วจะใช้เพื่อเปิดใช้การโต้ตอบอย่างรวดเร็วจากผู้ใช้ในบริบทเฉพาะของข้อความ ในทางเทคนิคแล้ว ปุ่มนี้อิงตามหลักการหลักเดียวกันกับปุ่มการ์ด

eebe88238f6b13f.png

ขั้นตอนการตรวจสอบ

ปิดใช้ความช่วยเหลือด้านการไม่แบ่งแยก

1bb7a8592ee6221e.png

ตรวจสอบซอร์สโค้ด

ต้องแก้ไขโปรเจ็กต์ 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
              }]
            }}
          }]}}]
        }, ...);
        ...
      }
      ...
    }
    ...
  }
  ...
}

อัปเดตโปรเจ็กต์ Apps Script

ในสภาพแวดล้อมในเครื่อง ให้ทำตามขั้นตอนต่อไปนี้

  1. เปลี่ยนไดเรกทอรีปัจจุบันในเทอร์มินัลเป็น issue-management/5-disable-help ซึ่งมีซอร์สโค้ดที่คุณต้องการ
  2. คัดลอกไฟล์ issue-management/4-inclusivity-help/.clasp.json ไปยังไดเรกทอรีปัจจุบัน
  3. คัดลอกไฟล์ issue-management/4-inclusivity-help/Configuration.js ไปยังไดเรกทอรีปัจจุบันเพื่อแทนที่ไฟล์ที่มีอยู่
  4. เรียกใช้คำสั่งต่อไปนี้
clasp push

ลองใช้

ปิดใช้ความช่วยเหลือ

  • ใน Google Chat ในพื้นที่ทำงานที่สร้างขึ้นสำหรับปัญหาที่ 4 โดยใช้คำสั่ง Slash /create ให้ส่งข้อความ I had to add myself from the master to fix

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. เลือกตัดต่อวิดีโอ
  3. เลือกไฟล์ WorkspaceEvent.gs
  4. เลือก processSubscription ในส่วนเรียกใช้
  5. คลิกเรียกใช้ คุณจะเห็นจากบันทึกการดำเนินการว่าระบบประมวลผลข้อความแล้ว

ใน Google Chat ให้ทำตามขั้นตอนต่อไปนี้

  1. โปรดทราบว่าแอปได้ส่งข้อความพร้อมความช่วยเหลือด้านการไม่แบ่งแยกไปยังพื้นที่ที่อุทิศให้กับการแก้ไขปัญหาเกี่ยวกับวิดเจ็ตอุปกรณ์เสริม
  2. คลิกวิดเจ็ตอุปกรณ์เสริมเพื่อปิดใช้ความช่วยเหลือด้านการไม่แบ่งแยก

de722cff1928dec9.png

การตรวจสอบการปิดใช้

  • ใน Google Chat ในพื้นที่ทำงานที่สร้างขึ้นสำหรับปัญหาที่ 4 โดยใช้คำสั่ง Slash /create ให้ส่งข้อความ I had to add myself from the master to fix

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. เลือกตัดต่อวิดีโอ
  3. เลือกไฟล์ WorkspaceEvent.gs
  4. เลือก processSubscription ในส่วนเรียกใช้
  5. คลิกเรียกใช้ คุณจะเห็นจากบันทึกการดำเนินการว่าระบบประมวลผลข้อความแล้ว ใน Google Chat แอปไม่ได้ส่งข้อความพร้อมความช่วยเหลือด้านการไม่แบ่งแยกไปยังพื้นที่ทำงานที่อุทิศให้กับปัญหานี้เนื่องจากมีการปิดใช้

347d659db53b73e9.png

8. แอป 2: สร้าง

แนวคิดเกี่ยวกับรีวิว

การอ้างอิงของ Gen AI

โดยมีเป้าหมายเพื่อทำให้โมเดล AI มีข้อเท็จจริงและเชื่อถือได้มากขึ้นด้วยการเชื่อมต่อโมเดลกับแหล่งความรู้ที่ตรวจสอบได้ เทคนิคนี้ช่วยป้องกันไม่ให้ AI สร้างข้อมูลขึ้นมาเอง และช่วยให้คำตอบมีความเกี่ยวข้องตามบริบทและมีอคติน้อยลง

ภาษาธรรมชาติ

ภาษาใดๆ ที่มนุษย์พูดหรือเขียนเพื่อการสื่อสารในชีวิตประจำวัน ซึ่งแตกต่างจากภาษาที่สร้างขึ้นหรือภาษาที่ใช้ในคอมพิวเตอร์

Cloud Storage

Cloud Storage ช่วยให้ผู้ใช้เก็บข้อมูลและเรียกข้อมูลจำนวนเท่าใดก็ได้จากทุกแห่งของโลก คุณสามารถใช้ได้หลายกรณี รวมถึงการแสดงเนื้อหาเว็บไซต์ การจัดเก็บข้อมูลไว้ในที่เก็บถาวรและการกู้ข้อมูลคืนหลังจากภัยพิบัติ หรือการกระจายออบเจ็กต์ข้อมูลขนาดใหญ่ไปยังผู้ใช้ผ่านการดาวน์โหลดโดยตรง

ที่เก็บข้อมูล Dialogflow CX

Dialogflow CX ผสานรวมกับที่เก็บข้อมูล ซึ่งเป็นคอลเล็กชันของเว็บไซต์และเอกสารที่เอเจนต์ที่เก็บข้อมูลใช้เพื่อค้นหาคำตอบสำหรับคำถามของผู้ใช้ปลายทางจากข้อมูลที่เฉพาะเจาะจง สำหรับคำถามที่ระบุ Data Store Agent จะค้นหาคำตอบจากเนื้อหาต้นทางที่ระบุ และสรุปผลการค้นหาเพื่อตอบกลับอย่างสอดคล้องกัน นอกจากนี้ ยังมีลิงก์สนับสนุนไปยังแหล่งที่มาของคำตอบเพื่อให้ผู้ใช้ปลายทางได้ดูข้อมูลเพิ่มเติมด้วย

ตรวจสอบสถาปัตยกรรม

9d3342d12f3b4dda.png

แอป Google Chat นี้สร้างขึ้นด้วย Dialogflow CX และทำงานดังนี้

  1. ผู้ใช้ส่งข้อความไปยังแอป ไม่ว่าจะในข้อความส่วนตัวหรือในพื้นที่ทำงาน
  2. แอปซึ่งเป็นเอเจนต์ Dialogflow CX และเชื่อมโยงกับโปรเจ็กต์ Google Cloud จะประมวลผลข้อความ
  3. แอปจะผสานรวมกับที่เก็บข้อมูลที่อยู่ใน Cloud Storage
  4. แอปจะส่งการตอบกลับแบบซิงโครนัสในข้อความส่วนตัวหรือในพื้นที่ทำงานเดิม

ตรวจสอบโฟลว์

ตอบคำถาม

aad9fb5a7ca48956.png

ตรวจสอบซอร์สโค้ด

แหล่งข้อมูลเดียวที่คุณต้องการไม่ใช่โค้ด แต่เป็นข้อมูลที่คุณใช้ในการอ้างอิง

google-chat-overview.pdf

มีข้อมูลที่ไม่มีโครงสร้างของแอป Google Chat ซึ่งเป็นเวอร์ชันที่พิมพ์ของหน้าจากเว็บไซต์นักพัฒนาซอฟต์แวร์ Google Workspace

e9b91c4587b1a3a0.png

อัปเดตโปรเจ็กต์ Google Cloud

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้ Dialogflow และ Cloud Storage API

  1. เปิดใช้ Vertex AI Agent Builder API

  1. คลิกเมนู ☰ > API และบริการ > API และบริการที่เปิดใช้ แล้วยืนยันว่าได้เปิดใช้ API ทั้งหมดแล้ว

.

สร้างเอเจนต์พื้นที่เก็บข้อมูล Dialogflow CX

เริ่มต้นข้อมูลความรู้

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > พื้นที่เก็บข้อมูลบนคลาวด์ > บัคเก็ต

4f15978ae9f1b687.png

  1. คลิกสร้าง
  2. ตั้งค่า name เป็น gchat-knowledge
  3. คลิกสร้าง

6b38c6d4d2c41bba.png

  1. เลือกที่เก็บข้อมูล gchat-knowledge
  2. คลิกอัปโหลดไฟล์
  3. ดาวน์โหลดและเลือกไฟล์ google-chat-overview.pdf จากสภาพแวดล้อมในเครื่อง

df89acb22e1762af.png

สร้างแอป

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป

  1. คลิกแอปใหม่
  2. เลือกประเภทแชท

44276003074bcf14.png

  1. ตั้งค่า Company name เป็นชื่อบริษัท
  2. ตั้งค่า Agent name เป็น knowledge
  3. คลิกต่อไป

c4fedfd7556f723b.png

  1. คลิกสร้างที่เก็บข้อมูลใหม่
  2. เลือก Cloud Storage เป็นแหล่งข้อมูล

6e2440ecf0f8f9bd.png

  1. เลือกไฟล์
  2. คลิกเลือกดู
  3. เลือกไฟล์ google-chat-overview.pdf
  4. คลิกต่อไป
  5. ตั้งชื่อพื้นที่เก็บข้อมูลเป็น gchat-knowledge-ds
  6. คลิกสร้าง

a675df7490b83900.png

  1. เลือกที่เก็บข้อมูล gchat-knowledge-ds ในตาราง
  2. คลิกสร้าง

f121d580771ed96.png

  1. หลังจากผ่านไป 2-3 นาที ให้คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป แล้วคุณจะเห็นแอป

d929a7431dd84968.png

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > ที่เก็บข้อมูล

  1. คลิกที่คลังข้อมูล gchat-knowledge-ds จำนวนเอกสารคือ 1 ซึ่งแสดงว่าเอกสารพร้อมแล้ว

558319790a0accf2.png

สร้างและทดสอบแอป

ในคอนโซล Dialogflow CX ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ Google Cloud
  2. เลือกเอเจนต์ความรู้

ca9b2fb4be92e8e4.png

  1. เลือกการตั้งค่าตัวแทน > Generative AI > ตัวแทน Generative
  2. เปลี่ยนโมเดลจาก Text Bison เป็น Gemini Pro
  3. คลิกบันทึก

68cc4713ec9b25a0.png

  1. คลิกทดสอบเอเจนต์
  2. ส่ง What is Google Chat? ตัวแทนตอบกลับด้วยข้อความที่มีความหมาย

8e3a2cb02469041a.png

ผสานรวมแอป Google Chat

ในคอนโซล Dialogflow CX ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ Google Cloud
  2. ในแถวของเอเจนต์ความรู้ ให้คลิก 1e7ede7abae4aa3c.png > คัดลอกชื่อ

e19f61185158110d.png

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่การกำหนดค่า Google Chat API

  1. เลือก Dialogflow ในส่วนการตั้งค่าการเชื่อมต่อ
  2. ในส่วนการตั้งค่า Dialogflow ให้เลือก Dialogflow CX
  3. ตั้งค่าชื่อทรัพยากรของ Agent หรือสภาพแวดล้อมเป็นชื่อ Agent ที่คุณคัดลอกไว้
  4. นำคำสั่ง Slash ทั้ง 2 รายการออก

505ff39a50880904.png

  1. ใน Google Chat ให้ส่ง What is Google Chat? ในข้อความส่วนตัวไปยังแอป Google Chat แล้วเอเจนต์จะตอบกลับด้วยข้อความที่มีความหมาย

abda9e43b81fb0ea.png

9. ไม่บังคับ: แอป 2: เพิ่มแหล่งที่มา

แนวคิดเกี่ยวกับรีวิว

Webhook ของ Dialogflow CX

บริการที่โฮสต์ตรรกะทางธุรกิจหรือเรียกใช้บริการอื่นๆ ในระหว่างเซสชัน Dialogflow CX เว็บฮุกสามารถใช้ข้อมูลที่ประมวลผลภาษาธรรมชาติ (Natural Language Processing) ดึงออกมาเพื่อสร้างการตอบกลับแบบไดนามิก ตรวจสอบข้อมูลที่รวบรวม หรือทริกเกอร์การดำเนินการในแบ็กเอนด์

Cloud Functions

Cloud Functions เหมาะสำหรับการสร้างแบ็กเอนด์แบบไม่ใช้เซิร์ฟเวอร์ การประมวลผลข้อมูลแบบเรียลไทม์ และการสร้างแอปอัจฉริยะ ไม่ต้องจัดสรร จัดการ แพตช์ หรืออัปเดตเซิร์ฟเวอร์ โดยจะปรับขนาดโดยอัตโนมัติ มีความพร้อมใช้งานสูง และทนทานต่อข้อผิดพลาด

ตรวจสอบโฟลว์

ตอบคำถาม (อัปเดต)

92767c07c7b252aa.png

ตรวจสอบซอร์สโค้ด

ซอร์สโค้ดเดียวที่คุณต้องใช้คือฟังก์ชันในการปรับคำตอบของตัวแทนให้เข้ากับข้อความ Google Chat โดยจะใช้เป็นเว็บฮุก

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
          }}]
        }]}
      }]
    }}]
  }});
});

อัปเดตโปรเจ็กต์ Google Cloud

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้ Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry และ Cloud Run API

  1. คลิกเมนู ☰ > API และบริการ > API และบริการที่เปิดใช้ แล้วยืนยันว่าได้เปิดใช้ API แล้ว

อัปเดตเอเจนต์ที่จัดเก็บข้อมูล Dialogflow CX

คุณต้องทําให้ Cloud Function ใช้งานได้และอัปเดต Webhook ของ Dialogflow CX เพื่อทริกเกอร์ด้วยแหล่งข้อมูลหลายแหล่งเมื่อเป็นไปได้

แสดงแหล่งข้อมูลหลายรายการ

โดยค่าเริ่มต้น เอเจนต์ที่เก็บข้อมูลใหม่จะแสดงแหล่งที่มาเพียง 1 รายการเท่านั้น แต่คุณสามารถเปลี่ยนให้แสดงมากกว่านั้นได้

ในคอนโซล Dialogflow CX ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ Google Cloud
  2. เลือกเอเจนต์ความรู้
  3. เลือกหน้าเริ่มต้น
  4. เลือกแก้ไขที่เก็บข้อมูล
  5. ในส่วนการตอบกลับของตัวแทน ให้ตั้งค่าตัวเลือกการตอบกลับของที่เก็บข้อมูลเป็น 5
  6. คลิกบันทึก

f5932d03057df645.png

เริ่มต้น Cloud Function

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > Cloud Functions

  1. คลิกสร้างฟังก์ชัน
  2. ในส่วนพื้นฐาน ให้ตั้งชื่อเป็น function-1
  3. ในส่วนการตรวจสอบสิทธิ์ ให้เลือกปุ่มตัวเลือกอนุญาตการเรียกใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์
  4. ในส่วนการตั้งค่ารันไทม์ บิลด์ การเชื่อมต่อ และความปลอดภัย ให้ตั้งค่าจำนวนอินสแตนซ์สูงสุดเป็น 3
  5. คลิกถัดไป

bd3790a9285f9c07.png

  1. ตั้งค่าจุดแรกเข้าเป็น agent-response-adapter
  2. แทนที่เนื้อหาเริ่มต้นด้วยไฟล์ package.json และ index.js
  3. คลิกทำให้ใช้งานได้

b379bb8ca0fc1079.png

  1. คัดลอก URL ขณะรอ 2-3 นาทีเพื่อให้ฟังก์ชันทำงาน

eaae08cf048b9b1c.png

เริ่มเว็บฮุค

คุณต้องกำหนดค่าเอเจนต์ Dialogflow CX ให้ใช้ Webhook ที่ทริกเกอร์ฟังก์ชันที่เพิ่งทำให้ใช้งานได้

ในคอนโซล Dialogflow CX ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ Google Cloud
  2. เลือกเอเจนต์ความรู้
  3. เลือกจัดการ > เว็บฮุก > สร้าง
  4. ตั้งค่าชื่อที่แสดงเป็น Google Chat Response Adapter
  5. ตั้งค่า URL ของเว็บฮุคเป็น URL ที่คัดลอกไว้ก่อนหน้านี้
  6. คลิกบันทึก

5f3c6804d52b87c1.png

  1. คลิกสร้าง
  2. เลือกหน้าเริ่มต้น
  3. เลือกแก้ไขที่เก็บข้อมูล
  4. ในส่วนการตั้งค่าเว็บฮุค ให้คลิกปุ่มเปิด/ปิดเปิดใช้เว็บฮุค
  5. เลือก Google Chat Response Adapter for Webhook
  6. ตั้งค่า tag เป็น arbitrary_tag
  7. คลิกบันทึก

442fcaaec9b8f2e3.png

แอปทดสอบ

  • ใน Google Chat ให้ส่ง What is Google Chat? ในข้อความส่วนตัวไปยังแอป Google Chat เจ้าหน้าที่จะตอบกลับด้วยข้อมูลที่มีประโยชน์และแสดงการ์ดที่มีแหล่งที่มา (หากมี)

9468866bfe848bb8.png

10. แอป 3: สร้าง

แนวคิดเกี่ยวกับรีวิว

การโต้ตอบแบบสนทนา

ซึ่งเป็นการแลกเปลี่ยนข้อมูลหรือแนวคิดระหว่างบุคคล 2 คนขึ้นไปผ่านภาษาธรรมชาติ ซึ่งแตกต่างจากอินเทอร์เฟซทางเทคนิคที่มักอาศัยการแลกเปลี่ยนแบบไม่มีสถานะ มีโครงสร้างสูง และไม่ยอมรับข้อผิดพลาด

ข้อกำหนด OpenAPI

ซึ่งเป็นวิธีที่สอดคล้องกันในการส่งข้อมูลผ่านแต่ละขั้นตอนของวงจร API เป็นภาษาข้อกำหนดสำหรับ HTTP API ที่กำหนดโครงสร้างและไวยากรณ์ในลักษณะที่ไม่ผูกกับภาษาโปรแกรมที่ใช้สร้าง API โดยปกติแล้วข้อกำหนด API จะเขียนในรูปแบบ YAML หรือ JSON ซึ่งช่วยให้แชร์และใช้ข้อกำหนดได้อย่างง่ายดาย

เอเจนต์ Dialogflow CX

องค์ประกอบพื้นฐานของแอปตัวแทน โดยปกติแล้ว agent app จะมี agent จำนวนมาก ซึ่งแต่ละ agent จะได้รับการกำหนดให้จัดการงานที่เฉพาะเจาะจง ระบบจะให้ข้อมูลตัวแทนแก่ LLM เพื่อให้ LLM มีข้อมูลที่จำเป็นในการตอบคำถามและดำเนินการ เอเจนต์แต่ละรายสามารถให้ข้อมูล ส่งการค้นหาไปยังบริการภายนอก หรือเลื่อนการจัดการการสนทนาไปยังโฟลว์ Dialogflow CX หรือเอเจนต์อื่นเพื่อจัดการงานย่อย

เครื่องมือ Dialogflow CX

เครื่องมือใช้เพื่อเชื่อมต่อแอปตัวแทนกับระบบภายนอก ระบบเหล่านี้จะช่วยเสริมความรู้ของแอปตัวแทนและช่วยให้ตัวแทนทำงานที่ซับซ้อนได้อย่างมีประสิทธิภาพ

ตรวจสอบสถาปัตยกรรม

9d3342d12f3b4dda.png

แอป Google Chat นี้สร้างขึ้นด้วย Dialogflow CX และทำงานดังนี้

  1. ผู้ใช้ส่งข้อความไปยังแอป ไม่ว่าจะในข้อความส่วนตัวหรือในพื้นที่ทำงาน
  2. แอปซึ่งเป็นเอเจนต์ Dialogflow CX และเชื่อมโยงกับโปรเจ็กต์ Google Cloud จะประมวลผลข้อความ
  3. แอปผสานรวมกับตัวแทน
  4. แอปจะส่งการตอบกลับแบบซิงโครนัสในข้อความส่วนตัวหรือในพื้นที่ทำงานเดิม

ตรวจสอบโฟลว์

รวบรวมรีวิว

a67a5b8b513bfc2c.png

ตรวจสอบซอร์สโค้ด

ซอร์สโค้ดเดียวที่คุณต้องการคือฟังก์ชันเพื่อจำลองบริการแบ็กเอนด์ที่เอเจนต์ใช้เป็นเครื่องมือ

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

เริ่มการจำลองบริการแบ็กเอนด์

คุณจะติดตั้งใช้งาน Cloud Functions เพื่อจำลองบริการแบ็กเอนด์ที่แอปตัวแทน Dialogflow CX ต้องผสานรวมและเรียกใช้เป็นเครื่องมือ

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > Cloud Functions

  1. คลิกสร้างฟังก์ชัน
  2. ในส่วนพื้นฐาน ให้ตั้งชื่อเป็น function-2
  3. ในส่วนการตรวจสอบสิทธิ์ ให้เลือกปุ่มตัวเลือกอนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
  4. ในส่วนการตั้งค่ารันไทม์ บิลด์ การเชื่อมต่อ และความปลอดภัย ให้ตั้งค่าจำนวนอินสแตนซ์สูงสุดเป็น 3
  5. คลิกถัดไป

e8cf0ee7441bf634.png

  1. ตั้งค่าจุดแรกเข้าเป็น feedback-app-backend
  2. แทนที่เนื้อหาเริ่มต้นด้วยไฟล์ package.json และ index.js
  3. คลิกทำให้ใช้งานได้

bdb5cf9f503aa7f6.png

  1. คัดลอก URL ขณะรอ 2-3 นาทีเพื่อให้ฟังก์ชันทำงาน

สร้างแอป Agent ของ Dialogflow CX

สร้างแอป

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป

  1. คลิกแอปใหม่
  2. เลือกตัวแทน
  3. ตั้งค่าชื่อที่แสดงเป็น Feedback App
  4. คลิกสร้าง

7ef3dbacee96c5aa.png

เริ่มต้นเครื่องมือ

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป

  1. เลือกตัวแทนแอปความคิดเห็น
  2. คลิกเครื่องมือ > + สร้าง
  3. ตั้งค่าชื่อเป็น review
  4. เลือก OpenAPI
  5. ตั้งค่า description เป็นค่าต่อไปนี้
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
  1. ดาวน์โหลดและแทนที่ $URL ในไฟล์ service-openapi.yaml ด้วย URL ที่คัดลอกไว้ก่อนหน้านี้
  2. ตั้งค่า YAML Schema เป็นเนื้อหาที่แก้ไขแล้วของไฟล์ service-openapi.yaml
  3. คลิกบันทึก

58085d6d56b603f7.png

เริ่มต้น Agent

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป

  1. เลือกตัวแทนแอปความคิดเห็น
  2. เลือกเอเจนต์ > Generative Agent เริ่มต้น
  3. ตั้งค่าชื่อเอเจนต์เป็น Feedback collector
  4. ตั้งค่า goal เป็นค่าต่อไปนี้
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.
  1. ตั้งค่า instructions เป็นค่าต่อไปนี้
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.
  1. คลิกบันทึก

ebee7fdfa826b487.png

แอปทดสอบ

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > เครื่องมือสร้างเอเจนต์ > แอป

  1. เลือกตัวแทนแอปความคิดเห็น
  2. ไปที่ตัวแทนแสดงตัวอย่าง
  3. ในส่วนตัวแทน ให้เลือกผู้รวบรวมความคิดเห็น
  4. ในส่วนเลือกโมเดล Generative AI ให้เลือก gemini-pro
  5. ส่งข้อความ Hello! เพื่อเริ่มต้น

90ca8cb7b2c1cb4b.png

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > Cloud Functions

  1. เลือก function-2 > Logs บันทึกบางรายการแสดง Google-Dialogflow เป็นผู้โทร

48bfdf1788004d18.png

ผสานรวมแอป Google Chat

ในคอนโซล Dialogflow CX ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์ Google Cloud
  2. คลิกเมนูการทำงานของFeedback Appเอเจนต์
  3. คลิกคัดลอกชื่อ

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่การกำหนดค่า Google Chat API

  1. ตั้งค่าชื่อทรัพยากรของเอเจนต์หรือสภาพแวดล้อมเป็นชื่อเอเจนต์ที่คุณคัดลอกไว้ก่อนหน้านี้

df16619a1cb85cf8.png

  • ใน Google Chat ให้ส่ง Hello! ในข้อความส่วนตัวไปยังแอป Google Chat เพื่อเริ่มต้น Agent จะตอบกลับในลักษณะเดียวกับการทดสอบจากคอนโซล Dialogflow CX

99a7a0295f122f31.png

11. ล้างข้อมูล

ลบโปรเจ็กต์ Google Cloud

เราขอแนะนำให้คุณลบโปรเจ็กต์ Google Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้

ในคอนโซล Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกเมนู ☰ > IAM และผู้ดูแลระบบ > การตั้งค่า

  1. คลิกปิดเครื่อง
  2. ป้อนรหัสโปรเจ็กต์
  3. คลิกปิดเครื่องต่อไป

407699a4e03afea6.png

ลบโปรเจ็กต์ Apps Script

เราขอแนะนำให้คุณลบโปรเจ็กต์ Apps Script ด้วย

ในคอนโซล Apps Script ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกโปรเจ็กต์
  2. คลิกเมนูการทำงาน
  3. คลิกนำออก

fa3a42d7d2201eb9.png

12. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างแอป Google Chat ด้วย Gemini

สิ่งต่อไปที่ควรทำ

เราแสดงเฉพาะกรณีการใช้งานที่เรียบง่ายในโค้ดแล็บนี้ แต่ก็มีขอบเขตการขยายอีกมากมายที่คุณอาจต้องการพิจารณาในแอป Google Chat เช่น

  • ผสานรวมกับโมเดล Generative AI อื่นๆ รวมถึงโมเดลที่กำหนดเอง
  • รองรับสื่อประเภทอื่นๆ เช่น เสียง รูปภาพ และวิดีโอ
  • ใช้มัลติโมดัล
  • ใช้หน้าต่างบริบทและวงจรความคิดเห็นที่ยาวขึ้น
  • เผยแพร่แอป Google Chat ที่พร้อมใช้งานจริงใน Marketplace นักพัฒนาซอฟต์แวร์สามารถเข้าถึงแหล่งข้อมูลมากมาย เช่น วิดีโอ YouTube, เว็บไซต์เอกสารประกอบ, ตัวอย่างโค้ด และบทแนะนำ
  • เปิดใช้ Google Chat สำหรับองค์กร ฟีเจอร์โหมดการนำเข้าช่วยให้คุณเริ่มต้นใช้งานได้ง่ายขึ้น

ดูข้อมูลเพิ่มเติม