此教程介绍了如何构建 Google Chat 应用,利用以 Vertex AI 中的 Gemini 模型为基础的生成式 AI,根据 Chat 聊天室中的对话内容来回答问题。此类 Chat 应用结合使用 Google Workspace Events API 和 Pub/Sub,可实时识别和回答 Chat 聊天室中发布的问题,即使没有被提及也可提供回答。
Chat 应用会将聊天室中发送的所有消息用作数据源和知识库:当有人提出问题时,Chat 应用会检查之前是否有人分享过答案,然后分享答案。如果找不到答案,它会表示无法回答。在每条回答下方,用户都可以点击辅助操作按钮来 @提及聊天室管理员并请求回答。通过使用 Gemini AI,Google Chat 应用会不断学习其加入的聊天室中的对话,从而调整和扩展知识库。
以下是 Chat 应用在员工入职和支持聊天室中的运作方式:
- 
          图 1. Charlie 将 AI 知识助理 Chat 应用添加到了一个 Chat 聊天室中。 
- 
          图 2. Dana 询问公司是否提供公开演讲培训。 
- 
          图 3. AI 知识助理 Chat 应用会提示 Vertex AI with Gemini 根据聊天室的对话历史记录回答 Dana 的问题,然后分享答案。 
前提条件
- 拥有可访问 Google Chat 的 Google Workspace 商务版或企业版账号。 
- 访问 Google Cloud 服务以执行以下操作: - 创建 Google Cloud 项目。
- 将 Google Cloud 结算账号与 Cloud 项目相关联。如需了解您是否拥有相应权限,请参阅启用结算功能所需的权限。
- 使用未经身份验证的 Google Cloud Function 调用,您可以通过确定您的 Google Cloud 组织是否使用网域限定共享来验证这一点。
 - 如有必要,请向您的 Google Cloud 管理员申请访问权限或使用权限。 
- 如果使用 Google Cloud CLI,则需要配置为可与 gcloud CLI 搭配使用的 Node.js 开发环境。请参阅设置 Node.js 开发环境。 
目标
- 构建一个 Chat 应用,该应用使用生成式 AI 根据 Chat 聊天室对话中分享的知识回答问题。
- 借助生成式 AI:
- 检测并回答员工提出的问题。
- 持续从 Chat 聊天室中的对话中学习。
 
- 即使未直接向 Chat 应用发送消息,也能实时监听和回复 Chat 聊天室中的消息。
- 通过写入 Firestore 数据库和从 Firestore 数据库读取数据来持久保留消息。
- 当找不到问题的答案时,通过提及聊天室管理员来促进聊天室中的协作。
架构
下图展示了 AI 知识助理 Chat 应用使用的 Google Workspace 和 Google Cloud 资源的架构。
AI 知识助理 Chat 应用的工作方式如下:
- 用户将 AI 知识助理 Chat 应用添加到 Chat 聊天室: - Chat 应用会提示将该应用添加到 Chat 聊天室的用户配置身份验证和授权。 
- Chat 应用通过调用 Chat API 中的 - spaces.messages.list方法来提取聊天室的消息,然后将提取的消息存储在 Firestore 数据库中。
- Chat 应用调用 Google Workspace Events API 中的 - subscriptions.create方法,开始监听聊天室中的消息等事件。订阅的通知端点是一个 Pub/Sub 主题,它使用 Eventarc 将事件转发到 Chat 应用。
- Chat 应用会向聊天室发布一条介绍消息。 
 
- Chat 聊天室中的用户发布消息: - Chat 应用会从 Pub/Sub 主题实时接收消息。 
- Chat 应用会将消息添加到 Firestore 数据库中。 - 如果用户稍后修改或删除消息,Chat 应用会实时收到更新或删除事件,然后更新或删除 Firestore 数据库中的消息。 
- Chat 应用会将消息发送到 Vertex AI with Gemini: - 该提示指示 Vertex AI with Gemini 检查消息是否包含问题。如果可以,Gemini 会根据 Firestore 中保存的聊天室消息记录回答问题,然后 Google Chat 应用会将消息发送到聊天室。如果不是,请勿回复。 
- 如果 Vertex AI with Gemini 回答了问题,Chat 应用会使用应用身份验证通过调用 Chat API 中的 - spaces.messages.create方法来发布回答。- 如果 Vertex AI with Gemini 无法回答问题,Chat 应用会发布一条消息,说明它无法在聊天室的历史记录中找到该问题的答案。 - 消息始终包含一个用户可以点击的辅助操作按钮,点击该按钮会导致 Chat 应用 @提及聊天室管理员,要求他们回答问题。 
 
 
- Chat 应用会收到来自 Google Workspace Events API 的生命周期通知,告知 Chat 聊天室订阅即将过期: - Chat 应用通过调用 Google Workspace Events API 中的 subscriptions.patch方法来发送续订请求。
 
