Создавайте приложения для Google Chat с помощью Gemini

1. Прежде чем начать

Что такое приложения Google Chat с Gemini?

Приложения Google Chat с Gemini выполняют следующие действия:

  • Перенесите свои услуги и ресурсы в Google Chat, что позволит пользователям получать информацию и предпринимать действия, не выходя из разговора.
  • Интегрируйтесь с генеративной моделью искусственного интеллекта Gemini, чтобы они могли создавать или искать данные, такие как текст или изображения, в определенное время, чтобы оптимизировать ваши рабочие процессы.

Зачем интегрировать приложения Google Chat с Gemini?

Типичные варианты использования моделей генеративного ИИ, таких как Gemini, попадают в следующие категории:

  • Создание и улучшение контента . Создавайте маркетинговые тексты, публикуйте посты в социальных сетях, создавайте реалистичные изображения, сочиняйте музыку или помогайте в создании видеоконтента.
  • Поиск данных . Извлекайте ключевые идеи из неструктурированной базы знаний, суммируйте длинные тексты, классифицируйте содержимое или переводите языки с повышенной точностью и скоростью.
  • Беседа . Участвуйте в естественных, информативных и творческих беседах.

Возможность интегрировать эти возможности непосредственно в знакомый интерфейс Google Chat — это огромная возможность для всех, кто хочет улучшить качество обслуживания и производительность своих пользователей.

Предварительные условия

Что вы строите

В этой лаборатории кода вы создадите три приложения Google Chat с помощью Gemini, чтобы охватить три варианта использования, представленные в предыдущем разделе.

Приложение для управления проблемами (создание и улучшение контента)

Это приложение делает следующее:

  • Управляет проблемами от создания до закрытия с помощью базовых взаимодействий, домашней страницы приложения и аутентификации приложения.
  • Отслеживает сообщения и предоставляет помощь с помощью событий и дополнительных виджетов.

Вы используете Gemini, чтобы сделать следующее:

  • Создавайте отчеты о проблемах на основе истории сообщений и подробностей о проблемах.
  • Классифицируйте невключающие слова в сообщениях с помощью закрытых подсказок.

Основными используемыми технологиями являются Vertex AI, Gemini, Apps Script и API Google Workspace (Администратор, Чат, Документы, События).

22efdecff4601417.png

2d127c63518673b2.png

9aea694937f2f3ed.png

Это приложение использует Gemini для понимания и ответа на вопросы на естественном языке, а также для возврата ссылок на источники из неструктурированных данных.

Основными используемыми технологиями являются агент хранилища данных Dialogflow CX, вебхук Dialogflow CX, Google Cloud Functions и Gemini.

9468866bfe848bb8.png

Приложение обратной связи (разговор)

Это приложение использует Gemini для сбора и хранения отзывов с диалогами на естественном языке.

Основными используемыми технологиями являются агент 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 выполните следующие действия:

  1. Нажмите «Настройки» , а затем включите API сценариев Google Apps.

ea06c593b347b9d1.png

  1. Выберите свой проект.
  2. Нажмите «Настройки проекта» .
  3. Установите флажок «Показать файл манифеста 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 Чат

В Google Chat выполните следующие действия:

  1. При необходимости начните чат с помощью приложения Google Chat.
  2. Отправьте сообщение, например Hello , чтобы убедиться, что оно работает.

9625418251528ae9.png

Загрузите исходный код и ресурсы локально

  1. Загрузите этот репозиторий GitHub .

  1. В предпочитаемой вами среде разработки откройте каталог apps-script/chat-apps-gemini , а затем перейдите в тот же каталог в своем терминале.

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 предлагает все необходимое для создания и использования генеративного ИИ, включая решения ИИ, конструктор агентов, более 130 базовых моделей и унифицированную платформу ИИ.

c9e9c7a1945b22ac.png

Близнецы

Gemini — это мультимодальная программа LLM от Google, доступная через Vertex AI. Это помогает людям раскрыть свой человеческий потенциал, чтобы они могли расширить свое воображение, расширить свое любопытство и повысить свою продуктивность.

