# Ядро системы - Маршрутизатор и RAG

### Создание основы мультиагентной системы

### Архитектура системы

В основе нашей мультиагентной системы лежит **Маршрутизатор** - это "диспетчер", который анализирует вопрос пользователя и решает, какой именно агент должен его обработать. По умолчанию система использует RAG для поиска информации в базе знаний.

[![svgviewer-output.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/PYPRwtuLVpuhNXQD-svgviewer-output.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/PYPRwtuLVpuhNXQD-svgviewer-output.png)

[![svgviewer-output (1).png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/FGUS0tMvEXtpuVae-svgviewer-output-1.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/FGUS0tMvEXtpuVae-svgviewer-output-1.png)

Каждый агент выполняет свою специализированную задачу:

1. **CompanyInfo** - отвечает на вопросы о компании
2. **SQL-агент** - работает с базами данных

### Часть 1: Установка и настройка основного агента

#### Шаг 1: Импорт готового решения

Мы подготовили готовую конфигурацию, которую можно быстро развернуть:

1. Перейдите по предоставленной ссылке для скачивания конфигурации
2. Скопируйте JSON-код конфигурации
3. В интерфейсе Метабот откройте раздел "Импорт бизнеса/ботов"
4. Вставьте скопированный JSON и нажмите "Импорт"

[![Экспорт бота.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/uZNcK2ucHLQwfn9v-eksport-bota.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/uZNcK2ucHLQwfn9v-eksport-bota.png)

[![Импорт бота 2.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/Owg50G6Oq320pTBe-import-bota-2.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/Owg50G6Oq320pTBe-import-bota-2.png)

#### Шаг 2: Проверка установленных компонентов

После успешного импорта в вашем боте должны появиться следующие элементы:

**1. Системный раздел MRAG** Это ядро системы, которое обрабатывает запросы и управляет агентами.

[![Pasted image 20250904155253.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/lkJuI0ubGYmpiPfv-pasted-image-20250904155253.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/lkJuI0ubGYmpiPfv-pasted-image-20250904155253.png)

**2. Базовые таблицы данных:**

- `gpt_knowledge_base` - хранилище знаний для RAG
- `gpt_prompts` - коллекция промптов для разных агентов

[![Pasted image 20250905110051.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/gp8B8GGQmqC6B31I-pasted-image-20250905110051.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/gp8B8GGQmqC6B31I-pasted-image-20250905110051.png)

[![Pasted image 20250904155359.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/ddIEfz2sehBQQtaG-pasted-image-20250904155359.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/ddIEfz2sehBQQtaG-pasted-image-20250904155359.png)

**3. Плагин управления "AgentsParams"** Центр управления всеми настройками агентов.

[![Pasted image 20250904155709.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/LTDRu8kVdNz9pevx-pasted-image-20250904155709.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/LTDRu8kVdNz9pevx-pasted-image-20250904155709.png)

#### Шаг 3: Настройка конфигурации агентов

Мы создали систему конфигураций, которая позволяет управлять агентами без глубокого понимания кода. Все настройки вынесены в понятные конфигурационные файлы.

> **Совет для работы:** В конфигурации есть множество параметров. Используйте поиск по документации, чтобы быстро найти описание нужного параметра и понять, как он работает.

##### Основные поля конфигурации:

```javascript
let activeAgent = lead.getAttr("activeAgent") // Устанавливается при вызове скрипта
let agentCFG = {} // Объект с настройками текущего агента

if (activeAgent === "MainFlow") {
  agentCFG = {
    common: {
      title: "Основной Flow c маршрутизатором", // Понятное название агента
      agentName: "MainFlow", // Техническое имя для системы
      promptTable: "gpt_prompts", // Таблица с промптами
      userQueryAttibName: "user_query", // Атрибут для вопроса пользователя
      historyMaxLength: 4, // Сколько сообщений помнить в истории
      exitScript: "KB:FollowUp", // Что выполнить после завершения диалога
    },
    
    detectRoute: { // Настройки маршрутизатора
      provider: "OpenAI",
      model: "gpt-4o",
      modelParams: {
        "temperature": 1
      },
      prompt: "$route_prompt", // Промпт для определения маршрута
      routerTools: [{
        tools: "RAG_Tools", // Набор доступных инструментов
        route: "RAG:DetectIntent_and_FindChunks", // Скрипт для RAG
      }],
      errorScript: "RAG:ErrorFallback", // Обработка ошибок
    },
    
    detectIntent: { // Детектор намерений пользователя
      provider: "OpenAI",
      model: "gpt-4o",
      modelParams: {
        "temperature": 1
      },
      prompt: "$rag_intent_prompt", // Промпт для анализа намерений
      errorScript: "RAG:ErrorFallback",
      kbName: "defKnowBase", // База знаний
      kbDomain: "main", // Домен знаний
    },
    
    userReply: { // Генератор ответов пользователю
      provider: "OpenAI",
      model: "gpt-4o",
      modelParams: {
        "temperature": 1
      },
      errorScript: "RAG:ErrorFallback",
      useHistory: 1, // Использовать контекст диалога
      addUserQuery: 1, // Добавлять вопрос в промпт
      sendBotAnwser: 1, // Отправлять ответ пользователю
      systemPrompts: { // Структура промптов
        start: [["$start_prompt", "$rag_prompt"]], // Начальные промпты
        final: ["$final_prompt"] // Финальные промпты
        // Между start и final автоматически вставляется история диалога
      },
    }
  }
} else if (activeAgent === "newAgent") { 
  // Здесь описываются конфигурации других агентов
  // Поля могут отличаться в зависимости от специализации агента
} else {
  bot.sendMessage(`MainConfig:snippet - неизвестный activeAgent: ${activeAgent}`)
  bot.stop()
}

```

#### Шаг 4: Настройка таблицы промптов

Промпты - это инструкции для ИИ. Они определяют, как агент будет вести себя и отвечать на вопросы.

**Процедура настройки:**

1. Откройте таблицу `gpt_prompts` в интерфейсе Метабот
2. Создайте промпт для каждого агента с уникальным именем
3. Заполните три обязательных поля: 
    - `agent_name` - имя агента (например: "MainFlow")
    - `name` - название промпта (например: "route\_prompt")
    - `prompt` - содержание промпта с макропеременными

**Пример настройки промпта маршрутизатора в таблице:**

```
agent_name: MainFlow
name: route_prompt
prompt: Ты агент ИИ который отвечает на вопросы о компании {{@company_name}}. 

У тебя есть инструменты в распоряжении:
<tools>
**RAG_Tools** - Используется, когда нужно ответить на вопросы об услугах 
и продукции компании, об условиях эксплуатации продукции, об используемых 
инструментах для монтажа продукции и т.д.
</tools>

Учитывая историю и запрос пользователя, сделай вывод о реальном намерении 
пользователя. Отвечай на русском языке без лишних рассуждений и вопросов.

История чата:
"""{{$chat_history_str}}"""

Запрос пользователя:
"""{{$user_query}}"""

Пожалуйста, отвечай как можно точнее и всегда обязательно указывай инструмент (Tools). 
Ответ всегда должен быть представлен в виде JSON-объекта, в котором выводятся 
указанные ниже поля. JSON в самом конце! Без пояснений.

{
  "tools": "",  string: название выбранных вами инструментов 
  "user_intent": "",  string: подробное намерение пользователя для системы RAG 
  "request": ""  "полученный вами запрос" 
}

```

##### Система макросов в промптах

Для динамической подстановки данных используйте макросы:

**Данные из лида:** `{{$lead_attr}}` - любой атрибут лида  
**Данные из бота:** `{{@bot_attr}}` - любой атрибут бота

**Системные макросы:**

- `{{$chat_history_str}}` - история диалога в текстовом виде
- `{{$user_query}}` - текущий вопрос пользователя

### Часть 2: Настройка API-доступа

#### Шаг 5: Создание API-пользователя

Для работы мультиагентной системы необходимо настроить API-доступ:

1. В настройках бизнеса создайте нового пользователя
2. Установите галочку "Пользователь API"
3. Предоставьте доступ к нужным ботам (всем или выбранным)
4. Назначьте соответствующую роль доступа

[![Pasted image 20250904162224.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/pVdixkmScBKZWVIZ-pasted-image-20250904162224.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/pVdixkmScBKZWVIZ-pasted-image-20250904162224.png)

**Генерация токена доступа:**

1. Создайте API-клиента для пользователя
2. Сгенерируйте токен доступа
3. **Важно:** Сохраните токен - он потребуется для подключения к API-шлюзу
4. **Обязательно:** Используйте токен в режиме 3

[![Pasted image 20250904162220.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/aDiuQXylepqYvePL-pasted-image-20250904162220.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/aDiuQXylepqYvePL-pasted-image-20250904162220.png)

[![Pasted image 20250904162212.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/MM5rmV1KEJoguXpZ-pasted-image-20250904162212.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/MM5rmV1KEJoguXpZ-pasted-image-20250904162212.png)

#### Шаг 6: Регистрация в API-шлюзе

API-шлюз обеспечивает асинхронное взаимодействие между компонентами системы.

1. Обратитесь в поддержку. Сейчас регистрация производится специалистами Метабот.
2. Сообщите им параметры регистрации: 
    - `bot_id` - идентификатор вашего бота
    - `token` - токен API, полученный на предыдущем шаге
    - `domain` - доменное имя сервера, где размещен бот. Например `https://app.metabot24.com`

### Часть 3: Запуск и тестирование

#### Шаг 7: Создание пользовательского интерфейса

Создайте скрипт, который позволит пользователям взаимодействовать с системой:

[![Pasted image 20250904161316.png](https://docs.metabot24.ru/uploads/images/gallery/2025-09/scaled-1680-/WjEFdtsGm6m8pktd-pasted-image-20250904161316.png)](https://docs.metabot24.ru/uploads/images/gallery/2025-09/WjEFdtsGm6m8pktd-pasted-image-20250904161316.png)

**Ключевые параметры запуска:**

1. **MainFlow** - выбор основного агента для обработки запроса
2. **user\_query** - атрибут для сохранения вопроса пользователя
3. **Flow 0** - запуск скрипта маршрутизатора

#### Результат работы системы

При правильной настройке ваша мультиагентная система будет:

- **Понимать контекст** диалога и поддерживать связную беседу
- **Автоматически определять** наиболее подходящий агент для каждого вопроса
- **Использовать базу знаний** для предоставления точных ответов
- **Обращаться к специализированным агентам** при необходимости (SQL-агент, CompanyInfo и др.)

Система готова к работе и может быть расширена дополнительными агентами в зависимости от ваших потребностей.