- Дата публикации
Пошаговый гид: как собрать RAG‑чат на Azure OpenAI и Azure DocumentDB (MongoDB) без лишних сервисов
Что нового
Microsoft предлагает довольно приземлённый, но полезный сценарий: собрать RAG‑чат (retrieval‑augmented generation) на Azure целиком из готовых сервисов, без отдельного векторного хранилища и сложной синхронизации.
Главные элементы конструктора:
-
Azure DocumentDB с совместимостью с MongoDB (Cosmos DB for MongoDB vCore)
- Хранит обычные JSON‑документы и векторные эмбеддинги в одном кластере.
- Поддерживает vector search по тем же данным.
- Разворачивается как кластер MongoDB vCore, в гайде используется конфигурация M25, 2 vCore (Burstable), 32 GiB.
-
Azure OpenAI Service
- Два развёртывания на одном ресурсе:
- чат‑модель gpt‑35‑turbo, версия 0301;
- эмбеддинги text‑embedding‑ada‑002, версия 2.
- Через Azure OpenAI Studio можно управлять деплойментами, ключами и endpoint.
- Два развёртывания на одном ресурсе:
-
Azure App Service (Linux, Python 3.10)
- Веб‑приложение для чата на Python.
- Непрерывный деплой из GitHub‑репозитория.
- Настройки приложения (environment variables) связывают App Service с Azure OpenAI и Cosmos DB.
-
Готовый пример RAG‑приложения
- Репозиторий:
github.com/john0isaac/rag-semantic-kernel-mongodb-vcore. - Включает скрипт
scripts/add_data.pyдля загрузки данных и генерации эмбеддингов. - Позволяет сравнить ответы чата до и после подключения собственной базы знаний.
- Репозиторий:
Никаких новых моделей или тарифов здесь нет — ценность в том, что Microsoft показывает полностью рабочий стек: от базы до фронта, с конкретными настройками и командами.
Как это работает
Сценарий простой: вы собираете корпоративный чат‑бот, который должен отвечать не только «по модели», но и по вашим документам. Для этого используется классическая схема RAG:
-
Подготовка данных
- Вы храните документы в Azure DocumentDB (Cosmos DB for MongoDB vCore) как обычные JSON.
- Для каждого текста вызываете Azure OpenAI эмбеддинг‑деплоймент
text-embedding-ada-002. - Вектор эмбеддинга сохраняете в том же документе (в отдельном поле массива чисел).
-
Векторный поиск в DocumentDB
- При пользовательском запросе приложение снова вызывает
text-embedding-ada-002для вопроса. - Полученный вектор используется в vector search по коллекции MongoDB в Azure DocumentDB.
- База возвращает несколько наиболее близких документов по косинусной близости или похожей метрике.
- При пользовательском запросе приложение снова вызывает
-
RAG‑оркестрация через LangChain
- Приложение на Python использует LangChain как «клей» между сервисами:
- коннектор к MongoDB (через строку подключения Cosmos DB);
- цепочка, которая берёт релевантные документы и формирует prompt для чат‑модели;
- вызов чат‑деплоймента gpt‑35‑turbo (0301) через Azure OpenAI SDK или REST.
- Приложение на Python использует LangChain как «клей» между сервисами:
-
Генерация ответа
- LangChain собирает контекст из найденных документов.
- Отправляет его вместе с вопросом пользователя в чат‑модель
gpt-35-turbo. - Модель отвечает с опорой на этот контекст.
-
Хостинг и CI/CD
- Веб‑приложение разворачивается на Azure App Service (Linux, Python 3.10).
- App Service подключается к GitHub‑репозиторию и автоматически деплоит изменения из ветки
main. - Переменные окружения в App Service хранят ключи и имена ресурсов Azure.
Под капотом всё выглядит как вполне стандартный стек: MongoDB‑совместимый кластер Cosmos DB с поддержкой векторного поиска + Azure OpenAI + Python‑приложение на App Service + LangChain как оркестратор.
Что это значит для вас
Если вы строите внутренний чат для компании, документацию‑бота или помощника службы поддержки, здесь есть несколько практических выгод.
Когда это полезно
-
Вы уже в Azure
- У вас есть подписка Azure и, возможно, уже используются Cosmos DB и App Service.
- Тогда этот сценарий позволяет собрать RAG‑бота без добавления нового типа хранилища.
-
Нужен RAG без поднятия собственной инфраструктуры
- Не хотите управлять собственным кластером векторной БД (например, Qdrant или Milvus).
- Azure DocumentDB берёт на себя хранение и векторный поиск, App Service — деплой.
-
Нужен быстрый прототип для команды
- Гайд даёт пошаговую инструкцию, как за один проход:
- создать базу;
- развернуть OpenAI‑ресурс;
- подключить GitHub и запустить веб‑чат;
- загрузить пример данных и проверить, как меняется ответ.
- Гайд даёт пошаговую инструкцию, как за один проход:
-
Нужна связка LangChain + Azure OpenAI + MongoDB
- Если вы строите пайплайн на LangChain, пример показывает, как его правильно «приземлить» на Azure‑сервисы.
Когда это может не подойти
-
Нет доступа к Azure OpenAI
- Azure OpenAI требует отдельного одобрения и недоступен из некоторых регионов, включая Россию, без обходных путей.
- Для работы из России, скорее всего, понадобится VPN, а также юридическая возможность использовать зарубежный облачный сервис.
-
Очень жёсткие требования к стоимости
- В гайде используется план App Service Basic B1 и кластер Cosmos DB уровня M25.
- Для продакшена это может быть слишком дорого или, наоборот, слабовато по нагрузке; придётся отдельно считать бюджет.
-
Нужен полный on‑prem или локальный стек
- Если ваша компания не может выносить данные в публичное облако, этот рецепт не подойдёт.
-
Нужна поддержка русского языка и локальных моделей
- Azure OpenAI с gpt‑35‑turbo умеет русский, но если вам нужны локальные модели в РФ или on‑prem — придётся смотреть в сторону других решений.
Практический совет
Если вы уже используете Azure и хотите быстро показать коллегам работающий RAG‑чат по вашим данным:
- повторите шаги из гайда на тестовой подписке;
- начните с минимального объёма документов;
- оцените стоимость Cosmos DB и OpenAI по фактическому трафику;
- только после этого масштабируйте конфигурацию под боевую нагрузку.
Место на рынке
В гайде нет прямых сравнений с другими облаками, но по роли в стеке можно сделать несколько выводов.
-
Azure DocumentDB (Cosmos DB for MongoDB vCore)
- Функционально выполняет ту же задачу, что и специализированные векторные БД (Pinecone, Qdrant, Weaviate) — хранит эмбеддинги и даёт vector search.
- Плюс: не нужно тянуть ещё один сервис, если у вас уже есть MongoDB‑совместимые приложения.
- Минус: если вы уже живёте, например, в AWS или GCP, придётся заводить отдельную инфраструктуру в Azure ради этого сценария.
-
Azure OpenAI vs «чистый» OpenAI
- Здесь используется gpt‑35‑turbo 0301 и text‑embedding‑ada‑002 v2 через Azure.
- С точки зрения качества ответов это те же модели, что доступны через API OpenAI, но с биллингом и ограничениями Azure.
- Плюс: проще интегрировать с другими Azure‑сервисами (ключи, приватные сети, RBAC).
-
App Service vs контейнеры / Kubernetes
- App Service удобен для быстрого старта и прототипов: вы просто пушите код в GitHub, а Azure сам разворачивает приложение.
- Для сложных продакшн‑нагрузок с микросервисами и кастомной сетью чаще используют AKS или другие оркестраторы.
Если вы уже платите за Azure и хотите собрать RAG‑приложение без дополнительной векторной БД, этот стек выглядит логичным. Если ваша инфраструктура в другом облаке, аналогичный сценарий придётся реализовывать на местных сервисах.
Как это работает по шагам
Ниже — сжатый, но полный план из гайда. Он рассчитан на то, что у вас есть:
- подписка Azure (или бесплатный аккаунт / Azure for Students);
- аккаунт GitHub.
1. Создание Azure DocumentDB (Cosmos DB for MongoDB vCore)
- Зайдите в Azure Portal и авторизуйтесь.
- В поиске вверху введите
mongodb vcoreи выберите Azure Cosmos DB for MongoDB (vCore). - Нажмите Create.
- Заполните поля:
- Subscription — нужная подписка (лучше одна и та же для всех ресурсов).
- Resource group —
Create new, введите уникальное имя. - Cluster name — глобально уникальное имя.
- Location — ближайший регион, в гайде используется UK South.
- MongoDB version — последняя доступная.
- Нажмите Configure и задайте параметры кластера:
- Cluster tier —
M25,2 (Burstable) vCores. - Storage —
32 GiB.
- Cluster tier —
- Нажмите Save.
- Задайте Admin Username и Password, сохраните их в менеджере паролей.
- Перейдите на вкладку сети (Next):
- включите Allow Public Access from Azure services and resources within the Azure to this cluster;
- нажмите Add current IP address, чтобы добавить свой IP в firewall.
- Нажмите Review + create, проверьте настройки и снова Create.
Развёртывание кластера может занять до 10 минут.
2. Создание Azure OpenAI и деплой моделей
2.1. Azure OpenAI ресурс
- В портале Azure введите в поиске
openaiи выберите Azure OpenAI. - Нажмите Create.
- Заполните поля:
- Subscription — та же, на которую вы запрашивали доступ к Azure OpenAI.
- Resource group — тот же ресурсный набор, что и для Cosmos DB.
- Region — например, UK South.
- Name — глобально уникальное имя ресурса.
- Pricing tier —
S0(других в гайде нет).
- Нажимайте Next, подтверждая сеть и теги.
- Нажмите Create и дождитесь окончания деплоя.
- Нажмите Go to resource, чтобы увидеть endpoint и API‑ключи (раздел Keys and Endpoint).
2.2. Деплой чат‑модели и эмбеддингов
- В ресурсе Azure OpenAI нажмите Go to Azure OpenAI Studio.
- В студии выберите Create new deployment (вкладка Deployments).
- Нажмите + Create new deployment.
- Для чат‑модели:
- Select a model —
gpt-35-turbo. - Model version —
0301. - Deployment name — любое уникальное, например
chat-model. - Нажмите Create.
- Select a model —
- Снова + Create new deployment.
- Для эмбеддингов:
- Select a model —
text-embedding-ada-002. - Model version —
2. - Deployment name — например,
embedding-model. - Нажмите Create.
- Select a model —
3. Форк репозитория с примером RAG‑приложения
- Откройте в браузере:
https://github.com/john0isaac/rag-semantic-kernel-mongodb-vcore. - Авторизуйтесь в GitHub.
- Нажмите Fork.
- Выберите владельца форка (личный аккаунт или организация).
- Нажмите Create fork.
4. Создание Azure App Service и привязка к GitHub
- В Azure Portal введите в поиске
app serviceи выберите App Services. - Нажмите Create Web App.
- В разделе Basics:
- Subscription — та же.
- Resource group — тот же, что и раньше.
- Name — уникальное имя сайта, например
rag-mongodb-demo. - Publish —
Code. - Runtime stack —
Python 3.10. - Operating System —
Linux. - Region —
UK South(как и другие ресурсы).
- Настройка App Service Plan:
- Linux Plan — существующий или создайте новый.
- Pricing Plan —
Basic B1.
- Перейдите во вкладку Deployment:
- Continuous deployment —
Enable. - GitHub account — ваш аккаунт.
- Organization — ваш аккаунт или организация.
- Repository —
rag-semantic-kernel-mongodb-vcore(ваш форк). - Branch —
main.
- Continuous deployment —
- Нажмите Review + create, проверьте настройки и нажмите Create.
- После деплоя нажмите Go to resource.
5. Настройка переменных окружения в App Service
-
В ресурсе Web App откройте меню Configuration.
-
В разделе Application settings нажмите + New application setting.
-
Добавьте настройки для Azure OpenAI (значения — ваши):
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME—<chatModelDeploymentName>AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME—<embeddingModelDeploymentName>AZURE_OPENAI_DEPLOYMENT_NAME—<azureOpenAiResourceName>AZURE_OPENAI_ENDPOINT—https://<azureOpenAiResourceName>.openai.azure.com/AZURE_OPENAI_API_KEY—<azureOpenAiResourceKey>
Ключи берутся на странице ресурса Azure OpenAI, раздел Keys and Endpoint.
-
Добавьте настройки для Cosmos DB for MongoDB vCore:
AZCOSMOS_API—mongo-vcoreAZCOSMOS_CONNSTR—mongodb+srv://<mongoAdminUser>:<mongoAdminPassword>@<mongoClusterName>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000
Строку подключения можно скопировать на странице ресурса Cosmos DB (вкладка Connection strings). Обязательно подставьте свои пользователя и пароль.
-
Добавьте настройки, которые создадутся приложением при старте (любые валидные имена):
AZCOSMOS_DATABASE_NAME—<cosmosDatabaseName>AZCOSMOS_CONTAINER_NAME—<cosmosContainerName>
-
Нажмите Save.
-
Перейдите во вкладку General settings.
-
В поле Startup command укажите:
entrypoint.sh -
Сохраните изменения.
6. Настройка GitHub Workflow для деплоя
-
Откройте свой форк репозитория на GitHub.
-
Вкладка Actions покажет, что workflow падает.
-
Зайдите в файл
.github/workflows/main_ragmongodbdemo.yml. -
Нажмите на значок карандаша для редактирования.
-
Измените строки 31 и 36 на:
31 run: cd src && pip install -r ./requirements.txt 36 run: cd src && zip ../release.zip ./* -r -
Нажмите Commit changes, при необходимости добавьте комментарий к коммиту.
-
Перейдите во вкладку Actions и дождитесь успешного выполнения workflow.
7. Тестирование RAG‑чата до и после загрузки данных
-
В Azure Portal откройте ресурс Web App.
-
На вкладке Overview или в GitHub Actions найдите URL вашего сайта и перейдите по нему.
-
В открывшемся чате отправьте сообщение:
What is Azure Functions?На этом этапе бот должен ответить чем‑то вроде
I don't know. -
Вернитесь в ресурс Web App в Azure и откройте SSH.
-
Нажмите Go, чтобы открыть терминал.
-
В терминале выполните команду:
python ./scripts/add_data.pyСкрипт загрузит данные в Cosmos DB и создаст эмбеддинги.
-
Вернитесь на страницу сайта и снова задайте вопрос:
What is Azure Functions?Теперь бот должен ответить уже на основе загруженной документации.
Установка / Как запустить
Ниже — сводная инструкция, если вы хотите просто повторить сценарий без лишних пояснений.
-
Подготовьте аккаунты
- Зарегистрируйте Azure (можно бесплатный аккаунт или Azure for Students).
- Создайте/используйте аккаунт GitHub.
-
Разверните Cosmos DB for MongoDB vCore
- В Azure Portal:
mongodb vcore→ Azure Cosmos DB for MongoDB (vCore) → Create. - Кластер:
M25,2 vCores (Burstable),32 GiB, регионUK South. - Включите доступ из Azure и свой IP.
- В Azure Portal:
-
Создайте Azure OpenAI ресурс
- Поиск
openai→ Azure OpenAI → Create. - Регион
UK South, тарифS0.
- Поиск
-
Деплойте модели
- В Azure OpenAI Studio создайте два деплоймента:
gpt-35-turbo, версия0301(чат);text-embedding-ada-002, версия2(эмбеддинги).
- В Azure OpenAI Studio создайте два деплоймента:
-
Сделайте форк репозитория
https://github.com/john0isaac/rag-semantic-kernel-mongodb-vcore -
Создайте App Service (Python 3.10, Linux)
- Web App → Create Web App.
- Runtime:
Python 3.10, OS:Linux, план:Basic B1. - Включите Continuous deployment из вашего форка GitHub, ветка
main.
-
Настройте переменные окружения
В разделе Configuration → Application settings добавьте:
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=<chatModelDeploymentName> AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME=<embeddingModelDeploymentName> AZURE_OPENAI_DEPLOYMENT_NAME=<azureOpenAiResourceName> AZURE_OPENAI_ENDPOINT=https://<azureOpenAiResourceName>.openai.azure.com/ AZURE_OPENAI_API_KEY=<azureOpenAiResourceKey> AZCOSMOS_API=mongo-vcore AZCOSMOS_CONNSTR=mongodb+srv://<mongoAdminUser>:<mongoAdminPassword>@<mongoClusterName>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000 AZCOSMOS_DATABASE_NAME=<cosmosDatabaseName> AZCOSMOS_CONTAINER_NAME=<cosmosContainerName>В General settings задайте startup‑команду:
entrypoint.sh -
Почините workflow в GitHub
В
.github/workflows/main_ragmongodbdemo.ymlизмените команды:run: cd src && pip install -r ./requirements.txt run: cd src && zip ../release.zip ./* -r -
Загрузите данные и протестируйте
-
Откройте сайт, спросите:
What is Azure Functions?— бот не знает. -
В SSH терминале App Service выполните:
python ./scripts/add_data.py -
Снова спросите
What is Azure Functions?— бот отвечает уже по документации.
-
Что делать после экспериментов
Когда закончите тесты, чтобы не тратить деньги подписки, удалите ресурсы:
- удалите весь Resource Group — тогда удалятся все связанные ресурсы;
- или удалите Cosmos DB, App Service и OpenAI по отдельности.
Если сценарий показался полезным, дальше имеет смысл:
- заменить примерные данные на ваши документы (в репозитории есть инструкция в README);
- подстроить промпты и цепочки LangChain под ваш домен;
- добавить авторизацию и логирование запросов для продакшена.