Расширенный чат

Служба расширенного чата позволяет использовать API Google Chat в скриптах приложений. Это позволяет сценариям находить, создавать и изменять пространства чата, добавлять или удалять участников в пространствах, а также читать или публиковать сообщения с текстом, карточками, вложениями и реакциями.

Обзор архитектуры

8c9c7b7328a69ea6.png

Это приложение Google Chat создано с помощью Apps Script. Это работает следующим образом:

  1. Пользователь отправляет сообщение в приложение либо в личном сообщении, либо в пространстве.
  2. Приложение, реализованное в проекте Apps Script и связанное с проектом Google Cloud, обрабатывает сообщение.
  3. Приложение интегрируется с API Google Docs и Google Chat.
  4. Приложение использует службу свойств для сохранения данных в свойствах скрипта.
  5. Приложение отправляет синхронный ответ либо в прямом сообщении, либо в исходном пространстве.

Обзор потоков

Создать задачу

7ca0e8ba3c8255bb.png

Устранение неполадок из выделенного пространства

51b47714c378a24b.png

Закрыть проблему из выделенного места

89e50228deeab0f9.png

Просмотрите исходный код

Проект Apps Script содержит следующие сценарии:

  • Configuration : константы для редактирования в зависимости от среды.
  • ChatApp : обрабатывает события взаимодействия с Google Chat, включая сообщения, щелчки карточек, команды с косой чертой и диалоговые окна.
  • 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",
  ...
]

Конфигурация.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;
}

Документы.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 включите Google Docs , Google Admin SDK и API 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.

Обновите конфигурацию API Google Chat

В консоли 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

Обновить проект скрипта приложений

  • Измените текущий каталог в локальном терминале на issue-management/1-baseline . Он содержит исходный код. Прежде чем отправлять исходный код в проект Apps Script, вам необходимо настроить несколько вещей.

Настроить исходный код

  1. Задайте для константы JSON с именем CHAT_CREDENTIALS в файле Configuration.js содержимое файла закрытого ключа, которое вы скачали ранее.

d721f6bff73c5304.png

  1. В консоли Google Cloud нажмите Меню ☰ > 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. В диалоговом окне установите для параметра Title значение Issue Title 1 .
  2. Установите для описания значение Description 1 .
  3. Нажмите Создать .

22efdecff4601417.png

Приложение делает следующее:

  1. Закрывает диалог.
  2. Создает пространство, посвященное вновь созданной проблеме с тем же названием.
  3. Присоединяется к вновь созданному пространству.
  4. Отправляет сообщение с описанием проблемы во вновь созданном пространстве.
  5. Отправляет вам прямое сообщение со ссылкой на вновь созданное пространство.

3253cec2392e281f.png

  1. Во вновь созданном пространстве отправьте сообщение с помощью косой черты /close и разрешением, например « Not reproducible .

132cc4acfc10b98c.png

Приложение делает следующее:

  1. Создает документ отчета в Google Docs.
  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 позволяет создавать системы производителей и потребителей событий, называемые издателями и подписчиками . Издатели взаимодействуют с подписчиками асинхронно посредством широковещательной передачи событий, а не посредством синхронных удаленных вызовов процедур (RPC).

Издатели отправляют события в службу Pub/Sub независимо от того, как и когда эти события должны обрабатываться. Затем Pub/Sub доставляет события всем службам, которые на них реагируют. В системах, взаимодействующих через RPC, издатели должны ждать, пока подписчики получат данные. Однако асинхронная интеграция в Pub/Sub повышает гибкость и надежность всей системы.

Тема : именованный ресурс, представляющий поток сообщений. Вы должны создать тему, прежде чем опубликовать ее или подписаться на нее.

Подписка : чтобы получать сообщения, опубликованные в теме, необходимо создать подписку на эту тему. Клиент-подписчик получает и обрабатывает сообщения, опубликованные в теме. У темы может быть несколько подписок, но каждая подписка принадлежит одной теме.