- Chat 应用通过调用 Google Workspace Events API 中的 
- Chat 应用从 Chat 聊天室中移除: - Chat 应用通过调用 Google Workspace Events API 中的 - subscriptions.delete方法来删除订阅。
- Chat 应用会从 Firestore 中删除 Chat 聊天室的数据。 
 
查看 AI 知识助理聊天应用使用的产品
AI 知识助理 Chat 应用使用以下 Google Workspace 和 Google Cloud 产品:
- 搭载 Gemini 的 Vertex AI API: 由 Gemini 提供支持的生成式 AI 平台。AI 知识助理聊天应用使用 Vertex AI API with Gemini 来识别、理解和回答员工问题。
- 
            Chat API:
            用于开发 Google Chat 应用的 API,可接收和响应聊天互动事件(例如消息)。AI 知识助理 Chat 应用使用 Chat API 来执行以下操作:
            - 接收并响应 Chat 发送的互动事件。
- 列出聊天室中发送的消息。
- 在聊天室中发布对用户问题的回答。
- 配置用于确定其在即时通讯中显示方式的属性,例如名称和头像图片。
 
- Google Workspace Events API: 借助此 API,您可以订阅 Google Workspace 应用中的活动并管理更改通知。AI 知识助理 Chat 应用使用 Google Workspace Events API 来监听 Chat 聊天室中发布的消息,以便检测和回答问题,即使没有被提及也可提供回答。
- Firestore: 无服务器文档数据库。AI 知识助理 Chat 应用使用 Firestore 来存储在 Chat 聊天室中发送的消息的相关数据。
- Pub/Sub: Pub/Sub 是一种异步且可伸缩的通讯服务,可将生成消息的服务与处理这些消息的服务分离开。 AI 知识助理 Chat 应用使用 Pub/Sub 接收来自 Chat 聊天室的订阅事件。
- Eventarc: 借助 Eventarc,您可以构建事件驱动型架构,而无需实现、自定义或维护底层基础架构。AI 知识助理 Chat 应用使用 Eventarc 将事件从 Pub/Sub 路由到 Chat 聊天室以及接收和处理订阅事件的 Cloud Functions 函数。
- 
            Cloud Functions:
            一种轻量级无服务器计算服务,可让您创建单一用途的独立函数来对聊天互动和订阅事件作出响应,而无需管理服务器或运行时环境。AI 知识助理 Chat 应用使用两个名为以下内容的 Cloud Functions:
            - 
                    app:托管 Chat 向其发送互动事件的 HTTP 端点,并作为计算平台运行处理这些事件并做出响应的逻辑。
- 
                    eventsApp:接收和处理聊天室事件,例如来自 Pub/Sub 订阅的消息。
 - Cloud Build: 一个全托管式持续集成、交付和部署平台,可运行自动化构建作业。
- Cloud Run: 用于运行容器化应用的全代管式环境。
 
- 
                    
准备环境
本部分介绍如何为 Chat 应用创建和配置 Google Cloud 项目。
创建 Google Cloud 项目
Google Cloud 控制台
- 在 Google Cloud 控制台中,依次前往菜单 > IAM 和管理 > 创建项目。
- 
        在 Project Name 字段中,输入项目的描述性名称。
        可选:如需修改项目 ID,请点击修改。项目创建后,项目 ID 便无法更改,因此请选择满足项目生命周期需求的 ID。 
