如何在 Slack 中构建类似 Perplexity 的聊天机器人?

2025-05-25

如何在 Slack 中构建类似 Perplexity 的聊天机器人?

TL;DR

我在 Slack 上花费了大量时间,经常需要深入研究信息。为此,我不得不去谷歌搜索,手动研究各种主题,这在人工智能时代似乎效率低下。

因此,我构建了一个 Slack 聊天机器人来访问互联网并查找带有引文的相关信息,类似于 Perplexity。

以下是我构建它的方法;

  • 在工作区中配置 SlackBot。
  • 机器人将工作区中的所有消息转发给事件监听器。
  • 解析消息事件中的信息并将其传递给 AI 代理。
  • 配备 Exa 和 Tavily 等工具的 AI 代理会在互联网上搜索主题并返回响应。
  • 然后,代理的回复将作为评论发布在主消息线程中。

立即在 Composio Playground👇 上试用 Agent。

现在就在 Playground 上尝试一下🚀

什么是人工智能代理?

在继续之前,让我们先了解一下什么是 AI 代理。

人工智能代理是由人工智能模型驱动的系统,可以自主执行任务、与环境交互并根据其编程和处理的数据做出决策。

Slack Ritual


您的 AI 代理工具平台🛠️

Composio 是一个开源平台,提供超过 150 种可用于生产的工具和集成,例如 GitHub、Slack、Code Interpreter 等,使 AI 代理能够完成复杂的现实世界工作流程。

动图

请帮我们加一颗星。🥹

这将有助于我们创作更多这样的文章💖

为 Composio.dev 仓库加星标⭐


让我们开始吧🔥

从创建虚拟环境开始。

python -m venv slack-agent
cd slack-agent
source bin/activate
Enter fullscreen mode Exit fullscreen mode

现在,安装库。

pip install composio-core composio-llamaindex 
pip install llama-index-llms-openai python-dotenv
Enter fullscreen mode Exit fullscreen mode

图书馆的简要描述

  • 这 composio-core 是访问和配置工具及集成的主要库。它还具有 CLI API,可方便地管理集成和触发器。
  • 这 composio-llamaindex 是 Composio 的LlamaIndex 插件。它允许您将 LlamaIndex 的所有功能与 Composio 工具一起使用。
  • 这 llama-index-llms-openai 是 LlamaIndex 的一个附加库,可让您在其框架内使用 OpenAI 模型。
  • python-dotenv 将文件中的环境变量加载 .env 到 Python 项目的环境中,从而更容易管理配置设置。

接下来,创建一个 .env 文件并为 OpenAI API 密钥添加环境变量。

OPENAI_API_KEY=your API key
Enter fullscreen mode Exit fullscreen mode

配置集成 *🔧 *

Composio 允许您配置 SlackBot,而无需为集成编写任何代码。Composio 会处理所有用户身份验证和授权流程,因此您可以专注于更快地交付。

您可以使用 Composio 的专用 CLI API 从终端执行此操作。

但在此之前,请从 CLI 登录 Composio 并通过运行以下命令来更新应用程序。

composio login
composio apps update
Enter fullscreen mode Exit fullscreen mode

完成登录流程以使用 Composio CLI API。

执行以下命令来配置 Slackbot 和 GitHub 用户帐户。

composio add slackbot
Enter fullscreen mode Exit fullscreen mode

现在,完成身份验证流程以添加 Slackbot 集成。

完成集成流程后,您的实时集成将出现在 “集成” 部分。

Composio 集成

一旦 SlackBot 集成,请转到工作区中的应用程序部分,获取 BOT ID,并将其添加到 .env 文件中。

Slack 机器人 ID

设置 SlackBot 触发器⚙️

触发器是预定义的条件,当满足这些条件时会激活代理。Composio 提供了一个内置的事件监听器来捕获这些触发事件。

在这里,我们设置了一个 SlackBot 触发器,当新消息添加到工作区时获取事件数据,当新消息添加到线程时设置另一个触发器。

composio triggers enable slack-receive-message
composio triggers enable slackbot_receive_thread_reply

Enter fullscreen mode Exit fullscreen mode

转到触发器部分并添加您需要的触发器。

此外,您还可以从SlackBot 页面的仪表板添加触发器。

转到触发器部分并添加您需要的触发器。

集成页面

构建 Agentic 工作流程

现在我们已经设置了集成和触发器,让我们继续编码部分。

猴子代码

步骤 1:导入包并定义工具

创建一个main.py文件并粘贴以下代码。

import os
from dotenv import load_dotenv
from composio_llamaindex import Action, App, ComposioToolSet
from composio.client.collections import TriggerEventData
from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.llms import ChatMessage
from llama_index.llms.openai import OpenAI

load_dotenv()

llm = OpenAI(model="gpt-4o")

# Bot configuration constants
BOT_USER_ID = os.environ["SLACK_BOT_ID"]  # Bot ID for Composio. Replace with your bot member ID, once the bot joins the channel.
RESPOND_ONLY_IF_TAGGED = (
    True  # Set to True to have the bot respond only when tagged in a message
)

