Tworzenie aplikacji na potrzeby Google Chat za pomocą Gemini

1. Zanim zaczniesz

Czym są aplikacje Google Chat w Gemini?

Aplikacje Google Chat w Gemini:

  • Przenieś swoje usługi i zasoby do Google Chat, dzięki czemu użytkownicy będą mogli uzyskiwać informacje i podejmować działania bez opuszczania rozmowy.
  • Integracja z generatywnym modelem AI Gemini umożliwia im tworzenie lub wyszukiwanie danych, takich jak tekst czy obrazy, w określonym czasie, co usprawnia przepływy pracy.

Dlaczego warto zintegrować aplikacje Google Chat z Gemini?

Typowe przypadki użycia modeli generatywnej AI, takich jak Gemini, należą do tych kategorii:

  • Tworzenie i ulepszanie treści. Twórz teksty marketingowe, twórz posty do mediów społecznościowych, twórz realistyczne obrazy, komponuj muzykę lub pomóż w tworzeniu filmów.
  • Wyszukiwanie danych. Wyodrębnianie kluczowych wniosków z nieustrukturyzowanej bazy wiedzy, podsumowywanie długich tekstów, klasyfikowanie treści lub tłumaczenie języków z większą dokładnością i szybkością.
  • Rozmowa. Bierz udział w naturalnych, pouczających i kreatywnych rozmowach.

Możliwość zintegrowania tych funkcji bezpośrednio ze znanym interfejsem Google Chat to ogromne możliwości dla każdego, kto chce zwiększyć wygodę i produktywność użytkowników.

Wymagania wstępne

Twoje treści

W ramach tego ćwiczenia z programowania za pomocą Gemini utworzysz 3 aplikacje Google Chat, które obejmują 3 przypadki użycia opisane w poprzedniej sekcji.

Aplikacja do zarządzania problemami (tworzenie i ulepszanie treści)

Ta aplikacja:

  • Zarządzanie problemami od momentu utworzenia po zamknięcie konta za pomocą podstawowych interakcji, strony głównej aplikacji i uwierzytelniania aplikacji.
  • Monitoruje wiadomości i ułatwia integrację społeczną za pomocą widżetów związanych z wydarzeniami i akcesoriami.

Korzystając z Gemini, możesz:

  • Generowanie raportów o problemach na podstawie historii wiadomości i szczegółów problemu.
  • Klasyfikuj słowa niewykluczające w wiadomościach za pomocą promptów z ograniczonym dostępem.

Główne wykorzystywane technologie to Vertex AI, Gemini, Apps Script oraz interfejsy Google Workspace API (Admin, Chat, Dokumenty, Zdarzenia).

22efdecff4601417.png

2d127c63518673b2.png

9aea694937f2f3ed.png

Ta aplikacja korzysta z Gemini, aby rozumieć pytania i odpowiadać na nie w języku naturalnym oraz zwracać odwołania do źródeł z nieuporządkowanych danych.

Główne wykorzystywane technologie to agent magazynu danych Dialogflow CX, webhook Dialogflow CX, Google Cloud Functions i Gemini.

9468866bfe848bb8.png

Aplikacja do przesyłania opinii (rozmowa)

Ta aplikacja korzysta z Gemini do zbierania i przechowywania opinii z rozmowami w języku naturalnym.

Główne wykorzystywane technologie to agent Dialogflow CX, narzędzie Dialogflow CX, OpenAPI, Google Cloud Functions i Gemini.

99a7a0295f122f31.png

Czego się uczysz

  • Jak zintegrować aplikacje Google Chat z Gemini za pomocą Vertex AI.
  • Jak zintegrować aplikacje Google Chat z agentami Dialogflow CX.
  • Jak korzystać z najnowszych funkcji Google Chat: strony głównej aplikacji, wydarzeń Google Chat i widżetów akcesoriów.

Co jest potrzebne

2. Konfiguracja

Inicjowanie zasobów

W tej sekcji możesz uzyskać dostęp do poniższych zasobów i skonfigurować je w preferowanej przeglądarce internetowej.

Projekt Apps Script

W konsoli Apps Script wykonaj te czynności:

  1. Kliknij Ustawienia i włącz interfejs Google Apps Script API.

ea06c593b347b9d1.png

  1. Wybierz projekt.
  2. Kliknij Ustawienia projektu.
  3. Zaznacz pole wyboru Pokaż plik manifestu „appsscript.json” w edytorze.
  4. Zmień nazwę projektu na Chat Apps Gemini.

12c1485bd248b766.png

Projekt Google Cloud

W konsoli Google Cloud wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Menu />< > Interfejsy API i usługi > Ekran zgody OAuth > Edytuj aplikację, a następnie ustaw wartość Chat Apps Gemini w polu Nazwa aplikacji.

  1. Przejdź do konfiguracji interfejsu Google Chat API i ustaw Nazwę aplikacji i Opis na Chat Apps Gemini.

a71f040755da3b8b.png

Google Chat,

W Google Chat wykonaj te czynności:

  1. W razie potrzeby rozpocznij czat w aplikacji Google Chat.
  2. Wyślij wiadomość, np. Hello, aby sprawdzić, czy wszystko działa.

9625418251528ae9.png

Pobieranie kodu źródłowego i zasobów lokalnie

  1. Pobierz to repozytorium GitHub.

  1. W preferowanym środowisku programistycznym otwórz katalog apps-script/chat-apps-gemini, a następnie przejdź do tego samego katalogu w terminalu.

da9478df97c99194.png

Instalowanie i konfigurowanie clasp

Używamy clasp, aby łatwo edytować i przekazywać wersje kodu źródłowego ze środowiska lokalnego do projektu Apps Script.

  1. W środowisku lokalnym zainstaluj najnowsze wersje node, npm i clasp.
npm install -g @google/clasp
  1. Zaloguj się, używając swojego konta:
clasp login

8bc2434e6dc6f22a.png

Jeśli operacja się uda, w przeglądarce pojawi się podstawowy ekran potwierdzenia, a plik .clasprc.json z Twoimi danymi logowania klienta zostanie zaktualizowany. jego lokalizację znajdziesz w terminalu.

