• 文档
  • 使用 CAMEL-AI 构建基于 Agentic RAG 的 Discord Bot

agentic-rag-camelai-astronaut

使用 Qdrant、CAMEL-AI 和 OpenAI 构建基于 Agentic RAG 的 Discord 聊天机器人

时长:45 分钟级别:中级Open in Colab

与传统被动检索上下文并生成响应的 RAG 技术不同,Agentic RAG 涉及聊天机器人的主动决策和多步推理。聊天机器人不再只是获取数据,而是进行决策,动态地与各种数据源交互,并根据上下文进行调整,从而使其具有更动态和智能的方法。

在本教程中,我们将使用 Qdrant、CAMEL-AIOpenAI 开发一个功能齐全的聊天机器人。

让我们开始吧!


工作流程概述

下面是 Agentic RAG 工作流程的高级视图

步骤描述
1. 环境设置安装所需的库(camel-aiqdrant-clientdiscord.py)并设置 Python 环境。
2. 设置 OpenAI 嵌入实例创建一个 OpenAI 账户,生成 API 密钥,并配置嵌入模型。
3. 配置 Qdrant 客户端注册 Qdrant Cloud,创建一个集群,配置 QdrantStorage,并设置 API 连接。
4. 抓取和处理数据使用 VectorRetriever 抓取 Qdrant 文档,分割文本,并将嵌入存储在 Qdrant 中。
5. 设置 CAMEL-AI ChatAgent使用 OpenAI 模型实例化 CAMEL-AI ChatAgent,以实现多步推理和上下文感知响应。
6. 创建和配置 Discord Bot在 Discord Developer Portal 中注册一个新的 bot,邀请它加入服务器,并启用权限。
7. 构建 Discord Bot将 Discord.py 与 CAMEL-AI 和 Qdrant 集成,以检索上下文并生成智能响应。
8. 测试 Bot在实际的 Discord 服务器中运行 bot,并验证它是否提供了相关且上下文丰富的答案。

架构图

下面是表示聊天机器人工作流程和交互的架构图

Architecture Diagram

工作流程首先使用 vector_retriever.process() 方法从 URL 抓取、分块和上传插入内容,该方法使用 OpenAI 嵌入实例生成嵌入向量。然后,这些嵌入向量及其元数据通过 QdrantStorage 类被索引并存储在 Qdrant 中。

当用户通过 Discord Bot 发送查询时,查询会由 vector_retriever.query() 处理,该方法首先使用 OpenAI Embeddings 嵌入查询,然后通过 QdrantStorage 从 Qdrant 中检索最相关的匹配项。然后,检索到的上下文(例如,相关的文档片段)会被传递给 CAMEL-AI 下的 OpenAI 驱动的 Qdrant Agent,由其生成最终的、上下文感知的响应。

Qdrant Agent 使用 GPT_4O_MINI 语言模型处理检索到的向量,生成与用户查询相关的上下文响应。然后,此响应通过 Discord Bot 发送回用户,完成整个流程。


步骤 1:环境设置

在深入实现之前,这里是我们将使用的技术栈的高级概述

组件用途
Qdrant用于存储和查询文档嵌入向量的向量数据库。
OpenAI用于生成向量表示和聊天机器人响应的嵌入和语言模型。
CAMEL-AI用于管理对话流程、检索和 AI Agent 交互的框架。
Discord API用于部署聊天机器人并与之交互的平台。

安装依赖项

我们将安装 CAMEL-AI,它包含所有必要的依赖项

!pip install camel-ai[all]==0.2.17

步骤 2:设置 OpenAI 嵌入实例

  1. 创建 OpenAI 账户:前往 OpenAI,如果您还没有账户,请注册一个。

  2. 生成 API 密钥:

    • 登录后,单击右上角的个人资料图标,然后选择 API keys

    • 单击 Create new secret key

    • 复制生成的 API 密钥并安全存储。您将无法再次看到它。