- 在位置字段中,点击浏览以显示项目的潜在位置。然后,点击选择。
- 点击创建。Google Cloud 控制台会转到“信息中心”页面,您的项目会在几分钟内创建完毕。
gcloud CLI
在以下任一开发环境中,访问 Google Cloud CLI (gcloud):
- 
        Cloud Shell:如需使用已设置 gcloud CLI 的在线终端,请激活 Cloud Shell。
        
 激活 Cloud Shell
- 
        本地 shell:如需使用本地开发环境,请安装并初始化 gcloud CLI。
        
 如需创建 Cloud 项目,请使用gcloud projects create命令:gcloud projects create PROJECT_ID
为 Cloud 项目启用结算功能
Google Cloud 控制台
- 在 Google Cloud 控制台中,前往结算。依次点击 菜单 > 结算 > 我的项目。
- 在选择组织中,选择与您的 Google Cloud 项目关联的组织。
- 在项目行中,打开操作菜单 (),点击更改结算信息,然后选择 Cloud Billing 账号。
- 点击设置账号。
gcloud CLI
- 如需列出可用的结算账号,请运行以下命令:
        gcloud billing accounts list
- 将结算账号与 Google Cloud 项目相关联:
      gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID替换以下内容: - PROJECT_ID是您要为其启用结算功能的 Cloud 项目的项目 ID。
- BILLING_ACCOUNT_ID是要与 Google Cloud 项目关联的结算账号 ID。
 
启用 API
Google Cloud 控制台
- 在 Google Cloud 控制台中,启用 Google Chat API、Vertex AI API、Cloud Functions API、Firestore API、Cloud Build API、Pub/Sub API、Google Workspace Events API、Eventarc API 和 Cloud Run Admin API。 
- 确认您要在正确的 Cloud 项目中启用 API,然后点击下一步。 
- 确认您要启用正确的 API,然后点击启用。 
gcloud CLI
- 如有必要,请将当前 Cloud 项目设置为您创建的项目: - gcloud config set project PROJECT_ID- 将 PROJECT_ID 替换为您创建的 Cloud 项目的项目 ID。 
- 启用 Google Chat API、Vertex AI API、Cloud Functions API、Firestore API、Cloud Build API、Pub/Sub API、Google Workspace Events API、Eventarc API 和 Cloud Run Admin API: - gcloud services enable chat.googleapis.com \ aiplatform.googleapis.com \ cloudfunctions.googleapis.com \ firestore.googleapis.com \ cloudbuild.googleapis.com \ pubsub.googleapis.com \ workspaceevents.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com
设置身份验证和授权
通过身份验证和授权,Chat 应用可以访问 Google Workspace 和 Google Cloud 中的资源。
在本教程中,您将内部发布 Google Chat 应用,因此可以使用占位信息。在向外部发布 Google Chat 应用之前,请将同意屏幕的占位信息替换为真实信息。
配置 OAuth 权限请求页面、指定范围并注册应用
- 在 Google Cloud 控制台中,依次前往“菜单”图标 > > 品牌推广。 
- 如果您已配置,则可以在品牌推广、受众群体和数据访问权限中配置以下 OAuth 权限请求页面设置。 如果您看到一条消息,提示 尚未配置,请点击开始: - 在应用信息下,在应用名称中输入 AI knowledge assistant。
- 在用户支持电子邮件地址中,选择您的电子邮件地址或合适的 Google 群组。
- 点击下一步。
- 在受众群体下,选择内部。如果您无法选择内部,请选择外部。
- 点击下一步。
- 在联系信息下,输入一个电子邮件地址,以便您接收有关项目变更的通知。
- 点击下一步。
- 在完成下,查看 Google API 服务用户数据政策,如果您同意该政策,请选择我同意《Google API 服务:用户数据政策》。
- 点击继续。
- 点击创建。
- 如果您为用户类型选择了外部,请添加测试用户:
- 点击受众群体。
- 在测试用户下,点击添加用户。
- 输入您的电子邮件地址和任何其他已获授权的测试用户,然后点击保存。
 
 
- 在应用信息下,在应用名称中输入 
- 依次点击数据访问权限 > 添加或移除范围。系统会显示一个面板,其中列出了您在 Google Cloud 项目中启用的每个 API 的范围。 - 在手动添加范围下,粘贴以下范围: - https://www.googleapis.com/auth/chat.messages
 
