使用说明
NILA:自然在线敏捷-敏捷团队的Slack Bot
NILA是一个Slack机器人,可以帮助开发团队直接从他们的对话中管理敏捷工作流。该项目演示了如何使用Firebase Genkit构建一个强大的AI Agent,利用工具调用将其功能扩展到简单的对话之外。
建筑
NILA遵循一个简单的流程来处理用户请求:
- 💬 他们懈怠了:用户通过在Slack频道中提及机器人与NILA进行交互
- ⚡️ Webhook(云功能):Firebase云函数处理传入的Slack事件
- 🧠 AI代理(Firebase Genkit):请求由LLM驱动的代理处理。使用Genkit,您可以选择自己选择的LLM模型。我们在这个演示中使用了Gemini 2.5 Flash
- ⚒️ 工具:代理使用定制的工具,我们可以定义自己和GitHub MCP服务器来采取行动。在这个演示中,我们构建了一个工具,用于汇总线程中的消息并起草问题。
以这种方式构建它意味着我们可以将AI Flow与您选择的其他Webhook重用。您只需在中创建另一个云功能,即可将NILA扩展到与LINE、WhatsApp或任何其他平台一起使用 src/index.ts 而核心AI代理逻辑保持不变。
先决条件
- Node.js
- pnpm
- Genkit
- Firebase命令行界面
- ngrok
设置
-
安装依赖项
cd functions pnpm install -
设置Firebase项目
- 创建新的Firebase项目
- 启用Blazed计划(按需付费)以使用Firebase功能
- 更新
.firebaserc项目根目录中的文件,以包含Firebase项目名称
{ "projects": { "default": "[your_project_name]" } } -
设置Slack应用程序
- 首选https://api.slack.com/apps点击“创建新应用”
- 选择“从应用清单”选项,然后选择您的工作区
- 用您的应用程序名称更新下面的JSON
{ "display_information": { "name": "[YOUR_APP_NAME]", "description": "[YOUR_APP_DESCRIPTION]", }, "features": { "bot_user": { "display_name": "[YOUR_APP_NAME]", "always_online": true } }, "oauth_config": { "scopes": { "bot": [ "app_mentions:read", "chat:write", "files:read", "groups:history", "incoming-webhook", "mpim:history" ] } }, "settings": { "event_subscriptions": { "request_url": "https://[YOUR_DOMAIN]/events", "bot_events": [ "app_mention", "message.mpim" ] }, "org_deploy_enabled": true, "socket_mode_enabled": false, "token_rotation_enabled": false } }- 转到“基本信息”,在“应用程序凭据”下找到“签名密钥”。这将是一个环境变量
SLACK_SIGNING_SECRET - 转到“OAuth和权限”,找到“Bot用户OAuth令牌”。这将是一个环境变量
SLACK_BOT_TOKEN - 将您的机器人添加到Slack频道,以便我们在后续步骤中进行测试
/invite @[YOUR_APP_NAME] -
设置GitHub令牌 要允许您的AI代理管理GitHub,您需要
GITHUB_PERSONAL_ACCESS_TOKENMCP服务器。- 首选 创建GitHub个人访问令牌.设置令牌的名称和描述
- 选择资源所有者:这可以是您自己的GitHub或您的组织。如果您不是组织管理员,您可能需要管理员批准您创建令牌的请求
- 选择仓库访问权限:取决于你想给你的人工智能多少权力。我只会选择我只感兴趣的仓库
- 选择权限:MCP服务器可以使用许多GitHub API,因此启用您认为授予AI工具的权限是一种很好的做法。对于此AI代理,我们只需要对Issues进行读写访问,这也将自动启用元数据的强制权限
- 点击“生成令牌”,您应该得到一个以开头的令牌
github_pat_[xyz]请确保其安全,因为您将无法再次访问它。
-
设置环境变量
cp .secret.local.example .secret.local -
将API密钥添加到
.secret.local:GOOGLEAI_API_KEY=your_api_key SLACK_BOT_TOKEN=your_bot_token SLACK_SIGNING_SECRET=your_signing_secret GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token
地方发展
使用Firebase模拟器套件和Firebase Genkit UI进行本地测试。
-
运行本地开发服务器
pnpm run dev -
设置ngrok以公开您的本地服务器(使您的本地模拟器可以在线访问)
ngrok http 5001 -
使用ngrok URL更新Slack应用程序的事件订阅URL。它位于“事件订阅”下
https://[your-ngrok-id].ngrok.io/[YOUR_PROJECT_NAME]/us-central1/slack等待请求URL验证确认,然后单击“保存更改”按钮
-
将Slack聊天机器人添加到频道中,并通过提及其名称来发送您的第一条消息。
@NILA Hello, can you help me?您应该已经收到回复消息,首先说“键入…”,然后是AI代理的准确回复。
调试
- 使用Firebase模拟器调试您的webhook功能http://localhost:4001/logs
- 使用Firebase Genkit UI调试您的AI Flowhttp://localhost:4000/
部署
要使用Firebase进行身份验证并访问您的项目,请使用Firebase CLI登录命令:
$ firebase login
为了在使用Firebase函数时保护密钥的安全,请将密钥作为秘密值存储在Google Cloud secret Manger中:
$ firebase functions:secrets:set GOOGLEAI_API_KEY
? Enter a value for GOOGLEAI_API_KEY [input is hidden]
$ firebase functions:secrets:set SLACK_BOT_TOKEN
? Enter a value for SLACK_BOT_TOKEN [input is hidden]
$ firebase functions:secrets:set SLACK_SIGNING_SECRET
? Enter a value for SLACK_SIGNING_SECRET [input is hidden]
$ firebase functions:secrets:set GITHUB_PERSONAL_ACCESS_TOKEN
? Enter a value for GITHUB_PERSONAL_ACCESS_TOKEN [input is hidden]
要确认您的密钥已正确存储为机密,请使用以下命令:
$ firebase functions:secrets:access OPENAI_API_KEY
your_api_key
$ firebase functions:secrets:access SLACK_BOT_TOKEN
your_bot_token
$ firebase functions:secrets:access SLACK_SIGNING_SECRET
your_signing_secret
$ firebase functions:secrets:set GITHUB_PERSONAL_ACCESS_TOKEN
your_github_personal_access_token
保护好密钥后,您就可以将应用程序部署到Firebase Functions了:
$ pnpm run deploy
部署后,使用生产URL再次更新Slack应用程序的事件订阅URL。
https://slack-[your_function_id]-uc.a.run.app/events.更换 [your_function_id] 您可以在Firebase控制台的函数仪表板下找到Firebase项目值。
NILA建议提示
@nila Hello! Can you help me track our project tasks?
@nila Create a new bug report for the login page crash on mobile devices
@nila Draft a task for implementing email notifications when tasks are assigned
@nila List all open bugs in our repository
@nila What's the status of the dashboard page?
@nila Create a task to refactor the payment processing module with proper test coverage
尝试这些提示或变体,看看NILA如何帮助您的团队直接从Slack对话中管理工作流程。
鸣谢
本项目建立在以下基础之上:
- Yuki Nagae的 Genkit Firebase功能松弛螺栓示例
- Handy的Slack util函数来自 Vercel的人工智能SDK Slackbot
许可证
Apache许可证
