内容
<a href="https://github.com/your-username/amber-slack"> </a>
一款学习如何跨多个MCP工具路由问题的Slack代理。
大多数Slack代理都只连接一个工具,并在特定条件下调用它。Amber将工具选择视为一个学习路由问题 - 她对每个回答的反应都会更新她的路由先验概率,因此在使用过程中会变得更加准确。
为 [Slack代理构建挑战](https://slack-agent-builder.devpost.com) 而建 - 2026年7月。
## 功能
在Slack中向Amber提问。她会判断连接的工具(GitHub、Google Drive、日历、Notion、网络搜索)中哪一个是回答问题的正确工具,运行查询,并以线程回复的形式发布答案。
你: `/ask 什么PR阻塞了发布?`
Amber: `正在从your-org/main-repo拉取打开的PR...`
目前有3个PR被阻塞:
• #142 — 认证重构(等待来自 @kemi 的审查)
• #138 — 支付提供商切换(CI失败)
• #131 — 迁移脚本(合并冲突)
路由方式:GitHub(置信度0.91)
用 👍 或 👎 反应,Amber会更新她的路由先验概率。随着时间的推移,她会学习哪些工具适用于哪些类型的问题。
## 架构
请求管道中的五个组件加上一个反馈环路:
| 组件 | 功能 |
|-------------|---------------------------------------------------------------|
| 分类器 | 从传入的查询中提取特征 |
| 路由器 | 咨询学习先验以预测最佳工具 |
| 规划器 | 生成结构化计划,有时为多步骤 |
| 执行器 | 调用一个或多个MCP服务器并收集结果 |
| 合成器 | 向Slack写入干净的答案 |
| 评估器 | 从 👍/👎 反应中评分结果,更新路由器 |
路由器的学习状态存储在Supabase中。冷启动使用启发式先验;表格在每次查询后更新。
## Amber支持的工具
Amber连接到这些MCP服务器:
- **GitHub** — 仓库、PR、问题、提交、工作流(官方MCP服务器)
- **Google Drive** — 搜索和读取文档
- **Google Calendar** — 事件和可用性
- **Notion** — 页面和数据库
- **实时搜索** — 网络,为获取最新信息
新工具注册为配置 - 路由逻辑不会改变。
## 技术栈
- **TypeScript** + **Slack Bolt** 用于Slack应用
- **Google Gemini** (2.5 Flash)作为大脑
- **模型上下文协议** 用于工具集成
- **Supabase** (PostgreSQL)用于路由器状态和查询日志
## 设置
```bash
# 1. 克隆并安装
git clone https://github.com/your-username/amber-slack.git
cd amber-slack
pnpm install
# 2. 下载GitHub MCP服务器二进制文件
mkdir -p bin
curl -L $(curl -s https://api.github.com/repos/github/github-mcp-server/releases/latest \
| grep "browser_download_url.*Linux_x86_64.tar.gz" \
| cut -d '"' -f 4) | tar -xz -C bin
# 3. 配置.env文件
cp .env.example .env
# 填写:SLACK_BOT_TOKEN、SLACK_APP_TOKEN、SLACK_SIGNING_SECRET、
# GEMINI_API_KEY、GITHUB_TOKEN 和 Supabase 密钥
# 4. 运行
pnpm run dev
```
然后在Slack中,向Amber发送私信或在她被邀请的任何频道中使用 `/ask`。
## 环境变量
| 名称 | 含义 |
|--------------------------|--------------------------------------------|
| `SLACK_BOT_TOKEN` | Slack应用的xoxb-机器人令牌 |
| `SLACK_APP_TOKEN` | Slack应用的xapp-应用级令牌(套接字模式) |
| `SLACK_SIGNING_SECRET` | Slack应用的签名密钥 |
| `GEMINI_API_KEY` | Google AI Studio API密钥 |
| `GITHUB_TOKEN` | GitHub个人访问令牌(仓库范围) |
| `SUPABASE_URL` | Supabase项目网址 |
| `SUPABASE_ANON_KEY` | Supabase匿名密钥 |
## 为什么叫“Amber”
Amber是光在减速到足以思考时所呈现的状态。对于一个学习而不是简单反应的代理来说,这个名字很合适。
## 状态
为Slack代理构建挑战而进行的积极开发。
## 许可证
MIT