这份指南将带你一步步创建一个基于 AI SDK 的 Slack 聊天机器人。这个机器人可以根据对话上下文,自动回复你的私聊消息或在频道中被 @ 提及时响应。
一、Slack 应用准备工作
在开始编程之前,我们需要先在 Slack 上创建并配置一个 App:
-
点击 “Create New App”,选择 “From scratch”
-
输入应用名称并选择你的工作区(workspace)
-
在左侧菜单点击 OAuth & Permissions,添加以下权限(Bot Token Scopes):
app_mentions:read读取提及机器人的消息chat:write发送消息im:history读取私信历史im:write回复私信assistant:write使用 Slack 的 AI 助理接口
-
安装应用到你的工作区,并复制生成的 Bot Token 和 Signing Secret(后续会用)
-
在 “App Home” -> “Show Tabs” -> 勾选 “Allow users to send Slash commands and messages from the chat tab”
二、项目搭建
技术栈:
- AI SDK(由 Vercel 提供)
- Slack Web API
- Vercel 部署平台
- OpenAI
开始步骤:
git clone https://github.com/vercel-labs/ai-sdk-slackbot.git
cd ai-sdk-slackbot
git checkout starter
pnpm install
三、项目结构说明
Starter 分支里包含了关键代码:
lib/slack-utils.ts:Slack 工具函数,如验证请求、获取历史消息等lib/handle-messages.ts&lib/handle-app-mention.ts:处理不同类型的消息事件api/events.ts:API 入口,处理 Slack 的事件请求
四、事件处理流程(Event Handler)
Slack 会以 POST 请求发送事件到你的服务器,关键逻辑在 api/events.ts 中:
- 验证请求是否合法(防止伪造)
- 判断事件类型(提及、私聊、线程开始等)
- 调用相应处理函数:
if (event.type === 'app_mention') handleNewAppMention(...)
if (event.type === 'assistant_thread_started') assistantThreadMessage(...)
if (event.type === 'message') handleNewAssistantMessage(...)
注意:使用 waitUntil() 机制可以让你先快速响应 Slack(避免重试),后台再异步处理 AI 回复。
五、各类消息的具体处理
1. 提及机器人(app_mention)
当用户在频道中提及机器人时触发:
- 判断消息不是机器人发的(防止自我回应)
- 在消息线程中发送 “正在思考...” 提示
- 获取当前对话上下文,调用 LLM 生成回复
- 更新提示消息为 AI 回复内容
2. 开始新线程(assistant_thread_started)
当用户在 App Home 发起新的线程时触发:
- 回复欢迎信息
- 设置推荐问题(提示可选对话)
prompts: [
{ title: '查看天气', message: '现在伦敦的天气怎么样?' },
{ title: '查看新闻', message: 'BBC 最近的英超新闻是什么?' }
]
3. 私聊机器人(message)
私聊中收到用户信息时触发:
- 检查消息是否来自真实用户
- 获取历史消息上下文
- 调用 AI 生成回复并发送
六、核心 AI 回答逻辑
位于 lib/generate-response.ts:
const { text } = await generateText({
model: openai('gpt-4o'),
system: `你是一个 Slack AI 助理。回复要简洁清晰。
- 不要 @ 任何人。
- 当前日期是:${new Date().toISOString().split('T')[0]}`,
messages,
});
此函数通过 AI SDK 调用 OpenAI(如 GPT-4o),并把 Markdown 转换为 Slack 可识别的格式。
七、集成实用工具(Tool Functions)
AI SDK 支持扩展工具,让机器人具备执行任务的能力,例如:
- 查询天气:
getWeather - 上网搜索:
searchWeb
示例代码:
tools: {
getWeather: tool({ ... }),
searchWeb: tool({ ... })
}
用户提问如“北京天气怎么样”,AI 会自动:
- 理解意图是天气查询
- 使用工具获取数据
- 生成最终答复
八、部署到 Vercel
- 安装 Vercel 命令行工具:
pnpm install -g vercel
- 部署:
vercel deploy
-
将部署地址填入 Slack 的 Event Subscriptions 设置中:
-
订阅以下事件:
app_mentionassistant_thread_startedmessage:im
-
设置环境变量(在 Vercel 项目的 Settings 页面):
SLACK_BOT_TOKEN=你的 Slack Token
SLACK_SIGNING_SECRET=你的 Slack Secret
OPENAI_API_KEY=你的 OpenAI Key
EXA_API_KEY=你的 Exa 搜索 API Key
记得设置完环境变量后重新部署。
九、后续拓展建议
你已经成功构建了一个智能 Slack 机器人!下一步可以尝试:
- 为用户添加记忆功能(上下文连续性)
- 添加数据库或知识库查询工具
- 使用 Block Kit 提升消息的 UI 表现
- 加入统计分析,追踪用户使用情况