目 录CONTENT

文章目录

将 Amazon Bedrock AgentCore 与 Slack 集成

Administrator
2026-03-24 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/integrating-amazon-bedrock-agentcore-with-slack/

原文作者:Salman Ahmed, Sergio Barraza, and Ravi Kumar


Amazon Bedrock AgentCoreSlack 集成,可以将 AI 代理直接引入您的工作区。您的团队无需在应用程序之间切换、丢失对话历史记录或重新进行身份验证,即可与代理进行交互。此集成解决了三个技术要求:验证 Slack 事件请求以确保安全,跨线程维护对话上下文,以及管理超出 Slack 超时限制的响应。

开发人员通常会花费时间为 Slack 集成构建自定义 Webhook 处理程序。AgentCore 通过提供内置的对话内存、对代理及其工具的安全访问以及在 Slack 内部跟踪代理使用情况的身份管理,帮助消除了这项工作。

在本博文中,我们将演示如何使用 AWS Cloud Development Kit (AWS CDK) 构建 Slack 集成。您将学习如何部署具有三个专用 AWS Lambda 函数的基础设施,正确配置事件订阅以处理 Slack 的安全要求,并实现适用于许多代理用例的对话管理模式。我们将以天气代理为例,但您正在构建的集成层是完全可重用的。您可以自定义运行时和工具以满足您的特定业务需求,而无需更改 Slack 与代理的通信方式。

解决方案概述

此解决方案包含两个主要组件:Slack 集成基础设施和带有工具的 Amazon AgentCore Runtime。集成基础设施负责路由和管理 Slack 与代理之间的通信,而运行时则处理和响应查询。

此解决方案中的集成基础设施使用了 Amazon API GatewayAWS LambdaAWS Secrets ManagerAmazon Simple Queue Service (Amazon SQS) 来实现无服务器集成。

代理已容器化并托管在 AgentCore Runtime 中运行。它使用 Strands Agents SDK 构建,该 SDK 与 Amazon Bedrock AgentCore Gateway 集成以访问工具,并与 AgentCore Memory 集成以处理对话历史记录。运行时在整个对话中维护上下文,并使用 Model Context Protocol (MCP)(一种用于工具执行和通信的标准化协议)来调用工具。

在具备了这些组件后,下一节将详细介绍它们在架构中如何协同工作。

架构图

以下图表展示了解决方案的架构,其中包含三个关键部分:

A 部分 – 镜像构建基础设施 – 首先,WeatherAgentImageStack CDK 部署容器镜像构建管道(Amazon Simple Storage Service (Amazon S3) 存储桶、AWS CodeBuild 项目和 Amazon Elastic Container Registry (Amazon ECR) 存储库)。这使用 CodeBuild 创建 AWS Graviton (ARM64) 容器镜像,这些镜像存储在 ECR 存储库中供 AgentCore Runtime 使用。

B 部分 – AgentCore 组件 – 接下来,WeatherAgentCoreStack CDK 部署 AgentCore Runtime、Gateway、Memory 和 AWS Lambda 函数。Runtime 使用 Strands Agents Framework,一个 开源 AI 代理 SDK,来协调模型调用、工具调用和对话内存。

C 部分 – Slack 集成基础设施 – 最后,WeatherAgentSlackStack 部署集成基础设施(API Gateway、Secrets Manager、Lambda 函数和 SQS)。这通过三个 Lambda 函数处理 Webhook 验证、Amazon Simple Queue Service (Amazon SQS) 队列和消息处理。此层对于 AgentCore 用例是可重用的。

AgentCore Slack 集成图