Мероприятия Google Workspace

События Google Workspace представляют собой изменения в ресурсах Google Workspace, например, когда ресурсы создаются, обновляются или удаляются. Приложения могут подписываться на ресурсы Google Workspace, чтобы асинхронно получать и обрабатывать соответствующие события.

7816e477b112bfb6.png

Вот как API событий Google Workspace доставляет события в приложение через подписку:

  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"
  }
  ...
]

Конфигурация.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);
  ...
}

Хранилище.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 Events и PubSub.

  1. Нажмите Меню ☰ > API и службы > Включенные API и службы , а затем подтвердите, что оба включены.

Начать подписку

Вам необходимо создать тему Pub/Sub и подписаться на нее, чтобы публиковать все события рабочей области.

В консоли Google Cloud выполните следующие действия:

  1. Откройте Меню ☰ > Публикация/подписка > Темы .

  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

Обновить проект скрипта приложений

В консоли 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. В недавно созданном пространстве отправьте несколько сообщений, в которых обсуждается проблема.
  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 в пространстве, посвященном третьей проблеме, которую вы создали с помощью команды /create , отправьте еще несколько сообщений, в которых обсуждается эта проблема.

В консоли Google Cloud выполните следующие действия:

  1. Откройте Меню ☰ > Pub/Sub > Подписки .

  1. Выберите подписку workspace-events-sub .
  2. Выберите вкладку «Сообщения» .
  3. Нажмите «Потянуть» . В таблице не отображаются сообщения, связанные с тем, что вы отправили во вновь созданное пространство.

6. Необязательно: Приложение 1: добавьте справку по инклюзивности.

Обзор концепций

Подсказки поколения ИИ — это искусство создания инструкций или вопросов, которые направляют генеративную модель ИИ к конкретному типу желаемого результата. Обычной практикой является блокирование ответов путем добавления правил и условий в подсказки. Это может помочь сделать результаты безопасными, актуальными, последовательными и соответствующими ожиданиям.

Обзор потоков

Обработка подписок (обновление)

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

Обновить проект скрипта приложений

В вашей локальной среде выполните следующие действия:

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

Хранилище.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
              }]
            }}
          }]}}]
        }, ...);
        ...
      }
      ...
    }
    ...
  }
  ...
}

Обновить проект скрипта приложений

В вашей локальной среде выполните следующие действия:

  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 в пространстве, посвященном четвертой проблеме, которую вы создали с помощью косой черты /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 в пространстве, посвященном четвертой проблеме, которую вы создали с помощью косой черты /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: Сборка

Обзор концепций

Заземление поколения ИИ

Речь идет о том, чтобы сделать модели ИИ более реалистичными и надежными, подключив их к поддающимся проверке источникам знаний. Этот метод помогает предотвратить выдумывание информации ИИ и может помочь сделать ответы контекстуально релевантными и менее предвзятыми.

Естественный язык

Любой язык, на котором говорят или пишут люди для повседневного общения, в отличие от искусственных или компьютерных языков.

Облачное хранилище

Облачное хранилище позволяет хранить и извлекать любой объем данных в любое время по всему миру. Его можно использовать для различных сценариев, включая обслуживание контента веб-сайта, хранение данных для архивирования и аварийного восстановления или распространение больших объектов данных среди пользователей посредством прямой загрузки.

Хранилище данных Dialogflow CX

Dialogflow CX интегрируется с хранилищами данных , которые представляют собой коллекции веб-сайтов и документов, используемые агентами хранилища данных для поиска ответов на вопросы конечных пользователей на основе конкретных данных. На заданный вопрос агент хранилища данных ищет ответ в заданном исходном контенте и обобщает результаты в последовательный ответ. Он также предоставляет вспомогательные ссылки на источники ответа, чтобы конечный пользователь мог узнать больше.

Обзор архитектуры

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. Включите API-интерфейсы Dialogflow и Cloud Storage.

  1. Включите API Vertex AI Agent Builder.

  1. Нажмите Меню ☰ > API и службы > Включенные API и службы , а затем убедитесь, что все APIS включены.