e1d833eb4d5b3a8f.png

3. Aplikacja 1: kompilacja

Zapoznaj się z pojęciami

Vertex AI

Vertex AI oferuje wszystko, czego potrzebujesz do tworzenia i używania generatywnej AI, w tym rozwiązań AI, kreatora agentów, ponad 130 modeli podstawowych i ujednoliconej platformy AI.

c9e9c7a1945b22ac.png

Gemini

Gemini to multimodalny LLM od Google dostępny przez Vertex AI. Pomaga ona ludziom uwolnić swój ludzki potencjał, dzięki czemu mogą rozwijać swoją wyobraźnię, poszerzać ciekawość i zwiększać produktywność.

Zaawansowana usługa czatu

Usługa zaawansowanego czatu umożliwia korzystanie z interfejsu Google Chat API w Apps Script. Dzięki temu skrypty mogą znajdować, tworzyć i modyfikować pokoje czatu, dodawać i usuwać użytkowników pokoi oraz czytać lub publikować wiadomości z tekstem, kartami, załącznikami i reakcjami.

Sprawdzanie architektury

8c9c7b7328a69ea6.png

Ta aplikacja Google Chat została utworzona przy użyciu Apps Script. Działa to w następujący sposób:

  1. Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
  2. Aplikacja, która została wdrożona w projekcie Apps Script i powiązana z projektem Google Cloud, przetwarza wiadomość.
  3. Aplikacja integruje się z interfejsami API Dokumentów Google i Google Chat.
  4. Aplikacja używa usługi właściwości do przechowywania danych we właściwościach skryptu.
  5. Aplikacja wysyła odpowiedź synchroniczną na czacie lub w pierwotnym pokoju.

Sprawdzanie procedury

Utwórz problem

7ca0e8ba3c8255bb.png

Rozwiązywanie problemów w specjalnym pokoju

51b47714c378a24b.png

Zamknij problem w specjalnym miejscu

89e50228deeab0f9.png

Sprawdzanie kodu źródłowego

Projekt Apps Script zawiera te skrypty:

  • Configuration: stałe do edycji w zależności od środowiska.
  • ChatApp: obsługuje zdarzenia interakcji w Google Chat, w tym wiadomości, kliknięcia kart, polecenia po ukośniku i okna.
  • Storage: funkcje użyteczności publicznej, które korzystają z usług nieruchomości.
  • ChatAppAuth: funkcje narzędziowe, które opierają się na uwierzytelnianiu w aplikacji Google Chat.
  • Docs: funkcje narzędziowe, które opierają się na Dokumentach Google.
  • VertexAi: funkcje narzędziowe, które bazują na Vertex AI.

Oto części, które są aktywnie używane podczas generowania dokumentów raportów z historią pokoju czatu i 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);
  ...
}

Aktualizowanie projektu Google Cloud

włączyć interfejsy API,

  1. W konsoli Google Cloud włącz interfejsy API Dokumentów Google, Google Admin SDK i Vertex AI:

  1. Kliknij Menu />< > Interfejsy API i usługi > Włączone interfejsy API i usługi, a następnie potwierdź, że interfejsy API są włączone.

Zainicjuj konto usługi

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Q” > Administracja > Konta usługi > + Utwórz konto usługi.

74cf57426419f39.png

  1. Ustaw Nazwę konta usługi na chat-app.
  2. Ustaw Opis konta usługi na Chat app auth.
  3. Kliknij Utwórz i kontynuuj.
  4. Kliknij Gotowe. Przekierujemy Cię na stronę Konta usługi i zobaczysz utworzone konto usługi.

ca0468f1f93990f9.png

  1. Wybierz nowo utworzone konto usługi.
  2. Kliknij kartę Klucze.
  3. Kliknij Dodaj klucz.
  4. Kliknij Utwórz nowy klucz.
  5. Wybierz JSON.
  6. Kliknij Utwórz.

9f7e6ea020978ab0.png

Okno zostanie zamknięte, a nowo utworzona para kluczy publiczny/prywatny zostanie automatycznie pobrana do środowiska lokalnego jako plik JSON. Jej zawartość możesz wykorzystać później podczas edytowania kodu źródłowego projektu Apps Script.

Aktualizowanie konfiguracji interfejsu Google Chat API

W konsoli Google Cloud wykonaj te czynności:

  1. Dodaj polecenie po ukośniku.
  2. Ustaw Nazwę na /create.
  3. Ustaw Identyfikator polecenia na 1.
  4. Ustaw Opis na Create a new issue.
  5. Zaznacz pole wyboru Otwiera okno.
  6. Dodaj kolejne polecenie po ukośniku.
  7. Ustaw Nazwę na /close.
  8. Ustaw Identyfikator polecenia na 2.
  9. Ustaw Opis na Close an issue.
  10. Kliknij Zapisz.

bee2e7b63659ab33.png

Aktualizowanie projektu Apps Script

  • Zmień bieżący katalog w terminalu lokalnym na issue-management/1-baseline. Zawiera kod źródłowy. Zanim wypchniesz kod źródłowy do projektu Apps Script, musisz skonfigurować kilka rzeczy.

Konfigurowanie kodu źródłowego

  1. Ustaw stałą JSON o nazwie CHAT_CREDENTIALS w pliku Configuration.js na treść pobranego wcześniej pliku klucza prywatnego.

d721f6bff73c5304.png

  1. W konsoli Google Cloud kliknij Menu Przypomnienie > Administracja > Ustawienia.

  1. Skopiuj identyfikator projektu.

82592fa0bd113469.png

  1. Ustaw w pliku Configuration.js stałą ciąg znaków o nazwie PROJECT_ID na identyfikator projektu.

383cee561130ceba

Skonfiguruj ustawienia aplikacji clasp

Aby zainicjować ustawienia clasp w celu przekazania kodu źródłowego do odpowiedniego projektu Apps Script, wykonaj te czynności:

  1. W konsoli Apps Script wybierz swój projekt.
  2. Kliknij Ustawienia projektu.
  3. W sekcji Identyfikatory kliknij Kopiuj.