请求流程包含以下步骤:

  1. 用户通过直接消息或在频道中输入 @appname 在 Slack 中发送消息。
  2. Slack 向 API Gateway 发送一个 Webhook POST 请求。
  3. 请求被转发到验证 Lambda 函数。
  4. Lambda 从 Secrets Manager 检索 Slack 签名密钥和机器人令牌以验证真实性。
  5. 验证后,Lambda 异步调用 SQS 集成 Lambda。
  6. SQS 集成 Lambda 向 Slack 线程中的用户发送一条“正在处理您的请求…”消息。
  7. SQS 集成 Lambda 将消息发送到 SQS FIFO 队列。
  8. 队列触发 Agent 集成 Lambda。
  9. Lambda 使用用户的查询和来自 Slack 线程时间戳的会话 ID 调用 AgentCore Runtime。
  10. AgentCoreMemorySessionManager 使用会话 ID(线程时间戳)和参与者 ID(用户 ID)从 AgentCore Memory 中检索对话历史记录。
  11. Strands Framework 使用 MCP 协议从 AgentCore Gateway 检索工具。
  12. Strands Framework 使用消息、上下文和工具调用 Amazon Bedrock 模型(Nova Pro)。
  13. 模型确定调用哪些工具并生成请求。
  14. Gateway 将工具调用路由到 Lambda 上的 MCP 服务器,该服务器执行天气工具。
  15. 工具结果返回给 Strands Framework,如果需要,它可以再次调用模型。
  16. Strands Framework 将对话轮次存储在 AgentCore Memory 中。
  17. Agent 集成 Lambda 使用代理的响应更新“正在处理您的请求…”消息。

先决条件

此解决方案需要以下先决条件:

  • 拥有以下权限的 AWS 账户
    • Amazon Bedrock AgentCore、Lambda、API Gateway、SQS、ECR、CodeBuild、AWS Identity and Access Management (IAM)、Secrets Manager、Amazon Bedrock
  • 已配置凭据的 AWS Command Line Interface (AWS CLI) (v2.x)
  • 已安装 Node.js (v18 或更高版本) 和 npm
  • 已安装并在 AWS 账户中引导的 AWS CDK
    • 安装:npm install -g aws-cdk
    • 引导:cdk bootstrap aws://ACCOUNT-NUMBER/REGION
  • Slack 账户(两种选择):
    • 对于公司 Slack 账户,请与您的管理员合作创建和发布集成应用程序,或者您可以使用沙盒组织
    • 或者,创建您自己的 Slack 账户和工作区进行测试和实验

第 1 步:创建 Slack 应用

在 Slack 中创建应用程序需要特定的权限,这些权限因组织而异。如果无法获得必要的访问权限,请联系您的 Slack 管理员。此演练中的屏幕截图来自个人 Slack 账户,旨在演示可用于此解决方案的实现过程。

  1. 转到 Slack API 并选择 Create New App

AgentCore SlackAPI 创建新应用

  1. Create an app 弹出窗口中,选择 From scratch

AgentCore Slack 从头开始创建应用

  1. 对于 App Name,输入 agent-core-weather-agent
  2. 对于 Pick a workspace to develop your app in,选择您希望使用此应用程序的工作区。
  3. 选择 Create App

AgentCore Slack 命名应用并选择工作区

应用程序创建后,您将进入 Basic Information 页面。

  1. 在导航窗格的 Features 下,选择 OAuth & Permissions
  2. 导航到 Scopes 部分,在 Bot Token Scopes 下,通过选择 Add an OAuth Scope 并输入以下内容来添加范围:
    • app_mentions:read
    • chat:write
    • im:history
    • im:read
    • im:write

AgentCore Slack 范围

  1. OAuth & Permissions 页面上,导航到 OAuth Tokens 部分,然后选择 Install to ExampleCorp
  2. 在接下来的页面上,选择 Allow 完成此过程。

AgentCore Slack 天气代理安装

  1. OAuth & Permissions 页面上,导航到 OAuth Tokens 并复制已创建的 Bot User OAuth Token 的值。将其保存在记事本中,供稍后部署基础设施时使用。

AgentCore Slack 复制 OAuthToken

  1. 在导航窗格的 Settings 下,选择 Basic Information
  2. 导航到 Signing Secret 并选择
  3. 复制并将其值保存到您的记事本中,供稍后部署基础设施时使用。