.

Создание агента хранилища данных Dialogflow CX

Инициировать данные знаний

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰ > Облачное хранилище > Ведра .

4f15978ae9f1b687.png

  1. Нажмите Создать .
  2. Установите имя gchat-knowledge .
  3. Нажмите Создать .

6b38c6d4d2c41bba.png

  1. Выберите сегмент gchat-knowledge .
  2. Нажмите Загрузить файлы .
  3. Выберите файл knowledge-app/grounding/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. Нажмите Создать .

а675df7490b83900.png

  1. Выберите хранилище данных gchat-knowledge-ds в таблице.
  2. Нажмите Создать .

f121d580771ed96.png

  1. Через пару минут нажмите «Меню ☰» > «Конструктор агентов» > «Приложения» и обратите внимание, что вы видите приложение.

d929a7431dd84968.png

  1. Нажмите Меню ☰ > Конструктор агентов > Хранилища данных .

  1. Щелкните хранилище данных gchat-knowledge-ds . Количество документов — 1 , что означает, что он готов.

558319790a0accf2.png

Полное и протестированное приложение

В консоли Dialogflow CX выполните следующие действия:

  1. Выберите свой проект Google Cloud.
  2. Выберите агента знаний .

ca9b2fb4be92e8e4.png

  1. Выберите Настройки агента > Генеративный ИИ > Генеративный агент .
  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. Перейдите к настройке API Google Chat.

  1. В разделе «Настройки подключения» выберите «Dialogflow» .
  2. В настройках Dialogflow выберите Dialogflow CX .
  3. Задайте для имени ресурса агента или среды имя агента, которое вы скопировали.
  4. Удалите две косые черты.

505ff39a50880904.png

  1. В Google Chat отправьте сообщение What is Google Chat? в прямом сообщении в приложении Google Chat. Агент отвечает чем-то значимым.

abda9e43b81fb0ea.png

9. Необязательно: Приложение 2: добавьте источники.

Обзор концепций

Вебхук Dialogflow CX

Служба, которая размещает бизнес-логику или вызывает другие службы. Во время сеанса Dialogflow CX веб-перехватчики могут полагаться на данные, извлеченные в результате обработки естественного языка, для генерации динамических ответов, проверки собранных данных или запуска действий на серверной стороне.

Облачные функции

Облачные функции отлично подходят для создания бессерверных серверных частей, обработки данных в реальном времени и создания интеллектуальных приложений. Нет серверов, которые нужно было бы предоставлять, управлять, исправлять или обновлять. Они автоматически масштабируются, отличаются высокой доступностью и отказоустойчивостью.

Обзор потоков

Ответ на вопрос (обновление)

92767c07c7b252aa.png

Просмотрите исходный код

Единственный исходный код, который вам нужен, — это функция адаптации ответов агента к сообщениям Google Chat. Он используется как вебхук.

пакет.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. Включите API-интерфейсы Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry и Cloud Run.

  1. Нажмите Меню ☰ > API и службы > Включенные API и службы , а затем подтвердите, что API включены.

Обновление агента хранилища данных Dialogflow CX

Вам необходимо развернуть облачную функцию и обновить веб-хук Dialogflow CX, чтобы по возможности запускать ее из нескольких источников.

Вернуть несколько источников

По умолчанию новый агент хранилища данных возвращает максимум один источник, но вы можете изменить его на большее количество.

В консоли Dialogflow CX выполните следующие действия:

  1. Выберите свой проект Google Cloud.
  2. Выберите агента знаний .
  3. Выберите Стартовая страница .
  4. Выберите Редактировать хранилища данных .
  5. В разделе «Ответы агента» установите для параметра «Параметры ответа хранилища данных» значение 5 .
  6. Нажмите Сохранить .

f5932d03057df645.png