20ea033b6de882c6.png

  1. W bieżącym katalogu utwórz plik .clasp.json.
  2. Zastąp <your-script-id> skopiowanym identyfikatorem.
  3. Skopiuj wynik do pliku .clasp.json.
  4. Zapisz plik .clasp.json.
{
  "scriptId": "<your-script-id>"
}

Kod źródłowy w trybie push

  • Uruchom to polecenie:
$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.

Wypróbuj to

  1. W Google Chat wyślij Hello! na czacie do aplikacji. Aplikacja nie odpowie, ale wyświetli się komunikat z prośbą o skonfigurowanie.

4c1fc68121dcffed.png

  1. Kliknij Skonfiguruj.
  2. Wybierz swoje konto Google.
  3. Uwierzytelnij.
  4. Sprawdź aplikację i zezwól na dostęp do niej.

4a2fd7ac5918bf1a.png

Jeśli operacja się uda, zobaczysz na stronie internetowej podstawowy ekran potwierdzenia oraz faktyczną odpowiedź aplikacji na pierwotną wiadomość.

acb9065568fe47d2.png

2d6ef9c62f47e082.png

  1. Wyślij kolejną wiadomość na czacie do aplikacji, używając polecenia po ukośniku /create.

be3f3c6eb0f929c1.png

  1. W oknie ustaw Tytuł na Issue Title 1.
  2. Ustaw Opis na problem Description 1.
  3. Kliknij Utwórz.

22efdecff4601417.png

Ta aplikacja:

  1. Zamyka okno.
  2. Tworzy pokój o tym samym tytule poświęcony nowemu numerowi.
  3. Dołącza do nowo utworzonego pokoju.
  4. Wysyła wiadomość z opisem problemu w nowo utworzonym pokoju.
  5. wyśle Ci wiadomość na czacie z linkiem do nowo utworzonego pokoju.

3253cec2392e281f.png

  1. W nowo utworzonym pokoju wyślij wiadomość z poleceniem po ukośniku /close i rozdzielczością, na przykład Not reproducible.

132cc4acfc10b98c.png

Ta aplikacja:

  1. Tworzy dokument do raportu w Dokumentach Google.
  2. Wysyła do pokoju przeznaczonego na dany problem wiadomość z linkiem do nowo utworzonego dokumentu raportu.

2d127c63518673b2.png

  1. Otwórz dokument raportu. Zawiera podstawowe informacje, historię i podsumowanie.

9aea694937f2f3ed.png

4. Opcjonalnie: aplikacja 1. Dodaj stronę główną aplikacji

Zapoznaj się z pojęciami

Strona główna aplikacji to karta z możliwością dostosowania. Jest ona wysyłana przez aplikację Google Chat do użytkownika, gdy otwiera on kartę Strona główna z poziomu czatu w aplikacji Google Chat. Zwykle służy do wyświetlania dokumentacji lub podsumowania aplikacji. Technicznie rzecz biorąc, istnieje specjalne zdarzenie do obsługiwania, które opiera się na tych samych podstawowych zasadach co wiadomości kart.

65f56f70f67a32e4.png

Sprawdzanie procedury

Zarządzanie problemami

10663f5fc107fb3f.png

Sprawdzanie kodu źródłowego

Musisz zmodyfikować projekt 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
  }}]}};
}

Aktualizowanie projektu Google Cloud

W konsoli Google Cloud wykonaj te czynności:

  1. W sekcji Funkcje interaktywne zaznacz pole wyboru Pomoc – strona główna aplikacji.

97159c1c69ca8303.png

W środowisku lokalnym wykonaj te czynności:

  1. Zmień bieżący katalog w terminalu na issue-management/2-app-home. Zawiera on kod źródłowy, którego musisz użyć.
  2. Skopiuj plik issue-management/1-baseline/.clasp.json do bieżącego katalogu.
  3. Skopiuj plik issue-management/1-baseline/Configuration.js do bieżącego katalogu, aby zastąpił istniejący.
  4. Uruchom to polecenie:
clasp push

Wypróbuj

W Google Chat wykonaj te czynności:

  1. Wyślij do aplikacji wiadomość na czacie za pomocą polecenia po ukośniku /create. Aplikacja otworzy okno dialogowe.
  2. Ustaw Tytuł na Issue Title 2.
  3. Ustaw Opis na problem Description 2.
  4. Kliknij Utwórz.

3b2a8690e758f965.png

  1. Wybierz kartę Strona główna w pokoju z aplikacją Google Chat. Zobaczysz szczegółowe informacje o utworzonych problemach.

ed8e32da0e6f2ac6.png

5. Opcjonalnie: aplikacja 1. Dodaj monitorowanie pokoju

Przejrzyj pojęcia

Pub/Sub

Pub/Sub to asynchroniczna i skalowalna usługa do przesyłania wiadomości, która oddziela usługi generujące wiadomości od usług przetwarzających te wiadomości. Pub/Sub umożliwia tworzenie systemów producentów i konsumentów zdarzeń nazywanych wydawcami i subskrybentami. Wydawcy komunikują się z subskrybentami asynchronicznie, transmitując zdarzenia, a nie za pomocą synchronicznych zdalnych wywołań procedur (RPC).

Wydawcy wysyłają zdarzenia do usługi Pub/Sub bez względu na sposób i czas przetwarzania tych zdarzeń. Pub/Sub będzie następnie dostarczać zdarzenia do wszystkich usług, które na nie reagują. W systemach komunikujących się za pomocą RPC wydawcy muszą poczekać na otrzymanie danych przez subskrybentów. Jednak asynchroniczna integracja w Pub/Sub zwiększa elastyczność i niezawodność całego systemu.

Temat: nazwany zasób reprezentujący kanał wiadomości. Zanim opublikujesz lub zasubskrybujesz temat, musisz go utworzyć.

Subskrypcja: aby otrzymywać wiadomości publikowane w danym temacie, musisz utworzyć subskrypcję do tego tematu. Subskrybent odbiera i przetwarza wiadomości opublikowane w temacie. Temat może mieć wiele subskrypcji, ale dana subskrypcja należy do jednego tematu.

Zdarzenia dotyczące Google Workspace

