组织在使用会话式AI时可能会面临两个关键挑战。第一,用户需要在他们工作的地方获得答案——在他们的CRM、支持控制台或分析门户中——而不是在单独的工具中。第二,在应用程序中实现安全的嵌入式聊天,可能需要数周的开发时间来构建身份验证、令牌验证、域安全和全局分发基础设施。

Amazon Quick Suite 嵌入式聊天有助于解决第一个挑战,它将会话式AI直接带入您的应用程序,因此用户无需切换工具即可查询结构化数据、搜索文档和触发操作。

在本文中,我们将向您展示如何使用Quick Suite Embedding SDK 在企业门户中嵌入聊天智能体,实现一键部署解决方案,从而解决第二个挑战。

解决方案概述

该解决方案使用 Amazon CloudFront 进行全局内容分发,使用 Amazon Cognito 进行 OAuth 2.0 身份验证,使用 Amazon API Gateway 提供 REST API 端点,使用 AWS Lambda 进行无服务器 API 处理,并使用 OpenID Connect (OIDC) 联合身份验证与 Quick Suite 集成,从而部署一个安全的 Web 门户用于嵌入式聊天。

该解决方案通过多层保护实现了纵深防御安全策略:在 CloudFront 上提供 DDoS 防护;一个私有的 Amazon Simple Storage Service (Amazon S3) 存储桶,带有 源访问控制,有助于防止对前端资产的直接访问;在 API Gateway 上实施 AWS WAF 速率限制保护;以及在生成具有最少权限的 AWS Identity and Access Management (IAM) 权限的特定于用户的时间限制嵌入式 URL 之前,使用 Amazon Cognito 公钥验证 JSON Web Token (JWT) 签名。

下图说明了解决方案架构。

工作流程包括以下步骤:

  1. 用户访问 Web 门户 URL,该 URL 路由到 CloudFront。
  2. CloudFront 使用源访问控制从私有 S3 存储桶中获取 HTML、CSS 和 JavaScript 文件。
  3. Web 应用程序检查是否存在有效的身份验证令牌,并将未经验证的用户重定向到 Amazon Cognito 托管的 UI 进行 OAuth 2.0 登录。
  4. 用户在 Amazon Cognito 登录页面上输入凭据,系统会验证这些凭据并将用户重定向回带有单次授权代码的 CloudFront URL。
  5. 应用程序提取授权代码,并向 API Gateway 发起 HTTPS API 调用,该调用会通过 AWS WAF 速率限制。
  6. API Gateway 调用一个带有授权代码的 Lambda 函数。
  7. Lambda 函数向 Amazon Cognito OAuth 令牌端点发出服务器到服务器的 HTTPS 调用,将授权代码交换为 JWT 令牌(ID 令牌、访问令牌、刷新令牌)。
  8. 该函数使用 Amazon Cognito 公钥 JSON Web Key Set (JWKS) 并采用线程安全缓存来验证 ID 令牌的加密签名。

以下是一个解码后的 JWT 示例:

{"at_hash": "abcdefifB5vH2D0HEvLghi", "sub": "12345678-abcd-1234-efgh-123456789012", "email_verified": true, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123", "cognito:username": "12345678-abcd-1234-efgh-123456789012", "origin_jti": "abcd1234-5678-90ef-ghij-klmnopqrstuv", "aud": "1a2b3c4d5e6f7g8h9i0j1k2l3m", "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "token_use": "id", "auth_time": 1704063600, "exp": 1704067200, "iat": 1704063600, "jti": "abcdef12-3456-7890-abcd-ef1234567890", "email": "user123@example.com"}
  1. Lambda 函数使用经过验证的 ID 令牌调用 AWS Security Token Service (AWS STS) AssumeRoleWithWebIdentity API,以承担 IAM Web 身份角色并接收临时 AWS 凭证。
  2. 该函数使用临时凭证调用 Quick Suite ListUsers API 以验证用户是否存在,然后调用 GenerateEmbedUrlForRegisteredUser API 以帮助生成具有域限制的安全嵌入式 URL。
  3. 该函数通过 API Gateway 和跨域资源共享 (CORS) 标头,以 JSON 响应将嵌入式 URL 返回给 CloudFront。以下是一个嵌入式 URL 示例:
    {"ChatEmbedUrl": "https://us-east-1.quicksight.aws.amazon.com/embedding/abcdefe827dd4ef8b4e1fb921db046c4/quick/chat?code=Abcdef....&identityprovider=quicksight&isauthcode=true", "user": "user123@example.com"}
  4. CloudFront 应用程序使用 Quick Suite Embedding SDK 创建嵌入上下文,并在具有安全跨源通信的 HTML iframe 中渲染聊天界面。