# Initialize the Composio toolset for integration with the OpenAI Assistant Framework
composio_toolset = ComposioToolSet()
composio_tools = composio_toolset.get_tools(
    apps=[App.CODEINTERPRETER, App.EXA, App.FIRECRAWL, App.TAVILY]
)

Enter fullscreen mode Exit fullscreen mode

上面的代码块是这样的,

  • 我们导入了项目所需的包和模块。
  • 使用 将变量设置.env为环境变量load_dotenv()
  • 设置全局变量BOT_USER_ID和RESPOND_ONLY_IF_TAGGED。
  • 初始化 Composio 工具集。
  • 添加代码解释器、Exa、Fire Crawl 和 Tavily 服务作为工具。

第 2 步:定义代理

现在使用工具和 llm 定义 Slack 代理。

# Define the Crew AI agent with a specific role, goal, and backstory
prefix_messages = [
    ChatMessage(
        role="system",
        content=(
            "You are now an integration agent, and whatever you are requested, you will try to execute utilizing your tools."
        ),
    )
]

agent = FunctionCallingAgentWorker(
    tools=composio_tools,
    llm=llm,
    prefix_messages=prefix_messages,
    max_function_calls=10,
    allow_parallel_tool_calls=False,
    verbose=True,
).as_agent()
Enter fullscreen mode Exit fullscreen mode
  • 我们定义了代理使用FunctionCallingAgentWorker带有前缀的消息作为系统提示。
  • 这为法学硕士提供了有关角色和期望的更多背景信息。
  • 已为代理提供了定义的工具。
  • max_function_calls参数设置遇到任何错误时代理将重试的次数。
  • 详细程度设置为 True 以记录完整的代理工作流程。

注意:FunctionCallingAgentWorker仅支持具有函数调用能力的 LLM,如 GPT、Mistral 和 Anthropic 模型。

步骤3:定义事件监听器

下一步是设置事件监听器。它将接收来自 Slack 中触发事件的有效负载。

有效载荷包含所需的事件信息,例如频道 ID、消息文本、时间戳等。您可以检索所需的信息、处理它并执行操作。

# Create a listener to handle Slack events and triggers for Composio
listener = composio_toolset.create_trigger_listener()

# Callback function for handling new messages in a Slack channel
@listener.callback(filters={"trigger_name": "slackbot_receive_message"})
def callback_new_message(event: TriggerEventData) -> None:
    payload = event.payload
    user_id = payload.get("event", {}).get("user", "")

    # Ignore messages from the bot itself to prevent self-responses
    if user_id == BOT_USER_ID:
        return

    message = payload.get("event", {}).get("text", "")

    # Respond only if the bot is tagged in the message if configured to do so
    if RESPOND_ONLY_IF_TAGGED and f"<@{BOT_USER_ID}>" not in message:
        print("Bot not tagged, ignoring message")
        return

    # Extract channel and timestamp information from the event payload
    channel_id = payload.get("event", {}).get("channel", "")
    ts = payload.get("event", {}).get("ts", "")
    thread_ts = payload.get("event", {}).get("thread_ts", ts)

    # Process the message and post the response in the same channel or thread
    result = agent.chat(message)
    print(result)
    composio_toolset.execute_action(
        action=Action.SLACKBOT_CHAT_POST_MESSAGE,
        params={
            "channel": channel_id,
            "text": result.response,
            "thread_ts": thread_ts,
        },
    )

listener.listen()

Enter fullscreen mode Exit fullscreen mode
  • callback_new_message当 Slack 中的触发事件匹配时,会调用回调函数slackbot_receive_message
  • 从事件负载中提取用户 ID。如果与机器人 ID 匹配,则跳过该流程。
  • 如果没有,代码会检查消息中是否含有所提到的机器人 ID。
  • 我们提取消息、频道 ID 和时间戳。
  • 该消息传递给您之前定义的 Slack 代理。
  • 然后将代理的响应发送到 Slack。

现在,一旦一切设置完毕,运行 Python 文件。

确保已在频道中正确设置 Slack 机器人。以下是如何将 Slack 机器人添加到频道👇。

添加 slackbot

当您在 Slack 中发送标记机器人的消息时,事件监听器会接收有效负载,代理会对其采取行动,然后将响应发送回同一个 Slack 频道。

这是 Slack 机器人运行的完整视频。


让我们联系吧!🔌

您可以加入我们的社区,与维护人员互动,并以开源开发者的身份做出贡献。欢迎访问我们的 GitHub 代码库,贡献代码并创建与 Composio 相关的 issue。

本教程的源代码也可以在这里找到,请查看其他框架的实现:

AI Slack Bot 的完整代码✨

感谢您的阅读!

文章来源:https://dev.to/composiodev/how-to-build-a-perplexity-like-chatbot-in-slack-533j
PREV
我创建了一个 AI 伴侣,它可以监控我的屏幕并帮助我解决错误✨
NEXT
构建了一个人工智能工具来帮助我的团队智能地发布推文——告别手动发布,迎接病毒式传播!🫡🚀