以下是如何在代码中设置 OpenAI 客户端

在您的项目目录中创建一个 .env 文件并添加您的 API 密钥

OPENAI_API_KEY=<your_openai_api_key>

请务必将 <your_openai_api_key> 替换为您实际的 API 密钥。

现在,启动 OpenAI 客户端

import openai
import os
from dotenv import load_dotenv

load_dotenv()

openai_client = openai.Client(
    api_key=os.getenv("OPENAI_API_KEY")
)

为了设置嵌入实例,我们将使用 text embedding 3 large

from camel.embeddings import OpenAIEmbedding
from camel.types import EmbeddingModelType

embedding_instance = OpenAIEmbedding(model_type=EmbeddingModelType.TEXT_EMBEDDING_3_LARGE)

步骤 3:配置 Qdrant 客户端

对于本教程,我们将使用 Qdrant Cloud 免费套餐。设置方法如下

  1. 创建账户:在 Qdrant Cloud 注册一个 Qdrant Cloud 账户。

  2. 创建集群:

    • 导航到 Overview 部分。
    • 按照 Create First Cluster 下的新手引导说明设置您的集群。
    • 创建集群时,您将收到一个 API 密钥。复制并安全存储它,稍后会用到。
  3. 等待集群配置完成:

    • 您的新集群将出现在 Clusters 部分下方。

获取您的 Qdrant Cloud 详细信息后,将其添加到您的 .env 文件中

QDRANT_CLOUD_URL=<your-qdrant-cloud-url>
QDRANT_CLOUD_API_KEY=<your-api-key>

配置 QdrantStorage

QdrantStorage 将处理与 Qdrant 客户端的连接,以执行对您的集合进行所有必要操作。

from camel.retrievers import VectorRetriever

# Define collection name
collection_name = "qdrant-agent"

storage_instance = QdrantStorage(
    vector_dim=embedding_instance.get_output_dim(),
    url_and_api_key=(
        qdrant_cloud_url,
        qdrant_api_key,
    ),
    collection_name=collection_name,
)

请务必更新 <your-qdrant-cloud-url><your-api-key> 字段。


步骤 4:抓取和处理数据

我们将使用 CamelAI 的 VectorRetriever 库来帮助我们处理来自文件或 URL 的内容,将其分割成块,并将嵌入存储在指定的 Qdrant 集合中。

from camel.retrievers import VectorRetriever

vector_retriever = VectorRetriever(embedding_model=embedding_instance,
                                   storage=storage_instance)

qdrant_urls = [
    "https://qdrant.org.cn/documentation/overview",
    "https://qdrant.org.cn/documentation/guides/installation",
    "https://qdrant.org.cn/documentation/concepts/filtering",
    "https://qdrant.org.cn/documentation/concepts/indexing",
    "https://qdrant.org.cn/documentation/guides/distributed_deployment",
    "https://qdrant.org.cn/documentation/guides/quantization"
    # Add more URLs as needed
]

for qdrant_url in qdrant_urls:
  vector_retriever.process(
      content=qdrant_url,
  )

步骤 5:设置 CAMEL-AI ChatAgent 实例

定义 OpenAI 模型并创建一个 CAMEL-AI ChatAgent 实例。

from camel.configs import ChatGPTConfig
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
from camel.agents import ChatAgent

# Create a ChatGPT configuration
config = ChatGPTConfig(temperature=0.2).as_dict()

# Create an OpenAI model using the configuration
openai_model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI,
    model_type=ModelType.GPT_4O_MINI,
    model_config_dict=config,
)

assistant_sys_msg = """You are a helpful assistant to answer question,
         I will give you the Original Query and Retrieved Context,
        answer the Original Query based on the Retrieved Context,
        if you can't answer the question just say I don't know."""

qdrant_agent = ChatAgent(system_message=assistant_sys_msg, model=openai_model)