- 点击添加到表格。 
- 点击更新。 
- 选择应用所需的范围后,在数据访问权限页面上,点击保存。 
 
创建 OAuth 客户端 ID 凭据
- 在 Google Cloud 控制台中,依次前往菜单 > API 和服务 > 凭据。 
- 依次点击创建凭据 > OAuth 客户端 ID。 
- 依次点击应用类型 > Web 应用。 
- 在名称字段中,输入凭据的名称。此名称仅在 Google Cloud 控制台中显示。 
- 在已获授权的重定向 URI 下,点击添加 URI。 
- 在 URI 1 中,输入以下内容: - https://REGION-PROJECT_ID.cloudfunctions.net/app/oauth2- 替换以下内容: - REGION:Cloud Functions 函数的区域,例如 us-central1。稍后,当您创建这两个 Cloud Functions 函数时,必须将其区域设置为此值。
- PROJECT_ID:您创建的 Cloud 项目的项目 ID。
 
- REGION:Cloud Functions 函数的区域,例如 
- 点击创建。 
- 在 OAuth 客户端已创建窗口中,点击下载 JSON。 
- 将下载的文件另存为 - credentials.json。稍后,当您创建这两个 Cloud Functions 函数时,请在每次部署中都添加- credentials.json文件。
- 点击确定。 
创建 Pub/Sub 主题
Pub/Sub 主题可与 Google Workspace Events API 搭配使用,以订阅 Chat 聊天室中的事件(例如消息),并实时通知 Chat 应用。
以下是创建 Pub/Sub 主题的方法:
Google Cloud 控制台
- 在 Google Cloud 控制台中,依次前往菜单 > Pub/Sub。 
- 点击创建主题。 
- 在主题 ID 中,输入 - events-api。
- 取消选择添加默认订阅。 
- 在加密下,选择 Google 管理的加密密钥。 
- 点击创建。系统会显示 Pub/Sub 主题。 
- 为了使此 Pub/Sub 主题和 Google Workspace Events API 协同工作,请向 Chat IAM 用户授予向 Pub/Sub 主题发布消息的权限: - 在 events-api 面板中,点击权限下的添加主账号。 
- 在添加主账号下的新的主账号中,输入 - chat-api-push@system.gserviceaccount.com。
- 在分配角色下,在选择角色中,依次选择 Pub/Sub > Pub/Sub 发布者。 
- 点击保存。 
 
gcloud CLI
- 创建主题 ID 为 - events-api的 Pub/Sub 主题:- gcloud pubsub topics create events-api
- 向 Chat IAM 用户授予向 Pub/Sub 主题发布消息的权限: - gcloud pubsub topics add-iam-policy-binding events-api \ --member='serviceAccount:chat-api-push@system.gserviceaccount.com' \ --role='roles/pubsub.publisher'
创建 Firestore 数据库
Firestore 数据库会持久保存并检索聊天室中的数据,例如消息。您无需定义数据模型,该模型在示例代码中由 model/message.js 和 services/firestore-service.js 文件隐式设置。
AI 知识助理 Chat 应用数据库使用基于 文档的 NoSQL 数据模型,这些文档整理到 集合中。如需了解详情,请参阅 Firestore 数据模型。
下图是 AI 知识助理 Chat 应用的数据模型概览:
根包含两个集合:
- spaces,其中每个文档都表示 Chat 应用所添加到的 Chat 聊天室。每条消息都由- messages子集合中的一个文档表示。
- users,其中每个文档都表示将 Chat 应用添加到 Chat 聊天室的用户。
查看集合、文档和字段定义
spaces
        包含 AI 知识助理 Chat 应用的 Chat 聊天室。
