使用 AI SDK 构建 Slack 聊天机器人指南

292 阅读3分钟

这份指南将带你一步步创建一个基于 AI SDK 的 Slack 聊天机器人。这个机器人可以根据对话上下文,自动回复你的私聊消息或在频道中被 @ 提及时响应。


一、Slack 应用准备工作

在开始编程之前,我们需要先在 Slack 上创建并配置一个 App:

  1. 访问 api.slack.com/apps

  2. 点击 “Create New App”,选择 “From scratch”

  3. 输入应用名称并选择你的工作区(workspace)

  4. 在左侧菜单点击 OAuth & Permissions,添加以下权限(Bot Token Scopes):

    • app_mentions:read 读取提及机器人的消息
    • chat:write 发送消息
    • im:history 读取私信历史
    • im:write 回复私信
    • assistant:write 使用 Slack 的 AI 助理接口
  5. 安装应用到你的工作区,并复制生成的 Bot TokenSigning Secret(后续会用)

  6. 在 “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 会自动:

  1. 理解意图是天气查询
  2. 使用工具获取数据
  3. 生成最终答复

八、部署到 Vercel

  1. 安装 Vercel 命令行工具:
pnpm install -g vercel
  1. 部署:
vercel deploy
  1. 将部署地址填入 Slack 的 Event Subscriptions 设置中:

  2. 设置环境变量(在 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 表现
  • 加入统计分析,追踪用户使用情况