Zdarzenia Google Workspace odzwierciedlają zmiany w zasobach Google Workspace, na przykład czas ich tworzenia, aktualizacji lub usuwania. Aplikacje mogą subskrybować zasoby Google Workspace, aby asynchronicznie odbierać i przetwarzać odpowiednie zdarzenia.

7816e477b112bfb6.png

Interfejs Google Workspace Event API dostarcza zdarzenia do aplikacji przez subskrypcję:

  1. Aplikacja subskrybuje zasób w aplikacji Google Workspace, na przykład pokój.
  2. Zasób, którego subskrypcja została zmieniona przez aplikację.
  3. Aplikacja Google Workspace wysyła zdarzenie do tematu w Pub/Sub, który służy jako punkt końcowy powiadomień dla subskrypcji Google Workspace aplikacji. Zdarzenie zawiera informacje o zmianach w zasobie.
  4. Aplikacja przetwarza wiadomość Pub/Sub, która zawiera zdarzenie, i w razie potrzeby podejmuje odpowiednie działania.

Sprawdzanie procedury

Utwórz problem (aktualizacja)

6d7a9d7a68666a80.png

Rozwiązywanie problemu w specjalnym pokoju (aktualizacja)

17e60f052f222456.png

Zamykanie problemu w pokoju (aktualizacja)

742d490ea0b6fe3a.png

Przetwarzanie subskrypcji

de3017100dec6401.png

Sprawdzanie kodu źródłowego

Musisz zmodyfikować projekt 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);
}

Aktualizowanie projektu Google Cloud

włączyć interfejsy API,

  1. W konsoli Google Cloud włącz Zdarzenia Google Workspace i PubSub.

  1. Kliknij Menu />< > Interfejsy API i usługi > Włączone interfejsy API i usługi, a następnie potwierdź, że obie są włączone.

Rozpocznij subskrypcję

Aby publikować wszystkie zdarzenia w obszarze roboczym, musisz utworzyć i zasubskrybować temat Pub/Sub.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu />< > Pub/Sub > Tematy.

  1. Kliknij Utwórz temat.
  2. Ustaw Identyfikator tematu na workspace-events.
  3. Zaznacz pole wyboru Dodaj subskrypcję domyślną.
  4. Kliknij Utwórz.

b39f9a0aec7c9939.png

Aby przyznać dostęp do publikowania wiadomości Pub/Sub w nowo utworzonym temacie z Google Chat, wykonaj te czynności:

  1. Wybierz temat z listy.
  2. Wybierz kartę Uprawnienia.
  3. Dodaj chat-api-push@system.gserviceaccount.com do sekcji Nowe podmioty zabezpieczeń.
  4. W polu Rola wybierz Pub/Sub Publisher (Wydawca Pub/Sub).
  5. Kliknij Zapisz.

8d4016c37532503.png

Aktualizowanie projektu Apps Script

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz Menu ⋮ > Administracja > Ustawienia.

  1. Skopiuj identyfikator projektu.

82592fa0bd113469.png

W środowisku lokalnym wykonaj te czynności:

  1. Zmień bieżący katalog w terminalu na issue-management/3-message-monitoring. Zawiera on potrzebny Ci kod źródłowy.
  2. Ustaw stały ciąg znaków o nazwie PROJECT_ID w pliku Configuration.js na skopiowany identyfikator projektu.
  3. Ustaw stałą JSON o nazwie CHAT_CREDENTIALS w pliku Configuration.js na treść pobranego wcześniej pliku klucza prywatnego.
  4. Skopiuj plik issue-management/2-app-home/.clasp.json do bieżącego katalogu.
  5. Uruchom to polecenie:
clasp push

Wypróbuj

W Google Chat wykonaj te czynności:

  1. Wyślij do aplikacji wiadomość na czacie za pomocą polecenia po ukośniku /create. Aplikacja otworzy okno dialogowe.
  2. Ustaw Tytuł na Issue Title 3.
  3. Ustaw Opis na problem Description 3.
  4. Kliknij Utwórz.
  5. W nowo utworzonym pokoju wyślij kilka wiadomości na ten temat.
  6. Wyślij wiadomość, używając polecenia po ukośniku /close i rozdzielczości takiej jak Fixed.

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz Menu />< > Pub/Sub > Subskrypcje.

  1. Wybierz subskrypcję workspace-events-sub.
  2. Wybierz kartę Wiadomości.
  3. Kliknij Pobierz. Tabela zawiera wiadomości związane z wiadomościami wysłanymi przez Ciebie do nowo utworzonego pokoju.

82631c9792d83889.png

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Edytor.
  3. Wybierz plik WorkspaceEvent.gs.
  4. W sekcji Uruchom kliknij processSubscription.
  5. Kliknij Run.Z dziennika wykonywania możesz zobaczyć, że wiadomości zostały przetworzone.

c612e8fa2bd0a163.png

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz Menu />< > Pub/Sub > Subskrypcje.

  1. Wybierz subskrypcję workspace-events-sub.
  2. Wybierz kartę Wiadomości.
  3. Kliknij Pobierz. Tabela nie będzie już wyświetlać wiadomości związanych z wiadomościami wysłanymi przez Ciebie do nowo utworzonego pokoju.

e185454cac862a7b.png

  • W Google Chat w pokoju poświęconym 3 problemowi utworzonemu przez Ciebie za pomocą polecenia po ukośniku /create wyślij jeszcze kilka wiadomości na ten temat.

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz Menu />< > Pub/Sub > Subskrypcje.

  1. Wybierz subskrypcję workspace-events-sub.
  2. Wybierz kartę Wiadomości.
  3. Kliknij Pobierz. W tabeli nie są wyświetlane wiadomości związane z wiadomościami wysłanymi do nowo utworzonego pokoju.

6. Opcjonalnie: Aplikacja 1. Pomoc dotycząca integracji społecznej

Przejrzyj pojęcia

Podpowiedzi generatywnej AI to sztuka przygotowywania instrukcji lub pytań, które pokierują modelem generatywnej AI do określonego typu oczekiwanych wyników. Typową praktyką jest blokowanie odpowiedzi przez dodawanie reguł i warunków w promptach. Dzięki temu dane wyjściowe mogą być bezpieczne, trafne, spójne i zgodne z oczekiwaniami.

