要让您的 Chainlit 应用在 Slack 上可用,您需要创建一个 Slack 应用并设置必要的环境变量。

工作原理

Slack 机器人将监听频道和私信中提及它的消息。它将根据上下文将回复发送到专用话题或私信中。

预览

支持的功能

消息流式传输元素音频询问用户聊天历史聊天配置反馈

安装 Slack Bolt 库

Slack Bolt 库不包含在 Chainlit 的依赖项中。您需要手动安装它。

pip install slack_bolt

创建 Slack 应用

首先,导航到 Slack API 的 Slack 应用仪表板。在这里,您会看到一个绿色的按钮,上面写着 创建新应用 (Create New App)。点击此按钮后,选择 从零开始创建您的应用 (create your app from scratch) 的选项。

为您的机器人创建一个名称,例如“ChainlitDemo”。选择您希望机器人所在的 workspace。

创建 Slack 应用

本地工作

如果您在本地工作,您需要将本地 Chainlit 应用暴露到互联网上以接收来自 Slack 的消息。您可以使用 ngrok 来实现。

ngrok http 8000

这将为您提供一个公共 URL,可用于设置应用 manifest。请记住在将 Chainlit 部署到公共主机后替换此 URL。

设置应用 Manifest

转到 应用 Manifest (App Manifest) 并粘贴以下 Yaml。

{placeholders} 替换为您自己的值。
display_information:
  name: { APP_NAME }
features:
  bot_user:
    display_name: { APP_NAME }
    always_online: false
oauth_config:
  scopes:
    user:
      - im:history
      - channels:history
    bot:
      - app_mentions:read
      - channels:read
      - chat:write
      - files:read
      - files:write
      - im:history
      - im:read
      - im:write
      - users:read
      - users:read.email
      - channels:history
      - groups:history
settings:
  event_subscriptions:
    request_url: https://{ CHAINLIT_APP_HOST }/slack/events
    bot_events:
      - app_home_opened
      - app_mention
      - message.im
  interactivity:
    is_enabled: true
    request_url: https://{ CHAINLIT_APP_HOST }/slack/events
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

点击 保存更改 (Save Changes)。

设置应用 Manifest

您会看到一个警告,指出 URL 未经验证。目前可以忽略它。

[可选] 允许用户向 Chainlit 发送私信

默认情况下,应用只监听频道中的提及消息。

如果您想允许用户向应用发送私信,请转到 应用主页 (App Home) 并启用 “允许用户从消息选项卡发送斜杠命令和消息 (Allow users to send Slash commands and messages from the messages tab)”。

允许私信

将 Slack 应用安装到您的 Workspace

导航到 安装应用 (Install App) 选项卡并点击 安装到 Workspace (Install to Workspace)。

设置环境变量

在应用代码外部设置环境变量。

机器人 Token

安装 Slack 应用后,您将看到 机器人用户 OAuth Token (Bot User OAuth Token)。将其设置为 Chainlit 应用中的环境变量。

复制机器人 Token

SLACK_BOT_TOKEN=your_bot_token

签名密钥

导航到 基本信息 (Basic Information) 选项卡并复制 签名密钥 (Signing Secret)。然后将其设置为 Chainlit 应用中的环境变量。

复制签名密钥

SLACK_SIGNING_SECRET=your_signing_secret

启动 Chainlit 应用

由于 Chainlit 应用未运行,Slack 应用将无法与其通信。

作为示例,我们将使用这个简单的应用

my_app.py
import chainlit as cl

@cl.on_message
async def on_message(msg: cl.Message):
    # Access the original slack event
    print(cl.user_session.get("slack_event"))
    # Access the slack user
    print(cl.user_session.get("user"))

    # Access potential attached files
    attached_files = msg.elements

    await cl.Message(content="Hello World").send()

提醒:请确保已设置环境变量,并且您的本地 Chainlit 应用已通过 ngrok 暴露到互联网。

启动 Chainlit 应用

chainlit run my_app.py -h

使用 -h 参数可以避免打开默认的 Chainlit UI,因为我们将通过 Slack 使用它。

现在您应该能够通过 Slack 与您的 Chainlit 应用进行交互了。

聊天历史

聊天历史可以直接通过 fetch_slack_message_history 方法获取。它将获取当前话题或私信频道中的最新消息。

import chainlit as cl
import discord


@cl.on_message
async def on_message(msg: cl.Message):
    fetch_slack_message_history = cl.user_session.get("fetch_slack_message_history")

    if fetch_slack_message_history:
        print(await fetch_slack_message_history(limit=10))

    # Your code here