您可以通过以下高级步骤部署此解决方案:

  1. 使用 AWS Cloud Development Kit (AWS CDK) 部署无服务器基础设施。
  2. 在 Amazon Cognito 和 Quick Suite 中配置用户。
  3. 共享 Quick Suite 资产(聊天智能体及相关连接、知识库)。
  4. 访问 Web 门户以使用 Quick Suite 聊天智能体。

先决条件

要部署本文中演示的解决方案,需要满足以下先决条件:

  • 一个 AWS 账户 
  • 一个具有 Password-basedSingle-Sign On 身份验证方法的 Quick Suite 订阅
  • AWS CDK CLI 
  • AWS SDK for Python (Boto3) 
  • 一个具有适当权限的 AWS CLI 配置文件,以便部署解决方案,包括列出 Quick Suite 命名空间、创建 IAM 角色和 AWS 资源,如 CloudFront 分配、S3 存储桶、API Gateway REST API、AWS WAF Web 访问控制列表、Lambda 函数和 Amazon Cognito 用户池
  • Node.js 20+
  • jq 1.7+
  • 正在运行 Docker Desktop

使用 AWS CDK 部署无服务器基础设施

完成以下步骤以使用 AWS CDK 部署无服务器基础设施:

  1. 克隆 GitHub 存储库
git clone git@github.com:aws-samples/sample-quicksuite-chat-embedding.git cd sample-quicksuite-chat-embedding
  1. 部署基础设施:
./setup.sh

系统将提示您输入 AWS 区域代码、AWS CloudFormation 堆栈 ID 和门户标题,以及您的 AWS CLI 配置文件。

在 Amazon Cognito 和 Quick Suite 中配置用户

完成以下步骤以在 Amazon Cognito 和 Quick Suite 中配置用户:

  1. 在 Amazon Cognito 用户池中创建一个 Amazon Cognito 用户:
python scripts/create_cognito_user.py --profile <aws-profile> <cognito-user-email>

  1. 在 Quick Suite 中创建一个联合用户:
python scripts/create_quicksuite_user.py --profile <aws-profile> <cognito-user-email>

共享 Quick Suite 聊天智能体

完成以下步骤以共享您的 Quick Suite 聊天智能体:

  1. 使用具有 Quick Suite Author Pro 角色的凭据登录 Quick Suite 控制台。
  2. 在导航窗格中选择 Chat agents(聊天智能体)。
  3. 选择要共享的智能体(例如,AnyCompany Ecom 订单助手),然后选择 Share(共享)。

  1. 搜索您之前创建的用户名称(例如,user123@example.com)。
  2. 选择 Share(共享)。

共享此智能体后,您还需要单独共享该智能体的每个链接资源,以确认全部功能正常。

访问 Web 门户以使用 Quick Suite 聊天智能体

完成以下步骤以访问 Web 门户并开始使用聊天智能体:

  1. 在 Amazon Cognito 验证电子邮件中查找临时密码。
  2. 使用用户 ID 和临时密码在 Web 浏览器中访问 CloudFront URL。
  3. 首次登录时,系统会提示您更改密码。

成功登录后,您可以在聊天界面中看到 My Assistant(我的助手)。

  1. 选择区域以连接到自定义的 Quick Suite 聊天智能体。

  1. 要在“筛选条件”下查看与您共享的聊天智能体,请选择 Shared with me(与我共享)。

  1. 选择您想要的智能体并开始聊天。

以下屏幕截图显示了一名客服代表通过电话联系的经过验证的客户,正在跟踪示例在线订单并处理其退货的聊天交互。

清理

要清理资源,请删除已部署的 AWS 资源:

./cleanup.sh

结论

该解决方案解决了大规模嵌入会话式 AI 的核心挑战:跨全球位置保护数千并发用户的身份验证,通过全面的审计跟踪保持企业级安全性,并通过自动化基础设施预配简化部署。您可以自定义门户品牌、调整安全策略并与现有身份提供商集成。您可以自动扩展到数千个并发用户,同时保持按需付费定价。

要试用此解决方案,请克隆 GitHub 存储库,并通过一次单击部署完整的 基础设施,以嵌入 Quick Suite 聊天智能体。


关于作者

Satyanarayana Adimula 是 AWS 生成式 AI 创新与交付部门的高级构建师。他利用超过 20 年的数据和分析专业知识,专注于构建智能体式 AI 系统,帮助大型企业实现复杂工作流程的自动化、加速决策并取得可衡量的业务成果。