步骤 6:创建和配置 Discord Bot

现在让 bot 活跃起来!它将作为用户与您构建的 agentic RAG 系统交互的接口。

创建新的 Discord Bot

  1. 前往 Discord Developer Portal 并使用您的 Discord 账户登录。

  2. 单击 New Application 按钮。

  3. 为您的应用程序命名并单击 Create

  4. 导航到左侧边栏的 Bot 选项卡,然后单击 Add Bot

  5. Bot 创建后,在 Token 部分下单击 Reset Token 以生成新的 bot 令牌。安全地复制此令牌,稍后会用到。

邀请 Bot 加入您的服务器

  1. 转到 OAuth2 选项卡,然后转到 URL Generator 部分。

  2. Scopes 下,选择 bot

  3. Bot Permissions 下,选择必要的权限

    • 发送消息

    • 读取消息历史记录

  4. 复制生成的 URL 并将其粘贴到您的浏览器中。

  5. 选择您想邀请 bot 加入的服务器,然后单击 Authorize

授予 Bot 权限

  1. 返回 Bot 选项卡。

  2. Privileged Gateway Intents 下启用以下选项

    • 服务器成员意图

    • 消息内容意图

现在,bot 已准备好与您的代码集成。

步骤 7:构建 Discord Bot

添加到您的 .env 文件中

DISCORD_BOT_TOKEN=<your-discord-bot-token>

我们将使用 discord.py 创建一个简单的 Discord Bot,它与用户交互,并在响应前从 Qdrant 检索上下文。

from camel.bots import DiscordApp
import nest_asyncio
import discord

nest_asyncio.apply()
discord_q_bot = DiscordApp(token=os.getenv("DISCORD_BOT_TOKEN"))

@discord_q_bot.client.event # triggers when a message is sent in the channel
async def on_message(message: discord.Message):
    if message.author == discord_q_bot.client.user:
        return

    if message.type != discord.MessageType.default:
        return

    if message.author.bot:
        return
    user_input = message.content

    retrieved_info = vector_retriever.query(
        query=user_input, top_k=10, similarity_threshold=0.6
    )

    user_msg = str(retrieved_info)
    assistant_response = qdrant_agent.step(user_msg)
    response_content = assistant_response.msgs[0].content

    if len(response_content) > 2000: # discord message length limit
        for chunk in [response_content[i:i+2000] for i in range(0, len(response_content), 2000)]:
            await message.channel.send(chunk)
    else:
        await message.channel.send(response_content)

discord_q_bot.run()

步骤 9:测试 Bot

  1. 使用 Discord Developer Portal 中的 OAuth2 URL 邀请您的 bot 加入您的 Discord 服务器。

  2. 运行 Notebook。

  3. 在您的 Discord 服务器中开始与 bot 聊天。它将从 Qdrant 检索上下文,并根据您的查询提供相关答案。

agentic-rag-discord-bot-what-is-quantization


结论

干得好!您已经构建了一个基于 agentic RAG 的 Discord Bot,它使用 Qdrant 检索相关信息,使用 OpenAI 生成智能响应,并使用 CAMEL-AI 处理多步推理。这里是快速回顾

  • 智能知识检索:您的聊天机器人现在可以使用 Qdrant 的向量搜索从大型数据集中提取相关信息。

  • 使用 CAMEL-AI 实现自主推理:实现多步推理,而不仅仅是重复文本。

  • 实时 Discord 部署:您已将聊天机器人部署到 Discord,使其具有交互性,并准备好为真实用户提供帮助。

CAMEL-AI 最大的优势之一在于它提供的抽象层,让您可以专注于设计智能交互,而无需担心低级实现细节。

您现在已经具备了处理更复杂的实际问题所需的知识,这些问题需要可扩展的、自主的知识系统。

本页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个消息。😔 您可以在 GitHub 上编辑本页面,或者创建一个 GitHub Issue。