• 文档
  • CAMEL-AI驱动的智能体RAG Discord机器人

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实例化一个 CAMEL-AI ChatAgent,并使用 OpenAI 模型进行多步骤推理和上下文感知响应。
6. 创建和配置 Discord Bot在 Discord 开发者门户中注册一个新机器人,将其邀请到服务器,并启用权限。
7. 构建 Discord Bot将 Discord.py 与 CAMEL-AI 和 Qdrant 集成,以检索上下文并生成智能响应。
8. 测试机器人在 Discord 实时服务器中运行机器人,并验证它是否提供相关、上下文丰富的答案。

架构图

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

Architecture Diagram

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

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

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


步骤 1:环境设置

在深入实现之前,以下是我们将使用的技术栈的概览

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

安装依赖项

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

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

步骤 2:设置 OpenAI 嵌入实例

  1. 创建 OpenAI 账户:前往 OpenAI 注册账户(如果尚未拥有)。

  2. 生成 API 密钥:

    • 登录后,点击右上角的个人资料图标,选择 API 密钥

    • 点击创建新密钥

    • 复制生成的 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")
)

为了设置嵌入实例,我们将使用文本嵌入 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. 创建集群:

    • 导航到概览部分。
    • 按照创建第一个集群下的入门说明设置您的集群。
    • 创建集群时,您将收到一个 API 密钥。复制并安全存储它,因为您稍后会用到它。
  3. 等待集群配置完成:

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

获取 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

现在让我们让机器人活起来!它将作为用户与您构建的 agentic RAG 系统交互的接口。

创建一个新的 Discord Bot

  1. 前往 Discord 开发者门户,并使用您的 Discord 账户登录。

  2. 点击新建应用程序按钮。

  3. 给您的应用程序命名并点击创建

  4. 导航到左侧边栏的机器人选项卡,然后点击添加机器人

  5. 机器人创建后,点击令牌部分下的重置令牌以生成新的机器人令牌。安全地复制此令牌,因为您稍后会用到它。

邀请机器人到您的服务器

  1. 转到 OAuth2 选项卡,然后转到 URL 生成器部分。

  2. 范围下,选择机器人

  3. 机器人权限下,选择必要的权限

    • 发送消息

    • 读取消息历史记录

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

  5. 选择您要邀请机器人的服务器,然后点击授权

授予机器人权限

  1. 返回到机器人选项卡。

  2. 特权网关意图下启用以下内容

    • 服务器成员意图

    • 消息内容意图

现在,机器人已准备好与您的代码集成。

步骤 7:构建 Discord Bot

添加到您的 .env 文件中

DISCORD_BOT_TOKEN=<your-discord-bot-token>

我们将使用 discord.py 创建一个简单的 Discord 机器人,该机器人与用户交互并在响应之前从 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:测试机器人

  1. 使用 Discord 开发者门户中的 OAuth2 URL 将您的机器人邀请到您的 Discord 服务器。

  2. 运行笔记本。

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

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


结论

干得漂亮!您已经构建了一个由 agentic RAG 驱动的 Discord 机器人,该机器人使用 Qdrant 检索相关信息,使用 OpenAI 生成智能响应,并使用 CAMEL-AI 处理多步骤推理。以下是快速回顾

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

  • CAMEL-AI 的自主推理:实现多步骤推理,而不仅仅是鹦鹉学舌。

  • 实时 Discord 部署:您在 Discord 上部署了聊天机器人,使其具有交互性并随时准备帮助真实用户。

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

您现在已做好充分准备,可以解决需要可扩展、自主知识系统的更复杂的现实世界问题。

此页面有用吗?

感谢您的反馈!🙏

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