Запустить облачную функцию

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰ > Функции облака .

  1. Нажмите « Создать функцию» .
  2. В разделе «Основы» установите для имени значение function-1 .
  3. В разделе «Аутентификация» выберите переключатель «Разрешить неаутентифицированные вызовы» .
  4. В разделе «Среда выполнения, сборка, подключения и параметры безопасности» установите для параметра «Максимальное количество экземпляров» значение 3 .
  5. Нажмите "Далее .

bd3790a9285f9c07.png

  1. Установите точку входа на agent-response-adapter .
  2. Замените содержимое по умолчанию файлами, расположенными в каталоге knowledge-app/agent-response-adapter .
  3. Нажмите «Развернуть» .

b379bb8ca0fc1079.png

  1. Скопируйте URL-адрес и подождите пару минут, пока функция развернется.

eaae08cf048b9b1c.png

Запустить вебхук

Вам необходимо настроить агент Dialogflow CX для использования веб-перехватчика, который запускает вновь развернутую функцию.

В консоли 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 для Webhook .
  6. Установите тег в arbitrary_tag .
  7. Нажмите Сохранить .

442fcaaec9b8f2e3.png

Тестовое приложение

  • В Google Chat отправьте сообщение What is Google Chat? в прямом сообщении в приложении Google Chat. Агент отвечает чем-то осмысленным и карточкой с источниками, если таковые имеются.

9468866bfe848bb8.png

10. Приложение 3: Сборка

Обзор концепций

Разговорное взаимодействие

Это двусторонний обмен информацией или идеями между двумя или более людьми посредством естественного языка. Это контрастирует с техническими интерфейсами, которые часто полагаются на бездействие, высоко структурированные и нетерпимые обмены.

Спецификация OpenAPI

Он обеспечивает последовательное средство для переноса информации на каждом этапе жизненного цикла API. Это язык спецификации для HTTP API, который определяет структуру и синтаксис таким образом, который не привязан к языку программирования, на котором создан API. Спецификации API обычно пишутся в YAML или JSON, что позволяет легко обмениваться и использовать спецификацию.

Dialogflow CX Agent

Основной строительный блок приложений агента . Приложение агента обычно имеет много агентов , где каждый агент определяется для выполнения конкретных задач. Данные агента предоставляются LLM, поэтому у него есть информация, необходимая для ответа на вопросы и выполнение задач. Каждый агент может предоставить информацию, отправлять запросы на внешние службы или отложить обработку разговоров на поток диалога CX или другого агента для обработки подзадач.

Dialogflow CX Tool

Инструменты используются для подключения приложений агента к внешним системам. Эти системы могут увеличить знание приложений агента и дать им возможность эффективно выполнять сложные задачи.

Обзор архитектура

9d3342d12f3b4dda.png

Это приложение Google Chat создано с помощью Dialogflow CX и работает следующим образом:

  1. Пользователь отправляет сообщение в приложение либо в прямом сообщении, либо в пространстве.
  2. Приложение, которое является агентом CX Dialogflow и связано с облачным проектом Google, обрабатывает сообщение.
  3. Приложение интегрируется с агентом.
  4. Приложение отправляет синхронный ответ, либо в прямом сообщении, либо в исходном пространстве.

Обзор потоки

Соберите обзор

A67A5B8B513BFC2C.PNG

Просмотрите исходный код

Единственный исходный код, который вам нужна, - это функция издеваться над сервисом бэкэнд, которую агент использует в качестве инструмента.

пакет.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

Инициировать макет сервисного обслуживания

Вы развертываете облачную функцию для моделирования бэкэнд -службы, которую необходимо интегрировать и вызову в качестве инструмента.

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> Облачные функции .

  1. Нажмите « Создать функцию» .
  2. Под основами , установите имя на function-2 .
  3. В соответствии с аутентификацией выберите «Разрешить неаутомированную радиопроизводительную кнопку».
  4. В условиях выполнения, сборки, подключений и настройки безопасности установите максимальное количество экземпляров на 3 .
  5. Нажмите "Далее .

