Чат-бот для Discord с агентным подходом к извлечению информации (RAG), использующий Vector DB, CAMEL-AI и OpenAI#
В отличие от традиционных методов, RAG пассивно извлекающих контекст и генерирующих ответы, агентный RAG предполагает активное принятие решений и многошаговую логику рассуждений со стороны чат-бота. Вместо простого извлечения данных бот принимает решения, динамически взаимодействует с различными источниками данных и адаптируется в зависимости от контекста, обеспечивая гораздо более динамичный и интеллектуальный подход.
В этом руководстве будет разработан полностью функциональный чат-бот, используя Platform V Vector DB (далее - Vector DB), CAMEL-AI и OpenAI.
Обзор рабочего процесса#
Ниже приведен обзор высокого уровня рабочего процесса с агентным RAG:
Шаг |
Описание |
|---|---|
1. Настройка среды |
Установите необходимые библиотеки ( |
2. Настройка экземпляра встраивания OpenAI |
Создайте учетную запись OpenAI, создайте ключ API и сконфигурируйте модель встраивания |
3. Настройка клиента Vector DB |
Cоздайте кластер, настройте |
4. Извлечение и обработка данных |
Используйте |
5. Настройка агента чата CAMEL-AI |
Инициализируйте агента чата CAMEL-AI с моделями OpenAI для многоэтапных рассуждений и ответов, учитывающих контекст |
6. Создание и настройка бота Discord |
Зарегистрируйте нового бота в панели разработчиков Discord, пригласите его на сервер и предоставьте разрешения |
7. Построение бота Discord |
Интегрируйте Discord.py с CAMEL-AI и Vector DB для получения контекста и генерации умных ответов |
8. Тестирование бота |
Запустите бота на живом сервере Discord и убедитесь, что он предоставляет релевантные, насыщенные контекстом ответы |
Диаграмма архитектуры#
Ниже представлена диаграмма архитектуры, отражающая рабочий процесс и взаимодействие компонентов чат-бота:

Рабочий процесс начинается с того, что контент из URL-адресов скачивается, разбивается на куски и вставляется с помощью метода vector_retriever.process(), который создает вложения с помощью экземпляра встраиваний OpenAI. Эти вложения вместе с их метаданными затем индексируются и хранятся в Vector DB посредством класса QdrantStorage.
Когда пользователь отправляет запрос через бота Discord, он обрабатывается vector_retriever.query() следующим образом: сначала запрос встраивается с помощью вложений OpenAI, а затем наиболее соответствующие совпадения извлекаются из Vector DB через QdrantStorage. Полученный контекст (например, соответствующие фрагменты документации) передается агенту Vector DB под управлением CAMEL-AI, работающему на базе модели OpenAI, который формирует окончательный ответ, учитывающий контекст.
Агент Vector DB обрабатывает полученные векторы с помощью языковой модели GPT_4O_MINI, создавая ответ, соответствующий запросу пользователя. Этот ответ отправляется обратно пользователю через бота Discord, завершая цикл обработки запроса.
Шаг 1: настройка среды#
Прежде чем приступить к реализации, рассмотрите высокоуровневый обзор стека технологий, который будет использоваться:
Компонент |
Назначение |
|---|---|
Vector DB |
Векторная база данных для хранения и поиска вложений документов |
OpenAI |
Модели встраивания и языка для создания векторных представлений и ответов чат-бота |
CAMEL-AI |
Фреймворк для управления потоком диалога, поиском и взаимодействиями агентов искусственного интеллекта |
API Discord |
Платформа для развертывания и взаимодействия с чат-ботом |
Установка зависимостей#
Установите CAMEL-AI, которая включает все необходимые зависимости:
pip install camel-ai[all]==0.2.17
Шаг 2: настройка экземпляра встраивания OpenAI#
Создание аккаунта OpenAI: перейдите на сайт OpenAI и зарегистрируйтесь, если еще нет аккаунта.
Генерация ключа 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 :
from camel.embeddings import OpenAIEmbedding
from camel.types import EmbeddingModelType
embedding_instance = OpenAIEmbedding(model_type=EmbeddingModelType.TEXT_EMBEDDING_3_LARGE)
Шаг 3: настройка клиента Vector DB#
В рамках данного руководства будет использоваться бесплатный тарифный план облака Vector DB Cloud. Вот как это сделать:
Регистрация аккаунта: зарегистрируйтесь в облачной платформе Vector DB по адресу Qdrant Cloud.
Создание кластера:
Перейдите в раздел Обзор.
Следуйте инструкциям по созданию первого кластера в разделе Создать первый кластер, чтобы создать кластер.
При создании кластера отобразится ключ API. Скопируйте и надежно храните его, так как он потребуется позже.
Ожидание подготовки кластера:
Новый кластер появится в разделе Кластеры.
Получив данные об аккаунте в облаке Vector DB, добавьте их в файл .env:
QDRANT_CLOUD_URL=<your-qdrant-cloud-url>
QDRANT_CLOUD_API_KEY=<your-api-key>
Настройка хранилища Vector DB#
QdrantStorage будет отвечать за подключение к клиенту Vector DB и выполнение всех необходимых операций над коллекцией.
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, разделить его на фрагменты и сохранить вложения в указанной коллекции Vector DB.
from camel.retrievers import VectorRetriever
vector_retriever = VectorRetriever(embedding_model=embedding_instance,
storage=storage_instance)
qdrant_urls = [
"https://qdrant.tech/documentation/overview",
"https://qdrant.tech/documentation/guides/installation",
"https://qdrant.tech/documentation/concepts/filtering",
"https://qdrant.tech/documentation/concepts/indexing",
"https://qdrant.tech/documentation/guides/distributed_deployment",
"https://qdrant.tech/documentation/guides/quantization"
# Add more URLs as needed
]
for qdrant_url in qdrant_urls:
vector_retriever.process(
content=qdrant_url,
)
Шаг 5: настройка агента чата CAMEL-AI#
Определите модель OpenAI и создайте экземпляр агента чата CAMEL-AI.
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#
Бот Discord является интерфейсом, через который пользователи смогут взаимодействовать с построенной системой агентного RAG.
Создание нового бота Discord#
Перейдите в панель разработчиков Discord и войдите в систему с помощью учетной записи Discord.
Нажмите кнопку Новая заявка.
Дайте приложению имя и нажмите Создать.
Перейдите во вкладку Бот слева и нажмите Добавить бота.
После создания бота перейдите в раздел Токен и нажмите Сгенерировать токен заново, чтобы получить новый токен бота. Скопируйте этот токен и сохраните его безопасным способом, поскольку он понадобится позднее.
Приглашение бота на сервер#
Перейдите во вкладку OAuth2 и далее в раздел Генератор URL.
Под заголовком Области действия выберите опцию бот.
Под заголовком Разрешения бота отметьте следующие разрешения:
Отправлять сообщения.
Читать историю сообщений.
Скопируйте полученную ссылку и вставьте ее в браузер.
Выберите сервер, куда хотите пригласить бота, и нажмите Авторизовать.
Предоставление разрешений боту#
Вернитесь во вкладку Бот.
Активируйте следующие параметры в разделе Привилегированные намерения шлюза:
Намерение членов сервера
Намерение содержимого сообщений
Теперь бот готов интегрироваться с кодом.
Шаг 7: Построение бота Discord#
Добавьте в файл .env следующее содержимое:
DISCORD_BOT_TOKEN=<your-discord-bot-token>
Используйте discord.py для создания простого бота Discord, который взаимодействует с пользователями и получает контекст из Vector DB перед тем, как ответить.
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()
Шаг 8: Тестирование бота#
Пригласите бота на сервер Discord, используя URL OAuth2 из панели разработчиков Discord.
Запустите блокнот.
Начните общение с ботом на сервере Discord. Он будет получать контекст из Vector DB и предоставлять релевантные ответы на основе запросов.

Заключение#
В результате был создан чат-бо создан чат-бот для Discord с поддержкой агентного подхода RAG, способного извлекать актуальную информацию с помощью Vector DB, генерировать разумные ответы с помощью OpenAI и обрабатывать многоступенчатые рассуждения с помощью CAMEL-AI.
Подведем итоги:
Умное получение знаний: Чат-бот теперь может извлекать соответствующую информацию из больших наборов данных с помощью векторного поиска Vector DB.
Автономное рассуждение с помощью CAMEL-AI: Позволяет проводить многоэтапные рассуждения вместо простого повторения текста.
Живое развертывание на Discord: Запустите чат-бота на платформе Discord, сделав его интерактивным и готовым помогать настоящим пользователям.
Одним из главных преимуществ CAMEL-AI является предоставляемая им абстракция, позволяющая сосредоточиться на проектировании интеллектуальных взаимодействий, а не беспокоиться о деталях низкоуровневой реализации.