Sprawdzanie procedury

Przetwarzanie subskrypcji (aktualizacja)

780d0802f77dd180.png

Sprawdzanie kodu źródłowego

Musisz zmodyfikować projekt 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;
}

Aktualizowanie projektu Apps Script

W środowisku lokalnym wykonaj te czynności:

  1. Zmień bieżący katalog w terminalu na issue-management/4-inclusivity-help. Zawiera on potrzebny Ci kod źródłowy.
  2. Skopiuj plik issue-management/3-message-monitoring/.clasp.json do bieżącego katalogu.
  3. Skopiuj plik issue-management/3-message-monitoring/Configuration.js do bieżącego katalogu, aby zastąpił istniejący.
  4. Uruchom to polecenie:
clasp push

Wypróbuj

W Google Chat wykonaj te czynności:

  1. Wyślij do aplikacji wiadomość na czacie za pomocą polecenia po ukośniku /create. Aplikacja otworzy okno dialogowe.
  2. Ustaw Tytuł na Issue Title 4.
  3. Ustaw Opis na problem Description 4.
  4. Kliknij Utwórz.
  5. W nowo utworzonym pokoju wyślij It happened to me last week as well.

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Edytor.
  3. Wybierz plik WorkspaceEvent.gs.
  4. W sekcji Uruchom kliknij processSubscription.
  5. Kliknij Uruchom. Dziennik wykonywania zawiera informację, że wiadomości zostały przetworzone.

W Google Chat wykonaj te czynności:

  1. Zwróć uwagę, że w nowo utworzonym pokoju aplikacja nie wysłała żadnej pomocy dotyczącej integracji społecznej.
  2. W nowo utworzonym pokoju wyślij wiadomość: I had to add myself from the master to fix it.

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Edytor.
  3. Wybierz plik WorkspaceEvent.gs.
  4. W sekcji Uruchom kliknij processSubscription.
  5. Kliknij Uruchom. Dziennik wykonywania zawiera informację, że wiadomości zostały przetworzone. W Google Chat aplikacja wysłała wiadomość pomocy dotyczącą integracji społecznej w nowo utworzonym pokoju.

7936342847acbe2d.png

7. Opcjonalnie: Aplikacja 1. Dodaj preferencje

.

Przejrzyj pojęcia

Widżet akcesoriów to widżet bez obramowania dołączany u dołu wiadomości wysłanej przez aplikację. Zwykle jest on używany do szybkich reakcji użytkownika w konkretnym kontekście wiadomości. Technicznie rzecz biorąc, opiera się na tych samych podstawowych zasadach co przyciski kart.

eebe88238f6b13f.png

Sprawdzanie procedury

Pomoc dotycząca wyłączania integracji społecznej

1bb7a8592ee6221e.png

Sprawdzanie kodu źródłowego

Musisz zmodyfikować projekt 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
              }]
            }}
          }]}}]
        }, ...);
        ...
      }
      ...
    }
    ...
  }
  ...
}

Aktualizowanie projektu Apps Script

W środowisku lokalnym wykonaj te czynności:

  1. Zmień bieżący katalog w terminalu na issue-management/5-disable-help. Zawiera on potrzebny Ci kod źródłowy.
  2. Skopiuj plik issue-management/4-inclusivity-help/.clasp.json do bieżącego katalogu.
  3. Skopiuj plik issue-management/4-inclusivity-help/Configuration.js do bieżącego katalogu, aby zastąpił istniejący.
  4. Uruchom to polecenie:
clasp push

Wypróbuj

Wyłączanie pomocy

  • W Google Chat w pokoju przeznaczonym na czwarty problem utworzony przez Ciebie za pomocą polecenia po ukośniku /create wyślij wiadomość I had to add myself from the master to fix.

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Edytor.
  3. Wybierz plik WorkspaceEvent.gs.
  4. W sekcji Uruchom kliknij processSubscription.
  5. Kliknij Uruchom. Dziennik wykonywania zawiera informację, że wiadomości zostały przetworzone.

W Google Chat wykonaj te czynności:

  1. Zwróć uwagę, że aplikacja wysłała wiadomość informującą o integracji społecznej w pokoju poświęconym problemowi z widżetem z akcesoriami.
  2. Kliknij widżet akcesoriów, aby wyłączyć pomoc dotyczącą integracji społecznej.

de722cff1928dec9.png

Sprawdzanie wyłączenia

  • W Google Chat w pokoju przeznaczonym na czwarty problem utworzony przez Ciebie za pomocą polecenia po ukośniku /create wyślij wiadomość I had to add myself from the master to fix.

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij Edytor.
  3. Wybierz plik WorkspaceEvent.gs.
  4. W sekcji Uruchom kliknij processSubscription.
  5. Kliknij Uruchom. Dziennik wykonywania zawiera informację, że wiadomości zostały przetworzone. W Google Chat aplikacja nie wysłała wiadomości z pomocą promującą integrację społeczną w pokoju, w którym występował ten problem, ponieważ został on wyłączony.

347d659db53b73e9.png

8. Aplikacja 2: kompilacja

Zapoznaj się z pojęciami

Podstawy generatywnej AI

Chodzi o to, aby modele AI były bardziej oparte na faktach i wiarygodności przez łączenie ich z możliwymi do zweryfikowania źródłami wiedzy. Ta technika zapobiega wymyślaniu informacji przez AI i może sprawić, że odpowiedzi będą dopasowane do kontekstu i mniej uprzedzeń.

Język naturalny

Dowolny język używany przez ludzi w codziennej komunikacji, w przeciwieństwie do języków sztucznych lub komputerowych.

Cloud Storage,

Cloud Storage umożliwia przechowywanie i wyszukiwanie dowolnych ilości danych w dowolnym momencie na całym świecie. Można jej używać w różnych scenariuszach, takich jak wyświetlanie zawartości witryny, przechowywanie danych na potrzeby archiwizacji i odtwarzania awaryjnego lub dystrybucja dużych obiektów danych do użytkowników za pomocą bezpośredniego pobierania.