e8cf0ee7441bf634.png

  1. Установите точку входа на feedback-app-backend .
  2. Замените содержимое по умолчанию на файлы, расположенные в каталоге feedback-app .
  3. Нажмите «Развернуть» .

bdb5cf9f503aa7f6.png

  1. Скопируйте URL, пока вы ждете пару минут, чтобы развернуть функцию.

Создать приложение Agent Creatflow CX

Создать приложение

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> Агент Строитель> Приложения .

  1. Щелкните новое приложение .
  2. Выберите агент .
  3. Установите имя отображения в Feedback App .
  4. Нажмите Создать .

7EF3DBACEE96C5AA.PNG

Инициировать инструмент

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> Агент Строитель> Приложения .

  1. Выберите агент приложения обратной связи .
  2. Нажмите «Инструменты»> «Создать» .
  3. Установите имя для review .
  4. Выберите OpenAPI .
  5. Установите описание в следующее значение:
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 в файле feedback-app/service-openapi.yaml на URL, который вы скопировали ранее.
  2. Установите YAML Schema в отредактированное содержание файла feedback-app/service-openapi.yaml .
  3. Нажмите Сохранить .

58085d6d56b603f7.png

Инициат

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> Агент Строитель> Приложения .

  1. Выберите агент приложения обратной связи .
  2. Выберите агенты> Генеративный агент по умолчанию .
  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. Установить инструкции к следующему значению:
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. Под выбором генеративной модели выберите Gemini-Pro .
  5. Отправьте сообщение Hello! начать.

90CA8CB7B2C1CB4B.PNG

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> Облачные функции .

  1. Выберите Function-2> журналы . Некоторые журналы показывают Google-Dialogflow в качестве вызывающего абонента.

48bfdf1788004d18.png

Интегрировать приложение Google Chat

В консоли Dialogflow CX выполните следующие действия:

  1. Выберите свой Google Cloud Project.
  2. Щелкните меню Action Agent Feedback App .
  3. Нажмите на копию имя .

В консоли Google Cloud выполните следующие действия:

  1. Перейдите в конфигурацию API Google Chat.

  1. Установите имя ресурса агента или среды на имя агента, которое вы скопировали ранее.

DF16619A1CB85CF8.PNG

  • В чате Google , отправьте Hello! В прямом сообщении в приложение Google Chat для начала. Агент отвечает так же, как ваш тест из консоли Dialogflow CX.

99a7a0295f122f31.png

11. Очистите

Удалить Google Cloud Project

Чтобы избежать внесения платежей в вашей учетной записи Google Cloud за ресурсы, используемые в этом CodeLab, мы рекомендуем вам удалить проект Google Cloud.

В консоли Google Cloud выполните следующие действия:

  1. Нажмите Меню ☰> IAM & Admin> Настройки .

  1. Нажмите , выключите .
  2. Введите идентификатор проекта.
  3. Нажмите все равно .

407699a4e03afea6.png

Удалить сценарий приложений

Мы рекомендуем вам также удалить проект сценария приложений.

В консоли сценария приложений выполните следующие действия:

  1. Выберите свой проект.
  2. Нажмите на меню действий.
  3. Нажмите «Удалить» .

FA3A42D7D2201EB9.png

12. Поздравляю

Поздравляем! Вы создали приложения Google Chat с Близнецами!

Что дальше?

Мы продемонстрировали только простые варианты использования в этом коделабе, но есть много областей расширения, которые вы, возможно, захотите рассмотреть в своих приложениях Google Chat, например, следующие:

  • Интегрируйте с другими генеративными моделями ИИ, включая таможню.
  • Поддержите другие типы медиа, такие как аудио, изображение и видео.
  • Используйте мультимодальность.
  • Полагайтесь на более длинные контексты и петли обратной связи.
  • Публикуйте готовые к производству приложения Google Chat на рынке. Существует множество ресурсов, доступных для разработчиков, таких как видео на YouTube, веб -сайты документации, образцы кодов и учебные пособия.
  • Включите Google Chat для вашей организации. Функция режима импорта облегчает начало работы.

Узнать больше