将Amazon Bedrock AgentCore与Slack集成
将某机构的Bedrock AgentCore与Slack集成可将AI代理直接引入工作区。团队无需在应用间切换、丢失对话历史或重新认证即可与代理交互。该集成满足三项技术要求:验证Slack事件请求以确保安全、跨线程维护对话上下文、管理超出Slack超时限制的响应。
开发者通常需要为Slack集成构建自定义Webhook处理器。AgentCore通过提供内置对话记忆、对代理及其工具的安全访问以及跟踪代理使用情况的身份管理,帮助消除这项工作——所有这些都可在Slack内完成。
本文将演示如何使用某机构云开发工具包(CDK)构建Slack集成。内容包括如何部署包含三个专用Lambda函数的基础设施、正确配置事件订阅以满足Slack的安全要求,以及实现适用于多种代理用例的对话管理模式。示例中使用天气代理,但所构建的集成层完全可重用。可根据特定业务需求自定义运行时和工具,而无需更改Slack与代理的通信方式。
解决方案概述
该解决方案包含两个主要组件:Slack集成基础设施和带有工具的AgentCore运行时。集成基础设施负责路由和管理Slack与代理之间的通信,运行时则处理和响应查询。
集成基础设施使用API网关、Lambda、Secrets Manager和简单队列服务(SQS)实现无服务器集成。
代理已容器化并托管在AgentCore Runtime中运行。它使用Strands Agents SDK构建,该SDK与Bedrock AgentCore Gateway集成以访问工具,并与AgentCore Memory集成以获取对话历史。运行时在整个对话过程中维护上下文,并使用模型上下文协议(MCP)调用工具。
以下部分将介绍这些组件如何在架构中协同工作。
架构图
下图展示了解决方案架构,包含三个关键部分:
A部分 – 镜像构建基础设施:WeatherAgentImageStack CDK部署容器镜像构建流水线(S3存储桶、CodeBuild项目和ECR仓库)。使用CodeBuild创建AWS Graviton(ARM64)容器镜像,存储在ECR仓库中供AgentCore Runtime使用。
B部分 – AgentCore组件:WeatherAgentCoreStack CDK部署AgentCore Runtime、Gateway、Memory和Lambda函数。Runtime使用Strands Agents Framework(开源AI代理SDK)来编排模型调用、工具调用和对话记忆。
C部分 – Slack集成基础设施:WeatherAgentSlackStack部署集成基础设施(API Gateway、Secrets Manager、Lambda函数和SQS)。通过三个Lambda函数处理Webhook验证、SQS队列和消息处理。该层对AgentCore用例可重用。
请求流程包含以下步骤:
- 用户在Slack中通过私信或在频道中使用@appname发送消息
- Slack向API Gateway发送Webhook POST请求
- 请求转发至验证Lambda函数
- Lambda从Secrets Manager检索Slack签名密钥和机器人令牌以验证真实性
- 验证后,Lambda异步调用SQS集成Lambda
- SQS集成Lambda在Slack线程中向用户发送“正在处理您的请求...”消息
- SQS集成Lambda将消息发送到SQS FIFO队列
- 队列触发Agent集成Lambda
- Lambda使用用户查询和Slack线程时间戳中的会话ID调用AgentCore Runtime
- AgentCoreMemorySessionManager使用会话ID(线程时间戳)和参与者ID(用户ID)从AgentCore Memory检索对话历史
- Strands Framework使用MCP协议从AgentCore Gateway检索工具
- Strands Framework使用消息、上下文和工具调用Bedrock模型(Nova Pro)
- 模型确定调用哪些工具并生成请求
- Gateway将工具调用路由到Lambda上的MCP服务器,该服务器执行天气工具
- 工具结果返回Strands Framework,后者可在需要时再次调用模型
- Strands Framework将对话轮次存储在AgentCore Memory中
- Agent集成Lambda用代理的响应更新“正在处理您的请求...”消息
先决条件
该解决方案需要以下先决条件:
- 具有以下权限的某机构账户:Bedrock AgentCore、Lambda、API Gateway、SQS、ECR、CodeBuild、IAM、Secrets Manager、Bedrock
- 配置了凭证的AWS CLI(v2.x)
- 安装Node.js(v18或更高版本)和npm
- 安装并在账户中引导AWS CDK
- Slack账户(两种选择):公司Slack账户需与管理员合作创建和发布集成应用,或使用沙箱组织;也可创建个人Slack账户和工作区进行测试
步骤1:创建Slack应用
在Slack API页面选择“Create New App”,选择“From scratch”,输入应用名称“agent-core-weather-agent”,选择工作区,然后创建应用。
在“OAuth & Permissions”页面的“Bot Token Scopes”下添加以下范围:app_mentions:read、chat:write、im:history、im:read、im:write。
安装应用到工作区并复制Bot User OAuth Token保存备用。
在“Basic Information”下找到Signing Secret并复制保存备用。
在“App Home”的“Show Tabs”部分启用“Allow users to send Slash commands and messages from the messages tab”。
步骤2:部署基础设施
克隆GitHub仓库并进入项目目录,设置Slack凭证为环境变量,运行部署脚本。部署大约需要10-15分钟,创建三个CDK堆栈。部署输出提供下一步所需的Webhook URL。
步骤3:配置Slack事件订阅
返回Slack应用,在“Event Subscriptions”中启用事件,在Request URL字段粘贴部署输出的Webhook URL。验证后,在“Subscribe to bot events”中添加app_mention和im事件。重新安装应用。
步骤4:测试集成
在Slack的Apps部分找到agent-core-weather-agent。可通过在频道中输入/invite @agent-core-weather-agent邀请应用到频道。用户可通过@提及代理获取天气信息,或直接与代理私聊。
理解集成架构
会话管理:Slack使用时间戳标识线程。解决方案直接从Slack线程时间戳派生会话ID,确保线程中的初始消息和回复共享相同会话ID,无需外部状态管理。
异步处理:AgentCore调用可能超过Slack的3秒Webhook超时。架构使用三个Lambda函数:验证Lambda(立即返回200状态码)、SQS集成Lambda(过滤事件并发送到队列)、Agent集成Lambda(处理消息、调用AgentCore并发布响应到Slack)。
对话记忆:代理使用AgentCore Memory和Strands框架中的AgentCoreMemorySessionManager跨消息维护对话上下文。每个Slack对话线程映射到唯一的记忆会话,会话ID派生自Slack线程时间戳,参与者ID为Slack用户ID。
工具访问:AgentCore Gateway提供标准化的工具访问接口,支持SigV4认证和MCP流格式。运行时使用自定义SigV4签名HTTP客户端与Gateway通信。
可重用模式:Slack集成堆栈对AgentCore用例无需修改即可工作。替换天气工具为业务逻辑,保留记忆集成和Gateway通信模式即可。
清理
运行清理脚本移除CDK堆栈及相关资源。
结论
本文演示了将Bedrock AgentCore与Slack集成的过程。关键模式包括从Slack线程时间戳派生会话ID、使用SQS处理Slack响应超时、持久化对话历史以保持上下文连续性、以及使用SigV4保护工具通信。该架构是模块化的,Slack集成层对AgentCore用例无需修改即可工作,可快速部署新的AI能力并减少维护开销。FINISHED