Magazyn danych Dialogflow CX

Dialogflow CX integruje się z magazynami danych, które są zbiorami witryn i dokumentów używanymi przez agenty magazynów danych do wyszukiwania odpowiedzi na pytania użytkowników na podstawie określonych danych. W przypadku danego pytania agent magazynu danych szuka odpowiedzi na podstawie danych źródłowych i podsumowuje wyniki w spójną odpowiedź. Zawiera również linki do źródeł odpowiedzi, aby użytkownik mógł uzyskać więcej informacji.

Sprawdzanie architektury

9d3342d12f3b4dda.png

Ta aplikacja Google Chat została stworzona na bazie Dialogflow CX i działa w następujący sposób:

  1. Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
  2. Aplikacja, która jest agentem Dialogflow CX i powiązana z projektem Google Cloud, przetwarza wiadomość.
  3. Aplikacja integruje się z magazynem danych znajdującym się w Cloud Storage.
  4. Aplikacja wysyła odpowiedź synchroniczną na czacie lub w pierwotnym pokoju.

Sprawdzanie przepływów pracy

Odpowiedz na pytanie

aad9fb5a7ca48956.png

Sprawdzanie kodu źródłowego

Jedynym źródłem, którego potrzebujesz, nie jest kod, ale dane służące do umocowania.

google-chat-overview.pdf

Zawiera nieuporządkowane informacje o aplikacjach Google Chat – wydrukowaną wersję strony ze strony dla deweloperów Google Workspace.

e9b91c4587b1a3a0.png

Zaktualizuj projekt Google Cloud

W konsoli Google Cloud wykonaj te czynności:

  1. włączyć interfejsy Dialogflow i Cloud Storage API;

  1. włączyć interfejs Vertex AI Agent Builder API;

  1. Kliknij Menu />< > Interfejsy API i usługi > Włączone interfejsy API i usługi, a następnie potwierdź, że wszystkie interfejsy API są włączone.

.

Tworzenie agenta magazynu danych Dialogflow CX

Inicjowanie zbierania danych

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu />< > Cloud Storage > Zasobniki.

4f15978ae9f1b687.png

  1. Kliknij Utwórz.
  2. Ustaw name na gchat-knowledge.
  3. Kliknij Utwórz.

6b38c6d4d2c41bba.png

  1. Wybierz zasobnik gchat-knowledge.
  2. Kliknij Prześlij pliki.
  3. Wybierz plik knowledge-app/grounding/google-chat-overview.pdf ze swojego środowiska lokalnego.

df89acb22e1762af.png

Utwórz aplikację

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Stanów Zjednoczonych > Kreator agentów > Aplikacje.

  1. Kliknij Nowa aplikacja.
  2. Wybierz typ czatu.

44276003074bcf14.png

  1. W polu Company name wpisz nazwę swojej firmy.
  2. Ustaw Agent name na knowledge.
  3. Kliknij Dalej.

c4fedfd7556f723b.png

  1. Kliknij Utwórz nowy magazyn danych.
  2. Wybierz Cloud Storage jako źródło danych.

6E2440ecf0f8f9bd.png

  1. Wybierz Plik.
  2. Kliknij Przeglądaj.
  3. Wybierz plik google-chat-overview.pdf.
  4. Kliknij Dalej.
  5. Ustaw nazwę magazynu danych na gchat-knowledge-ds.
  6. Kliknij Utwórz.

a675df7490b83900.png

  1. W tabeli wybierz magazyn danych gchat-knowledge-ds.
  2. Kliknij Utwórz.

f121d580771ed96.png

  1. Po kilku minutach kliknij Menu />< > Agent Builder > Aplikacje i zwróć uwagę, że aplikacja jest widoczna.

d929a7431dd84968.png

  1. Kliknij Menu />< > Kreator agentów > Magazyny danych.

  1. Kliknij magazyn danych gchat-knowledge-ds. Liczba dokumentów to 1, co oznacza, że są gotowe.

558319790a0accf2.png

Uzupełnianie i testowanie aplikacji

W konsoli Dialogflow CX wykonaj te czynności:

  1. wybrać projekt Google Cloud;
  2. Wybierz agenta wiedzy.

ca9b2fb4be92e8e4.png

  1. Wybierz Ustawienia agenta > Generatywna AI > Agent generatywny.
  2. Zmień model z Text Bison na Gemini Pro.
  3. Kliknij Zapisz.

68cc4713ec9b25a0.png

  1. Kliknij Testuj agenta.
  2. Wyślij What is Google Chat?. Pracownik obsługi klienta zareagował, wysyłając coś wartościowego.

8e3a2cb02469041a.png

Integracja aplikacji Google Chat

W konsoli Dialogflow CX wykonaj te czynności:

  1. wybrać projekt Google Cloud;
  2. W wierszu agenta wiedzy kliknij 1e7ede7abae4aa3c.png > Kopiuj nazwę.

e19f61185158110d.png

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz konfigurację interfejsu Google Chat API.

  1. W sekcji Ustawienia połączenia wybierz Dialogflow.
  2. W sekcji Ustawienia Dialogflow wybierz Dialogflow CX.
  3. W polu Agent lub Environment resource name (Nazwa zasobu środowiska lub agenta) ustaw skopiowaną nazwę agenta.
  4. Usuń te 2 polecenia po ukośniku.

505ff39a50880904.png

  1. W Google Chat wyślij wiadomość o adresie What is Google Chat? na czacie do aplikacji Google Chat. Pracownik obsługi klienta odpowie coś istotnego.

abda9e43b81fb0ea.png

9. Opcjonalnie: aplikacja 2. Dodawanie źródeł

Zapoznaj się z pojęciami

webflow CX,

Usługa hostująca logikę biznesową lub wywołująca inne usługi. Podczas sesji Dialogflow CX webhooki mogą używać danych wyodrębnionych przez przetwarzanie języka naturalnego do generowania dynamicznych odpowiedzi, weryfikowania zebranych danych lub wywoływania działań w backendzie.

Funkcje w Cloud Functions