AgentCore Slack 签名密钥

  1. 为了允许在 Slack 中与该应用进行直接消息,请在导航窗格的 App Home 下导航至
  2. Show Tabs 部分,启用 Allow users to send Slash commands and messages from the messages tab

AgentCore Slack 斜杠命令

注意: 在部署基础设施并获取 Webhook URL 后,您将在第 3 步完成事件订阅的配置。

第 2 步:部署基础设施

克隆 GitHub 仓库并导航到项目目录:

git clone https://github.com/aws-samples/sample-Integrating-Amazon-Bedrock-AgentCore-with-Slack
cd sample-Integrating-Amazon-Bedrock-AgentCore-with-Slack

部署需要将 Slack 凭据设置为环境变量并运行部署脚本。

export SLACK_BOT_TOKEN="xoxb-your-token-here"
export SLACK_SIGNING_SECRET="your-signing-secret-here"
./deploy.sh

部署大约需要 10-15 分钟,它会创建三个 CDK 堆栈:用于容器构建的镜像堆栈、带有 Runtime、Gateway 和 Memory 的 Agent 堆栈,以及带有 API Gateway 和 Lambda 函数的 Slack 堆栈。部署输出提供了下一步所需的 Webhook URL。

第 3 步:配置 Slack 事件订阅

部署基础设施并获取 Webhook URL 后,即可完成 Slack 应用配置。

  1. 此配置需要返回到 Slack API 中的 Slack 应用,并选择 agent-core-weather-agent

AgentCore Slack 选择您的应用

  1. 在导航窗格的 Features 下,选择 Event Subscriptions
  2. Enable Events 切换为
  3. Request URL 字段中,粘贴部署输出中的 Webhook URL。
  4. URL 验证成功后(显示为带绿色对勾的“Verified”),导航到 Subscribe to bot events
  5. 选择 Add Bot User Event 并添加以下事件:
    • app_mention
    • im
  6. 选择页面底部的 Save Changes

AgentCore Slack 事件订阅

  1. 在 Settings 下,导航到 Install App 并选择 Reinstall to ExampleCorp。当弹出屏幕出现时,选择 Allow

AgentCore Slack 重新安装 Slack 应用

第 4 步:测试 AgentCore 在 Slack 中的集成

测试需要找到 Slack Apps 部分的 agent-core-weather-agent。您可以键入 /invite @agent-core-weather-agent 将 APP 邀请到一个现有频道。将此应用程序添加到频道后,用户可以通过使用 @agent-core-weather-agent 来获取天气信息来与 AgentCore Agent 进行交互,或者您也可以通过直接访问该应用与其聊天。

AgentCore Slack 在 Slack 中添加代理应用

直接消息:用户可以直接在 Apps 部分找到该应用并与它进行一对一聊天。

示例查询是“What’s the weather in Dallas today”(今天达拉斯的天气怎么样?)。该应用程序首先会发送一条“Processing your request…”(正在处理您的请求…)消息作为初始响应。在 AgentCore Agent 完成其分析后,此临时消息将被实际的天气信息替换。由于集成了 AgentCore Memory,用户可以继续对话而无需重复。

AgAgentCore Slack 对话

频道集成:该应用可以添加到 Slack 频道中,用户可以通过提及 @agent-core-weather-agent 从频道内部调用它,如下面的图片所示。

理解集成架构

会话管理

Slack 将对话组织成由时间戳标识的线程。AgentCore 使用会话 ID 来维护对话上下文。该解决方案直接从 Slack 线程时间戳派生会话 ID,确保线程中的初始消息和回复共享相同的会话 ID。此方法不需要外部状态管理,并且会自动将不同的线程隔离到单独的会话中。

异步处理

AgentCore 调用可能比 Slack 的 3 秒 Webhook 超时时间长,尤其是在加载对话历史记录、进行多次工具调用或处理复杂推理时。该架构使用三个 Lambda 函数:

  1. 验证 Lambda – 验证 Slack 签名并立即返回 200 状态码
  2. SQS 集成 Lambda – 过滤事件(忽略机器人消息以帮助防止循环)并发送到队列
  3. Agent 集成 Lambda – 从队列处理消息,调用 AgentCore,并将响应发布到 Slack