| 字段 | |
|---|---|
| Document ID | String特定空间的唯一 ID。Chat API 中聊天室资源名称的一部分。 | 
| messages | Subcollection of Documents (在 Chat 聊天室中发送的消息。与 Firebase 中 message的Document ID对应。 | 
| spaceName | StringChat API 中聊天室的唯一名称。与 Chat API 中的聊天室资源名称相对应。 | 
messages
        在 Chat 聊天室中发送的消息。
| 字段 | |
|---|---|
| Document ID | String特定消息的唯一 ID。 | 
| name | StringChat API 中消息的唯一名称。与 Chat API 中的消息资源名称相对应。 | 
| text | String邮件的文本正文。 | 
| time | String (Timestamp format)消息的创建时间。 | 
users
        将 AI 知识助理 Chat 应用添加到 Chat 聊天室的用户。
| 字段 | |
|---|---|
| Document ID | String特定用户的唯一 ID。 | 
| accessToken | String在 OAuth 2.0 用户授权期间授予的访问令牌,用于调用 Google Workspace API。 | 
| refreshToken | String在 OAuth 2.0 用户授权期间授予的刷新令牌。 | 
以下是创建 Firestore 数据库的方法:
Google Cloud 控制台
- 在 Google Cloud 控制台中,依次前往菜单 > Firestore。 
- 点击创建数据库。 
- 在选择 Firestore 模式中,点击原生模式。 
- 点击继续。 
- 配置数据库: - 在为数据库命名中,将数据库 ID 保留为 - (default)。
- 在位置类型下,选择区域。 
- 在区域中,为数据库指定一个区域,例如 - us-central1。为获得最佳性能,请选择与 Chat 应用的 Cloud Functions 相同或相近的位置。
 
- 点击创建数据库。 
gcloud CLI
- 在原生模式下创建 Firestore 数据库: - gcloud firestore databases create \ --location=LOCATION \ --type=firestore-native- 将 LOCATION 替换为 Firestore 区域的名称,例如 - us-central1。为获得最佳性能,请选择与 Chat 应用的 Cloud Functions 相同或相近的位置。
创建和部署聊天应用
现在,您的 Google Cloud 项目已创建并配置完毕,您可以开始构建和部署 Chat 应用了。在本部分中,您将执行以下操作:
- 创建并部署两个 Cloud Functions 函数。一个用于响应 Chat 互动事件,另一个用于响应 Pub/Sub 事件。
- 在 Google Chat API 配置页面中创建并部署 Chat 应用。
创建和部署 Cloud Functions 函数
在本部分中,您将创建并部署两个名为以下内容的 Cloud Functions 函数:
- app:托管并运行 Chat 应用的代码,该代码会响应从 Chat 收到的作为 HTTP 请求的事件。
- eventsApp:接收和处理 Chat 聊天室事件,例如来自 Pub/Sub 的消息。
这些 Cloud Functions 共同构成了 AI 知识助理 Chat 应用的应用逻辑。
(可选)在创建 Cloud Functions 之前,请花点时间查看并熟悉 GitHub 上托管的示例代码。
创建并部署 app
Google Cloud 控制台
- 从 GitHub 下载代码(以 zip 文件形式)。 
- 解压缩下载的 ZIP 文件。 - 提取的文件夹包含整个 Google Workspace 示例代码库。 
- 在解压缩的文件夹中,前往 - google-chat-samples-main/node/ai-knowledge-assistant目录。
- 在 - google-chat-samples/node/ai-knowledge-assistant目录中,添加您在创建 OAuth 客户端 ID 凭据时下载的- credentials.json文件,以进行身份验证和授权。
- 将 - ai-knowledge-assistant文件夹的内容压缩成 zip 文件。- zip 文件必须包含以下文件和文件夹: - .gcloudignore
- .gitignore
- README.md
- deploy.sh
- env.js
- events_index.js
- http_index.js
- index.js
- credentials.json
- package-lock.json
- package.json
- controllers/
- model/
- services/
- test/
 
- 在 Google Cloud 控制台中,依次前往菜单 > Cloud Functions。 - 确保已选择 Chat 应用所属的 Google Cloud 项目。 
- 点击 创建函数。 
- 在创建函数页面上,设置函数: - 在环境中,选择 Cloud Run Function。
- 在函数名称中,输入 app。
- 在区域中,选择一个区域,例如 us-central1。此区域必须与您在创建 OAuth 客户端 ID 凭据以进行身份验证和授权时在已获授权的重定向 URI 中设置的区域一致。
- 在触发器类型中,选择 HTTPS。
- 在身份验证下,选择允许未通过身份验证的调用。
- 点击下一步。
 
- 在运行时中,选择 Node.js 20。 
- 在入口点中,删除默认文本并输入 - app。
- 在源代码中,选择 ZIP 文件上传。 
- 在目标存储分区中,创建或选择一个存储分区: - 点击浏览。
- 选择存储分区。
- 点击选择。
 - Google Cloud 会将该 zip 文件上传到此存储分区,并提取其中的组件文件。然后,Cloud Functions 会将组件文件复制到 Cloud Functions 中。 
- 在 ZIP 文件中,上传您从 GitHub 下载、提取并重新压缩的 ZIP 文件: - 点击浏览。
- 找到并选择相应 ZIP 文件。
- 点击打开。
 
- 点击部署。 - Cloud Functions 详情页面随即打开,您的函数会显示两个进度指示器:一个用于构建,另一个用于服务。 当这两个进度指示器消失并替换为对勾标记时,表示您的函数已部署完毕并可供使用。 
- 修改示例代码以设置常量: - 在 Cloud Functions 详情页面上,点击修改。
- 点击下一步。
- 在源代码中,选择内嵌编辑器。
- 在内嵌编辑器中,打开并修改 env.js文件:- 将 project 的值设置为您的 Cloud 项目 ID。
- 将 location 的值设置为 Cloud Function 的区域,例如 us-central1。
 
 
- 点击部署。 
gcloud CLI
- 从 GitHub 克隆代码: - git clone https://github.com/googleworkspace/google-chat-samples.git
- 切换到包含此 AI 知识助理 Chat 应用代码的目录: - cd google-chat-samples/node/ai-knowledge-assistant
- 在 - google-chat-samples/node/ai-knowledge-assistant目录中,添加您在创建 OAuth 客户端 ID 凭据时下载的- credentials.json文件,以进行身份验证和授权。
- 修改 - env.js文件以设置环境变量:- 将 project 的值设置为您的 Cloud 项目 ID。
- 将 location 的值设置为 Cloud Function 的区域,例如 us-central1。
 
- 将 Cloud Functions 函数部署到 Google Cloud: - gcloud functions deploy app \ --gen2 \ --region=REGION \ --runtime=nodejs20 \ --source=. \ --entry-point=app \ --trigger-http \ --allow-unauthenticated- 将 REGION 替换为 Cloud Functions 函数的区域值,以与 - env.js文件中设置的值(例如- us-central1)保持一致。
创建并部署 eventsApp
Google Cloud 控制台
- 在 Google Cloud 控制台中,依次前往菜单 > Cloud Functions。 - 确保已选择 Chat 应用所属的 Google Cloud 项目。 
- 点击 创建函数。 
- 在创建函数页面上,设置函数: - 在环境中,选择 Cloud Run Function。
- 在函数名称中,输入 eventsApp。
- 在区域中,选择一个区域,例如 us-central1。此区域必须与您在创建 OAuth 客户端 ID 凭据以进行身份验证和授权时在已获授权的重定向 URI 中设置的区域一致。
- 在触发器类型中,选择 Cloud Pub/Sub。
- 在 Cloud Pub/Sub 主题中,选择您创建的 Pub/Sub 主题名称,其格式为 projects/PROJECT/topics/events-api,其中 PROJECT 是您的 Cloud 项目 ID。
- 如果您看到以 Service account(s) might not have enough permissions to deploy the function with the selected trigger.开头的消息,请点击全部授予。
- 点击下一步。
 
- 在运行时中,选择 Node.js 20。 
- 在入口点中,删除默认文本并输入 - eventsApp。
- 在源代码中,选择 Cloud Storage 中的 ZIP 文件。 
- 在 Cloud Storage 位置中,点击浏览。 
- 选择您在创建 - appCloud Function 时上传 ZIP 文件的存储分区。
- 点击您上传的 ZIP 文件。 
- 点击选择。 
- 点击部署。 - 系统会打开 Cloud Functions 详情页面,您的函数会显示三个进度指示器:一个用于 build,一个用于服务,一个用于触发器。当所有三个进度指示器消失并替换为对勾标记时,表示函数已部署完毕并可供使用。 
- 修改示例代码以设置常量: - 在 Cloud Functions 详情页面上,点击修改。
- 点击下一步。
- 在源代码中,选择内嵌编辑器。
- 在内嵌编辑器中,打开并修改 env.js文件:- 将 project 的值设置为您的 Cloud 项目 ID。
- 将 location 的值设置为 Cloud Function 的区域,例如 us-central1。
 
 
- 点击部署。 
gcloud CLI
- 在 gcloud CLI 中,如果您尚未切换到之前从 GitHub 克隆的此 AI 知识助理 Chat 应用的代码所在的目录,请切换到该目录: - cd google-chat-samples/node/ai-knowledge-assistant
- 在 - google-chat-samples/node/ai-knowledge-assistant目录中,添加您在创建 OAuth 客户端 ID 凭据时下载的- credentials.json文件,以进行身份验证和授权。
- 修改 - env.js文件以设置环境变量:- 将 project 的值设置为您的 Cloud 项目 ID。
- 将 location 的值设置为 Cloud Function 的区域,例如 us-central1。
 
- 将 Cloud Functions 函数部署到 Google Cloud: - gcloud functions deploy eventsApp \ --gen2 \ --region=REGION \ --runtime=nodejs20 \ --source=. \ --entry-point=eventsApp \ --trigger-topic=events-api- 将 REGION 替换为 Cloud Functions 函数的区域值,以与 - env.js文件中设置的值(例如- us-central1)保持一致。
复制 app Cloud Functions 函数的触发器网址
您将在下一部分中粘贴 app Cloud Functions 函数的触发器网址,届时您将在 Google Cloud 控制台中配置 Chat 应用。
Google Cloud 控制台
- 在 Google Cloud 控制台中,依次前往菜单 > Cloud Functions。 
- 在 Cloud Functions 列表的名称列中,点击 - app。
- 点击触发器。 
- 复制 网址。 
gcloud CLI
- 描述 - appCloud Functions 函数:- gcloud functions describe app
- 复制 - url媒体资源。
在 Google Cloud 控制台中配置 Chat 应用
本部分介绍如何在 Google Cloud 控制台中配置 Chat API,其中包含有关 Chat 应用的信息,包括 Chat 应用的名称以及 Chat 应用的 Cloud Function 的触发网址(Chat 应用会将 Chat 互动事件发送到该网址)。
- 在 Google Cloud 控制台中,依次点击菜单 > 更多产品 > Google Workspace > 产品库 > Google Chat API > 管理 > 配置。 
- 在应用名称中,输入 - AI knowledge assistant。
- 在头像网址中,输入 - https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/live_help/default/24px.svg。
- 在说明中,输入 - Answers questions with AI。
- 点击启用互动功能切换开关,以切换到开启位置。 
- 在功能下,选择加入聊天室和群组对话。 
- 在连接设置下,选择 HTTP 端点网址。 
- 在 HTTP 端点网址中,粘贴 - appCloud Functions 函数中的触发器网址,格式为- https://REGION- -PROJECT_ID- .cloudfunctions.net/app,其中 REGION 是 Cloud Functions 函数的区域,例如- us-central1,PROJECT_ID 是您创建的 Cloud 项目的项目 ID。
- 在公开范围下方,选择面向 Workspace 网域中的特定人员和群组提供此 Chat 扩展应用,然后输入您的电子邮件地址。 
- (可选)在日志下,选择将错误记录到 Logging。 
- 点击保存。系统会显示一条消息,提示配置已保存,这意味着 Chat 应用已准备好进行测试。 
测试 Chat 应用
在包含消息的 Chat 聊天室中测试 AI 知识助理 Chat 应用,方法是提出 AI 知识助理 Chat 应用可以回答的问题。
以下是测试 AI 知识助理聊天应用的一些方法:
- 将 AI 知识助理 Chat 应用添加到现有 Chat 聊天室,并提出与该聊天室相关的问题。
- 创建 Chat 聊天室并发布几条消息,用作数据源。消息可以来自 Gemini,只需提供 Answer 20 common onboarding questions employees ask their teams.等提示即可。或者,您也可以从使用 Chat 进行开发概览指南中粘贴几个段落,然后提出相关问题。
在本教程中,我们来创建一个 Chat 聊天室,并从使用 Chat 进行开发概览指南中粘贴几个段落。
- 打开 Google Chat。 
- 创建 Chat 聊天室: - 依次点击 发起新聊天 > 创建聊天室。 
- 在聊天室名称中,输入 - Testing AI knowledge assistant app。
- 在该聊天室的用途是什么?下,选择协作。 
- 在权限设置下,选择哪些人可以访问聊天室。 
- 点击创建。 
 
- 添加要用作数据源的消息: - 在网络浏览器中,访问使用 Chat 进行开发概览指南。 
- 将该指南的内容复制并粘贴到您创建的 Chat 聊天室中。 
 
- 添加 AI 知识助理 Chat 应用: - 在消息撰写栏中,输入 - @AI knowledge assistant,然后在显示的建议菜单中选择 AI 知识助理聊天应用,然后按- enter。
- 系统随即会显示一条消息,询问您是否要将 AI 知识助理 Chat 应用添加到聊天室。点击添加到聊天室。 
- 如果您是首次将 Chat 应用添加到聊天室,则必须为 Chat 应用配置身份验证和授权: - 点击配置。
- 系统会打开一个新的浏览器窗口或标签页,要求您选择一个 Google 账号。选择您要用于测试的账号。
- 查看 AI 知识助理 Chat 应用请求的权限。如要授予权限,请点击允许。
- 系统会显示一条消息,指出 You may close this page now.。 关闭浏览器窗口或标签页,然后返回到聊天空间。
 
 
- 提问: - 在消息撰写栏中,输入类似 - What are Google Chat apps?的问题
- AI 知识助理 Chat 应用会回答。 
- (可选)如果回答不准确或不充分,为了帮助 AI 改进对话历史记录,请点击 获取帮助。 AI 知识助理聊天应用会提及聊天室管理员,并要求对方回答问题。下次,AI 知识助理 Chat 应用就会知道答案了! 
 
注意事项、替代架构选择和后续步骤
本部分将介绍构建 AI 知识助理聊天应用的其他方法。
Firestore、Cloud Storage 或在 Chat API 中调用 List Messages
    本教程建议将聊天室数据(例如消息)存储在 Firestore 数据库中,因为与每次 Chat 应用回答问题时都通过 Chat API 对 Message 资源调用 list 方法相比,这样做可以提高性能。此外,反复调用 list messages 可能会导致 Chat 应用达到 API 配额限制。
    
不过,如果 Google Chat 聊天室的对话记录过长,使用 Firestore 的费用可能会很高。
Cloud Storage 是 Firestore 的替代方案。AI 知识助理聊天应用在其中处于活跃状态的每个空间都有自己的对象,每个对象都是一个文本文件,其中包含相应空间中的所有消息。此方法的优点是可以一次性将文本文件的全部内容提供给 Vertex AI with Gemini,但缺点是更新对话历史记录需要更多工作,因为您无法附加到 Cloud Storage 中的对象,只能替换它。如果您定期更新消息历史记录,此方法并不适用;但如果您定期批量更新消息历史记录(例如每周一次),此方法会是不错的选择。
问题排查
当 Google Chat 应用或卡片返回错误时,Chat 界面会显示一条消息,提示“出了点问题”。 或“无法处理您的请求”。有时,Chat 界面不会显示任何错误消息,但 Chat 应用或卡片会产生意外结果;例如,卡片消息可能不会显示。
虽然聊天界面中可能不会显示错误消息,但当为聊天应用启用错误日志记录功能后,系统会提供描述性错误消息和日志数据,帮助您修复错误。如需有关查看、调试和修复错误的帮助,请参阅排查和修复 Google Chat 错误。
清理
为避免系统因本教程中使用的资源向您的 Google Cloud 账号收取费用,我们建议您删除 Cloud 项目。
- 在 Google Cloud 控制台中,前往管理资源页面。依次点击 菜单 > IAM 和管理 > 管理资源。
- 在项目列表中,选择要删除的项目,然后点击删除 。
- 在对话框中输入项目 ID,然后点击关停以删除项目。