Cloud Functions doskonale nadaje się do tworzenia bezserwerowych backendów, przetwarzania danych w czasie rzeczywistym i tworzenia inteligentnych aplikacji. Nie ma serwerów do obsługi administracyjnej, zarządzania, instalowania poprawek ani aktualizowania. Są one automatycznie skalowane, mają wysoką dostępność i odporność na awarie.

Sprawdzanie przepływów pracy

Odpowiedz na pytanie (aktualizacja)

92767c07c7b252aa.png

Sprawdzanie kodu źródłowego

Jedyny kod źródłowy, którego potrzebujesz, to funkcja dostosowywania odpowiedzi agenta do wiadomości w Google Chat. Jest używany jako 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
          }}]
        }]}
      }]
    }}]
  }});
});

Aktualizowanie projektu Google Cloud

W konsoli Google Cloud wykonaj te czynności:

  1. Włącz interfejsy Cloud Build API, Cloud Functions, Cloud Logging, Artifact Registry API i Cloud Run API.

  1. Kliknij Menu />< > Interfejsy API i usługi > Włączone interfejsy API i usługi, a następnie potwierdź, że interfejsy API są włączone.

Aktualizowanie agenta magazynu danych Dialogflow CX

Musisz wdrożyć funkcję w Cloud Functions i zaktualizować webhooka Dialogflow CX, aby w miarę możliwości aktywować go w wielu źródłach.

Zwracanie wielu źródeł

Domyślnie nowy agent magazynu danych zwraca maksymalnie 1 źródło, ale możesz zmienić ich liczbę.

W konsoli Dialogflow CX wykonaj te czynności:

  1. wybrać projekt Google Cloud;
  2. Wybierz agenta wiedzy.
  3. Wybierz Strona startowa.
  4. Wybierz Edytuj magazyny danych.
  5. W sekcji Odpowiedzi agenta ustaw Opcje odpowiedzi magazynu danych na 5.
  6. Kliknij Zapisz.

f5932d03057df645.png

Inicjowanie funkcji w Cloud Functions

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu &#9776 > Cloud Functions.

  1. Kliknij Utwórz funkcję.
  2. W sekcji Podstawy ustaw name na function-1.
  3. W sekcji Uwierzytelnianie zaznacz opcję Zezwalaj na nieuwierzytelnione wywołania.
  4. W sekcji Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń ustaw Maksymalną liczbę instancji na 3.
  5. Kliknij Dalej.

bd3790a9285f9c07.png

  1. Ustaw Punkt wejścia na agent-response-adapter.
  2. Zastąp zawartość domyślną plikami z katalogu knowledge-app/agent-response-adapter.
  3. Kliknij Wdróż.

b379bb8ca0fc1079.png

  1. Skopiuj adres URL i odczekaj kilka minut na wdrożenie funkcji.

eaae08cf048b9b1c.png

Rozpocznij webhooka

Musisz skonfigurować agenta Dialogflow CX tak, aby używać webhooka, który uruchamia nowo wdrożoną funkcję.

W konsoli Dialogflow CX wykonaj te czynności:

  1. wybrać projekt Google Cloud;
  2. Wybierz agenta wiedzy.
  3. Kliknij Zarządzaj > Webhooki > Utwórz.
  4. Ustaw Wyświetlaną nazwę na Google Chat Response Adapter.
  5. W polu Adres URL webhooka ustaw skopiowany wcześniej adres URL.
  6. Kliknij Zapisz.

5f3c6804d52b87c1.png

  1. Kliknij Kompiluj.
  2. Wybierz Strona startowa.
  3. Wybierz Edytuj magazyny danych.
  4. W sekcji Ustawienia webhooka kliknij przełącznik Włącz webhooka.
  5. Wybierz Google Chat Response Adapter for Webhook (Adapter odpowiedzi Google Chat do webhooka).
  6. Ustaw tag na arbitrary_tag.
  7. Kliknij Zapisz.

442fcaaec9b8f2e3.png

Aplikacja testowa

  • W Google Chat wyślij What is Google Chat? na czacie do aplikacji Google Chat. Pracownik obsługi klienta udzieli odpowiedzi, wysyłając wiadomość i kartę ze źródłami (jeśli są dostępne).

9468866bfe848bb8.png

10. Aplikacja 3: kompilacja

Zapoznaj się z pojęciami

Interakcje z rozmową

Obejmuje to wymianę informacji i idei między dwiema lub większą liczbą osób w języku naturalnym. Odnosi się to do interfejsów technicznych, które często bazują na bezstanowych, wysoce uporządkowanych i nietolerancyjnych wymiany danych.

Specyfikacja OpenAPI

Zapewnia spójne metody przekazywania informacji na każdym etapie cyklu życia interfejsu API. Jest to język specyfikacji interfejsów API HTTP, który definiuje strukturę i składnię w sposób niepowiązany z językiem programowania, w którym został utworzony interfejs API. Specyfikacje interfejsu API są zwykle napisane w formacie YAML lub JSON, co umożliwia łatwe udostępnianie i korzystanie ze specyfikacji.

Agent Dialogflow CX

Podstawowy element składowy aplikacji agentów. Aplikacja agenta ma zwykle wielu agentów, z których każdy jest skonfigurowany do wykonywania konkretnych zadań. Dane agenta są przekazywane do LLM, dzięki czemu zawierają informacje potrzebne do odpowiadania na pytania i wykonywania zadań. Każdy agent może dostarczać informacje, wysyłać zapytania do usług zewnętrznych lub odroczyć obsługę rozmów do procesu Dialogflow CX lub innego agenta do obsługi podzadań.

Narzędzie Dialogflow CX

Narzędzia służą do łączenia aplikacji agentów z systemami zewnętrznymi. Systemy te mogą poszerzać wiedzę o aplikacjach agentów i umożliwiać im efektywne wykonywanie złożonych zadań.

Sprawdzanie architektury

9d3342d12f3b4dda.png

Ta aplikacja Google Chat została stworzona na bazie Dialogflow CX i działa w następujący sposób:

  1. Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
  2. Aplikacja, która jest agentem Dialogflow CX i powiązana z projektem Google Cloud, przetwarza wiadomość.
  3. Aplikacja integruje się z agentem.
  4. Aplikacja wysyła odpowiedź synchroniczną na czacie lub w pierwotnym pokoju.

