DoppelBot:用LLM替换你的CEO
DoppelBot是一个Slack应用,它能抓取目标用户在Slack中的消息,并对大型语言模型(OpenLLaMa)进行微调,学习如何像目标用户一样回应。
所有组件,包括微调、推理和抓取,都是无服务器的,运行在Modal上。
工作原理
阅读文档。
使用方法
- 安装应用
- 在任何频道中,运行
/doppel <user>
。这里的<user>
可以是你想要模仿的用户的Slack昵称或真实姓名。注意:目前我们限制每个工作区只能有一个目标用户,安装后不能更改。 - 等待机器人完成训练(几分钟到一小时不等,取决于你的用户在Slack上的活跃程度)。你可以再次运行上述命令来检查状态。注意:Modal不会存储用于训练的任何Slack消息;我们只存储训练状态。
- 可选:将机器人重命名为
<user>-bot
(或任何你想要的名称)。- 前往管理应用页面,找到
DoppelBot
。 - 点击
应用详情
。 - 点击
配置
。 - 滚动到名为
机器人用户
的部分。点击编辑
来更改名称。
- 前往管理应用页面,找到
- 在任何公共Slack频道中,在消息中包含
@doppel
(或如果你更改了名称,则使用新名称)将召唤机器人。
开发
这个仓库包含了你自己运行DoppelBot所需的一切。
设置Modal
- 创建一个Modal账户。请注意,我们目前有一个等待名单——如果你想更快地被移出等待名单,请联系我们。
- 在你当前的Python虚拟环境中安装
modal-client
(pip install modal-client
)。 - 在你的环境中设置Modal令牌(
modal token new
)。
创建Slack应用
- 前往 https://api.slack.com/apps 并点击创建新应用程序。
- 如果询问您想要如何创建应用程序,请选择从头开始。
- 为您的应用程序命名并选择您的工作区。
- 在左侧导航栏中转到功能 > OAuth 和权限。
在作用域 > 机器人令牌作用域部分下,添加以下作用域:
app_mentions:read
channels:history
channels:join
channels:read
chat:write
chat:write.customize
commands
users.profile:read
users:read
- 在同一页面的您工作区的 OAuth 令牌部分下, 点击安装到工作区(如果已安装,则重新安装)。
- 创建一个 Modal 密钥
- 在创建密钥页面上,选择 Slack 作为类型。
- 回到 Slack 应用程序设置页面,在左侧导航栏中转到设置 > 基本信息。
在应用程序凭据下,复制签名密钥并将其值粘贴到键
SLACK_SIGNING_SECRET
中。 - 再次转到 OAuth 和权限并复制机器人用户 OAuth 令牌,
将其值粘贴到键
SLACK_BOT_TOKEN
中。 - 将此密钥命名为
slack-finetune-secret
。
(可选)设置 Weights & Biases
要在 Weights & Biases 上跟踪您的微调运行,您需要创建一个 Weights & Biases 账户,然后创建一个 Modal 密钥并输入凭据(在密钥向导中点击 Weights & Biases 并按照步骤操作)。然后,在 src/common.py
中将 WANDB_PROJECT
设置为您想要使用的项目名称。
部署您的应用程序
在此仓库的根目录下,运行 modal deploy src.bot
。这将把应用程序部署到 Modal,并在终端中打印一个 URL(类似 https://aksh-at--doppel.modal.run/
)。
现在,我们需要将 Slack 应用程序指向这个 URL:
- 在左侧导航栏中转到功能 > 事件订阅:
- 打开它。
- 将上面的 URL 粘贴到请求 URL 字段中,并等待验证。
- 在订阅机器人事件下,点击添加机器人用户事件并添加
@app_mention
。 - 点击保存更改。
- 在左侧导航栏中转到功能 > 斜杠命令。点击创建新命令。将命令设置为
/doppel
,请求 URL 设置为与上面相同的 URL。 - 返回基本信息页面,并点击安装到工作区。
(可选)多工作区应用程序
如果您只想在自己的工作区中运行应用程序,上述步骤就足够了。如果您想将应用程序分发给其他人,您需要设置一个多工作区应用程序。要启用此功能,请在 src/common.py
中将 MULTI_WORKSPACE_SLACK_APP
设置为 True
。
然后,您需要设置 Neon,这是一个无服务器 Postgres 数据库,用于存储用户数据:
- 在 Neon 上创建账户和数据库。
- 使用数据库凭据创建 Modal 密钥。
- 在此仓库的根目录下运行
modal run src.db
以创建表格。 - 在你的 Modal Slack 密钥中添加两个新的环境变量:
SLACK_CLIENT_ID
和SLACK_CLIENT_SECRET
(这些值应该在 Slack 应用的设置 > 基本信息中)。 - 在 Slack 应用设置页面,进入设置 > 管理分发。重定向 URL 应该是
https://<你的modal-run-url>/slack/oauth_redirect
,其中<你的modal-run-url>
是你在上面部署应用后收到的 URL。确保一切看起来正确后,点击激活公共分发。
现在,使用 modal deploy src.bot
部署应用将为你处理所有 OAuth 的复杂细节,并创建一个可以被任何人安装的多工作区 Slack 应用。默认情况下,安装链接位于 https://<你的modal-run-url>/slack/install
。
(可选)手动运行每个步骤
如果你愿意,也可以手动运行每个步骤。这对于调试或迭代特定功能很有用。
- 爬虫:
modal run src.scrape::scrape --user="<用户>"
- 微调:
modal run --detach src.finetune --user="<用户>"
(注意--detach
允许你随时使用 ctrl+c 而不会终止训练运行) - 推理:
modal run src.inference --user="<用户>"