这使得 Slack 能够立即收到确认,同时代理在后台处理请求。

对话内存

代理使用 AgentCore Memory 和 Strands 框架中的 AgentCoreMemorySessionManager 在消息之间维护对话上下文。此集成将 Slack 的线程模型映射到 AgentCore 会话管理。

Slack 线程到内存会话

每个 Slack 对话线程映射到一个唯一的内存会话:

  • Session ID:从 Slack 的线程时间戳派生(例如,1737849234.123456
  • Actor ID:Slack 用户 ID(例如,U01XXXXXXXX

当用户在 Slack 中开始对话时,无论是通过直接消息还是在频道中提及机器人,Slack 都会分配一个唯一的线程时间戳。该线程中的后续回复会共享相同的时间戳,从而形成自然的对话边界。代理运行时使用此线程时间戳作为 session_id,并将 Slack 用户 ID 作为 actor_id 来配置该特定对话的内存。

工具访问

AgentCore Gateway 提供了一个标准化的工具访问接口,支持 AWS Signature Version 4 (SigV4) 身份验证和 MCP 流格式。运行时使用自定义的 SigV4 签名 HTTP 客户端与 Gateway 进行通信。

或者,您可以通过提示 Slack 用户向其 IdP 进行身份验证来授权 AgentCore 运行时调用特定工具。虽然此架构不包含该实现,但 AgentCore 支持针对需要单独用户凭据的场景的用户特定授权流程。

可重用模式

Slack 集成堆栈对于 AgentCore 用例保持不变。要调整此解决方案,请在 AgentCore 堆栈中用您的业务逻辑替换天气工具,并保留内存集成和 Gateway 通信模式。对于特定于用户的代理,请启用 AgentCore Identity 以将用户令牌从 Slack 传递到运行时。

清理

运行 ./cleanup.sh 会删除 CDK 堆栈和相关资源。

结论

本博文演示了如何将 Amazon Bedrock AgentCore 与 Slack 集成。关键模式包括从 Slack 线程时间戳派生会话 ID、使用 SQS 处理 Slack 的响应超时、持久化对话历史记录以实现上下文连续性以及使用 SigV4 保护工具通信。

该架构是模块化的。Slack 集成层对于 AgentCore 用例无需更改,因为运行时和工具可以根据您的业务需求进行自定义。这意味着随着您的代理组合的增长,您可以更快地部署新的 AI 功能并降低维护开销。您的团队可以在不离开工作区的情况下获得 AI 帮助,这有助于提高代理的采用率并减少在工具之间切换所花费的时间。

GitHub 仓库 克隆完整解决方案即可开始。

其他资源


关于作者

Salman Ahmed

Salman Ahmed

Salman 是 AWS 的高级技术客户经理。他专注于指导客户完成 AWS 解决方案的设计、实施和支持。他结合了他在网络方面的专业知识和探索新技术的热情,帮助组织成功地度过他们的云之旅。工作之余,他喜欢摄影、旅行和观看他最喜欢的体育赛事。

Ravi Kumar

Ravi Kumar

Ravi 是 AWS 企业支持部的高级技术客户经理,他帮助旅游和酒店行业的客户优化他们在 AWS 上的云运营。他是一位注重结果的 IT 专业人士,拥有超过 20 年的经验。Ravi 对生成式 AI 充满热情,并积极探索其在云计算中的应用。在业余时间,Ravi 喜欢绘画等创意活动。他也喜欢打板球和去新的地方旅行。

Sergio Barraza

Sergio Barraza

Sergio 是 AWS 的高级技术客户经理,帮助客户设计和优化云解决方案。他拥有超过 25 年的软件开发经验,指导客户采用 AWS 服务。工作之余,Sergio 是一位多乐器演奏家,演奏吉他、钢琴和鼓,他还练习咏春拳。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区