Sprawdzanie przepływów pracy

Zbieranie opinii

a67a5b8b513bfc2c.png

Sprawdzanie kodu źródłowego

Jedyny potrzebny kod źródłowy to funkcja imitująca usługę backendu, której agent używa jako narzędzia.

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

Zainicjuj przykładową usługę backendu

Wdrażasz funkcję w Cloud Functions, aby symulować usługę backendu, którą aplikacja agenta Dialogflow CX potrzebuje do zintegrowania i wywołania jako narzędzia.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu &#9776 > Cloud Functions.

  1. Kliknij Utwórz funkcję.
  2. W sekcji Podstawy ustaw name na function-2.
  3. W sekcji Uwierzytelnianie wybierz opcję Zezwalaj na nieuwierzytelnione wywołania.
  4. W sekcji Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń ustaw Maksymalną liczbę instancji na 3.
  5. Kliknij Dalej.

e8cf0ee7441bf634.png

  1. Ustaw Punkt wejścia na feedback-app-backend.
  2. Zastąp zawartość domyślną plikami z katalogu feedback-app.
  3. Kliknij Wdróż.

bdb5cf9f503aa7f6.png

  1. Skopiuj adres URL i odczekaj kilka minut na wdrożenie funkcji.

Tworzenie aplikacji agenta Dialogflow CX

Utwórz aplikację

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Stanów Zjednoczonych > Kreator agentów > Aplikacje.

  1. Kliknij Nowa aplikacja.
  2. Wybierz Agent.
  3. Ustaw Wyświetlaną nazwę na Feedback App.
  4. Kliknij Utwórz.

7ef3dbacee96c5aa.png

Uruchom narzędzie

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Stanów Zjednoczonych > Kreator agentów > Aplikacje.

  1. Wybierz agenta Opinia na temat aplikacji.
  2. Kliknij Narzędzia > + Utwórz.
  3. Ustaw Nazwę na review.
  4. Wybierz OpenAPI.
  5. Ustaw dla parametru description taką wartość:
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. Zastąp $URL w pliku feedback-app/service-openapi.yaml adresem URL, który został wcześniej skopiowany.
  2. W polu YAML Schema ustaw edytowaną zawartość pliku feedback-app/service-openapi.yaml.
  3. Kliknij Zapisz.

58085d6d56b603f7.png

Inicjowanie agenta

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Stanów Zjednoczonych > Kreator agentów > Aplikacje.

  1. Wybierz agenta Opinia na temat aplikacji.
  2. Wybierz Agents > Default Generative Agent (Agenty > Domyślny agent generatywny).
  3. Ustaw Nazwa agenta na Feedback collector.
  4. Ustaw dla parametru goal tę wartość:
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. Ustaw instructions na taką wartość:
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. Kliknij Zapisz.

ebee7fdfa826b487.png

Aplikacja testowa

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu Stanów Zjednoczonych > Kreator agentów > Aplikacje.

  1. Wybierz agenta Opinia na temat aplikacji.
  2. Otwórz Podgląd agenta.
  3. W sekcji Przedstawiciel wybierz Zbieranie opinii.
  4. W sekcji Wybierz model generatywny wybierz gemini-pro.
  5. Aby rozpocząć, wyślij wiadomość o treści Hello!.

90ca8cb7b2c1cb4b.png

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu &#9776 > Cloud Functions.

  1. Wybierz funkcja-2 > Dzienniki. W niektórych logach jako element wywołujący wyświetla się Google-Dialogflow.

48bfdf1788004d18.png

Zintegruj aplikację Google Chat

W konsoli Dialogflow CX wykonaj te czynności:

  1. wybrać projekt Google Cloud;
  2. Kliknij menu czynności agenta Feedback App.
  3. Kliknij Skopiuj nazwę.

W konsoli Google Cloud wykonaj te czynności:

  1. Otwórz konfigurację Google Chat API.

  1. W polu Agent lub Environment resource name (Nazwa zasobu środowiska lub agenta) ustaw wcześniej skopiowaną nazwę agenta.

df16619a1cb85cf8.png

  • W Google Chat, aby rozpocząć, wyślij Hello! na czacie do aplikacji Google Chat. Agent odpowiada podobnie do testu z konsoli Dialogflow CX.

99a7a0295f122f31.png

11. Czyszczenie danych

Usuwanie projektu Google Cloud

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym ćwiczeniu w Codelabs, zalecamy usunięcie projektu Google Cloud.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu &#9776 > Administracja > Ustawienia.

  1. Kliknij Wyłącz.
  2. Wpisz identyfikator projektu.
  3. Kliknij Wyłącz mimo to.

407699a4e03afea6.png

Usuń projekt Apps Script

Zalecamy też usunięcie projektu Apps Script.

W konsoli Apps Script wykonaj te czynności:

  1. Wybierz projekt.
  2. Kliknij menu czynności.
  3. Kliknij Usuń.

fa3a42d7d2201eb9.png

12. Gratulacje

Gratulacje! Udało Ci się utworzyć aplikacje Google Chat razem z Gemini.

Co dalej?

W tym ćwiczeniu zaprezentowaliśmy tylko proste przypadki użycia, ale w swoich aplikacjach do obsługi Google Chat możesz też zastosować wiele dodatkowych obszarów, np.:

  • Integracja z innymi modelami generatywnej AI, w tym z niestandardowymi.
  • Możesz obsługiwać inne typy multimediów, np. dźwięk, obrazy i filmy.
  • Używaj multimodalności.
  • Korzystaj z dłuższych okien kontekstu i pętli informacji zwrotnych.
  • Publikuj w Marketplace aplikacje Google Chat gotowe do wykorzystania w środowisku produkcyjnym. Istnieje wiele zasobów dla programistów, takich jak filmy w YouTube, witryny z dokumentacją, przykłady kodu i samouczki.
  • Włącz Google Chat w swojej organizacji. Funkcja trybu importowania ułatwia rozpoczęcie pracy.

Więcej informacji