# Как создать интеллектуального ИИ-ассистента на базе LangGraph, MongoDB и Gemini

Источник: https://www.youtube.com/watch?v=9tANiA0LKn4
Канал: freeCodeCamp.org
Опубликовано: 20.08.2025

---

# Создание интеллектуального ИИ-ассистента для электронной коммерции с использованием MongoDB

В этом руководстве разработчик Даниэль Кубо (Daniel Kubo) демонстрирует процесс создания автономного ИИ-агента для интернет-магазина, способного взаимодействовать с пользователями в режиме реального времени. В отличие от обычных чат-ботов с жестко заданными сценариями, этот агент использует архитектуру LangGraph для принятия самостоятельных решений: поиска по базе данных, выбора стратегии ответа и адаптации к ошибкам. Проект объединяет Node.js, MongoDB Atlas (векторный поиск и хранение состояний) и Google Gemini в качестве «мозгового центра» системы.

## 🛠 Подготовка инфраструктуры и настройка MongoDB
[[JUMP:2:09]]

Работа начинается с создания серверной части на Node.js и настройки базы данных в MongoDB Atlas, которая будет служить хранилищем для товаров и векторов.

*   **Инициализация проекта:** В папке `server` выполняется `npm init`, устанавливаются необходимые зависимости: `typescript`, `express`, `langchain`, `@langchain/google-genai`, `@langchain/langgraph` и `zod`.
*   **Конфигурация:** В `index.ts` настраивается Express-сервер, подключается `cors` и парсинг JSON для обработки запросов от фронтенда.
*   **MongoDB:** В облачной панели MongoDB Atlas создается кластер (`Cluster0`), добавляется текущий IP-адрес для доступа и генерируется строка подключения.
*   **Безопасность:** Для доступа к Gemini через Google Cloud Platform создается API-ключ, который вместе со строкой подключения MongoDB сохраняется в файле `.env`.

## 🧠 Генерация данных и векторный поиск
[[JUMP:18:25]]

Чтобы ИИ мог осмысленно искать товары, необходимо наполнить базу данных синтетическими данными и настроить механизмы векторизации.

*   **Генерация контента:** Используется модель `gemini-1.5-flash` с температурой 0.7 для создания 10 реалистичных позиций мебели. Структура данных описывается через схему Zod, что обеспечивает строгую типизацию.
*   **Векторизация:** Создается функция `create_item_summary`, которая превращает детали товара (описание, цены, отзывы) в текстовое резюме.
*   **Хранение:** Текстовые резюме преобразуются в векторы с помощью модели `text-embedding-004` (768 измерений) и сохраняются в MongoDB Atlas.
*   **Индексация:** Настраивается индекс векторного поиска (`vector-index`), позволяющий системе выполнять семантический поиск, а не простое сопоставление ключевых слов.

## 🤖 Логика ИИ-агента (LangGraph)
[[JUMP:43:28]]

Сердце системы — агент, созданный с помощью LangGraph, который определяет, нужно ли обращаться к базе данных или отвечать пользователю напрямую.

*   **Инструмент поиска:** Создается custom-инструмент `item_lookup_tool`, который выполняет семантический поиск по базе. В случае отсутствия результатов предусмотрен «fallback» — текстовый поиск по регулярным выражениям.
*   **Рабочий процесс:** Граф состояний (StateGraph) управляет циклом: `Агент` -> `Выполнение инструмента` -> `Агент`. Состояние разговора сохраняется в MongoDB, что позволяет поддерживать контекст переписки.
*   **Обработка ошибок:** Внедрена функция `retry_with_backoff`, которая автоматически повторяет запросы к API в случае получения ошибки 429 (превышение лимита запросов).

## 💻 Фронтенд на React
[[JUMP:1:06:32]]

Для взаимодействия с агентом разработано простое React-приложение с чат-виджетом.

*   **Компоненты:** Созданы основной магазин (`ecommerce-store.js`) и чат-виджет (`chat-widget.js`), использующий React Hooks для управления состоянием переписки.
*   **Взаимодействие:** Чат-виджет отправляет сообщения пользователя на бэкенд-эндпоинт `/chat`. Агент возвращает ответы, которые динамически добавляются в интерфейс.
*   **UX-детали:** Реализована автопрокрутка к последнему сообщению при помощи `useRef` и `useEffect`, а также визуальное разделение сообщений (агент/пользователь) через CSS.