Skip to content

Cloud AI Training

ShaerWare edited this page Mar 3, 2026 · 5 revisions

Cloud AI — Датасет и обучение облачных ИИ

Раздел Cloud AI позволяет управлять базой знаний для облачных языковых моделей (Gemini, OpenAI, Claude, DeepSeek и др.). В отличие от локального LoRA-дообучения, здесь не меняются веса модели — вместо этого формируется контекстная база документов, которая автоматически подставляется в промпт при каждом запросе пользователя.

Доступ: Админ-панель → Fine-tune → Cloud AI (для роли web — единственный режим на странице Fine-tune).

Как это работает

Пользователь задаёт вопрос
        ↓
Wiki RAG ищет релевантные секции в базе знаний (TF-IDF)
        ↓
Найденные секции добавляются в системный промпт
        ↓
Облачная LLM получает запрос + контекст из документации
        ↓
Ответ учитывает информацию из ваших документов

Это называется RAG (Retrieval-Augmented Generation) — поиск + генерация. Модель не «запоминает» ваши данные, а получает их как контекст к каждому вопросу.

Преимущества перед LoRA fine-tuning

Cloud AI (RAG) Local (LoRA)
GPU Не нужен RTX 3060+ (12GB)
Время подготовки Мгновенно (загрузил файл — готово) Часы на обучение
Обновление данных Загрузил новый файл — сразу работает Переобучение модели
Стоимость API-ключ облачного LLM Своё железо
Качество Точные цитаты из документов Модель «знает» стиль ответов

Лучший результат — комбинация обоих подходов: LoRA для стиля и тона, RAG для актуальных данных.


1. Wiki RAG — Статус индекса

Первый блок на странице Cloud AI показывает текущее состояние поисковой базы:

Метрика Описание
Секций Сколько секций (## и ### заголовков) проиндексировано из всех документов
Файлов Сколько .md файлов обработано
Уникальных токенов Размер словаря (количество уникальных слов в индексе)
Статус «Активен» (есть документы) или «Пуст» (нет документов)

Ниже — список проиндексированных файлов (имена без расширения).

Кнопка «Переиндексировать»

Перечитывает все .md файлы из папки wiki-pages/ и заново строит поисковый индекс в оперативной памяти. Используйте после:

  • Ручного добавления/изменения файлов на сервере
  • Изменения содержимого документов через файловую систему
  • Если поиск возвращает устаревшие результаты

Переиндексация при загрузке/удалении через UI происходит автоматически.


2. Документы базы знаний

Таблица всех документов с колонками: файл, название, тип, количество секций, размер.

Загрузка документов

  1. Нажмите «Выбрать файл» — поддерживаются форматы .md и .txt
  2. После выбора появится имя файла и кнопка «Загрузить»
  3. Файл сохраняется в папку wiki-pages/ на сервере
  4. Автоматически происходит переиндексация

Файлы .txt автоматически конвертируются в .md (меняется расширение).

Формат документов

Документы в формате Markdown. Для лучшего качества поиска структурируйте их с заголовками:

# Название документа

## Раздел 1

Текст раздела. Минимум 50 символов в каждой секции, чтобы
она попала в индекс.

## Раздел 2

Ещё один раздел. Каждый ## или ### заголовок создаёт
отдельную секцию в поисковом индексе.

### Подраздел 2.1

Подразделы (###) тоже индексируются как отдельные секции.

Рекомендации:

  • Используйте ## и ### заголовки для разбиения на секции
  • Каждая секция должна быть самодостаточной (содержать полный ответ на вопрос)
  • Минимум 50 символов на секцию — короткие секции пропускаются
  • Файлы, начинающиеся с _ (например _Sidebar.md), игнорируются

Удаление документов

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

Автосинхронизация

При первом открытии страницы система сканирует папку wiki-pages/ и создаёт записи в БД для файлов, которые есть на диске, но ещё не зарегистрированы. Это полезно если вы добавили файлы напрямую через файловую систему.


3. Тестовый поиск

Позволяет проверить, как работает поиск по базе знаний, до того как пользователи начнут задавать вопросы боту.

Как использовать

  1. Введите запрос в поле поиска (например, «как установить систему»)
  2. Выберите количество результатов: Top 3, Top 5 или Top 10
  3. Нажмите «Поиск» (или Enter)

Результаты

Для каждого найденного результата отображается:

Поле Описание
Заголовок Название секции (## или ### заголовок из документа)
Score Числовой показатель релевантности (TF-IDF). Чем выше — тем лучше совпадение
Источник Имя файла, из которого взята секция
Текст Превью содержимого секции (до 500 символов)

Как интерпретировать score

  • > 5.0 — отличное совпадение, запрос точно покрыт документацией
  • 2.0 – 5.0 — хорошее совпадение, контекст релевантен
  • < 2.0 — слабое совпадение, возможно стоит добавить документ по этой теме

Если результатов нет — значит ни одно слово из запроса не найдено в индексе. Добавьте документ, содержащий ответ на этот вопрос.


Как RAG влияет на ответы бота

Wiki RAG работает автоматически — никакой специальной настройки system prompt не нужно. Достаточно загрузить документы в базу знаний, и система сама начнёт подставлять контекст.

Что происходит при каждом сообщении

Пользователь отправляет сообщение
        ↓
1. Бэкенд берёт текст сообщения
        ↓
2. WikiRAGService.retrieve(текст, top_k=3, max_chars=1500)
   → TF-IDF поиск по всем секциям в индексе
   → Возвращает top-3 релевантных секции
        ↓
3. Секции форматируются в блок:
   [Документация по теме:]
   ## Заголовок секции (имя_файла)
   Тело секции...
        ↓
4. Блок добавляется В КОНЕЦ системного промпта:
   system_prompt = "{промпт персоны}\n\n{блок документации}"
        ↓
5. LLM получает: system prompt + контекст + историю + вопрос
        ↓
6. Ответ учитывает информацию из документов

Где работает RAG

Канал RAG работает? Как
Чат (админ-панель) Да Напрямую в app/routers/chat.py
Виджет (на сайте) Да Через тот же чат-роутер
Telegram бот Да Бот ходит через API оркестратора → чат-роутер
WhatsApp бот Да Бот ходит через API оркестратора → чат-роутер

Все каналы проходят через один endpoint (POST /admin/chat/sessions/{id}/stream), где и происходит RAG-инжекция.

Настройка system prompt

RAG дополняет системный промпт, а не заменяет его. Промпт формируется по приоритетам:

  1. Кастомный промпт (если задан в настройках виджета/бота) → используется он
  2. Промпт персоны (Анна/Марина) → берётся из SECRETARY_PERSONAS в vllm_llm_service.py
  3. Wiki RAG контекствсегда добавляется в конец, к любому промпту

Пример итогового system prompt:

Ты — Анна, виртуальный секретарь компании. Ты помогаешь клиентам
с вопросами о продуктах и услугах. Отвечай вежливо и по делу.

[Документация по теме:]

## Код для встраивания (Widget)
Виджет — это чат-окно, которое встраивается на любой сайт
одним <script> тегом. Формат:
<script>
  window.aiChatSettings = {
    apiUrl: 'https://your-server.com',
    instanceId: 'sales-widget'
  };
</script>

## Размещение (Widget)
Вставьте код перед закрывающим тегом </body> на вашем сайте.

Как настроить для лучших результатов

  1. Загрузите документы — Админ-панель → Fine-tune → Cloud AI → загрузите .md файлы
  2. Структурируйте заголовками — каждый ## создаёт отдельную секцию в индексе
  3. Проверьте поиск — используйте тестовый поиск на той же странице
  4. Кастомизируйте промпт (опционально) — в настройках виджета/бота можно задать свой system prompt, например:
Ты — консультант по продукту X. Используй информацию из документации ниже
для точных ответов. Если в документации нет ответа — скажи честно.

RAG-контекст добавится автоматически после этого промпта.

Параметры поиска

Параметр Значение Описание
top_k 3 Количество лучших секций для контекста
max_chars 1500 Максимальный размер контекста (символов)
min_section_len 50 Минимальная длина секции для индексации
header_boost x2 Слова в заголовках ## весят вдвое больше

Эти параметры зашиты в коде (app/routers/chat.py:316, app/services/wiki_rag_service.py). Для изменения требуется редактирование кода.

Пример работы

Пользователь спрашивает: «Как подключить виджет на сайт?»

Система находит в Wiki RAG секцию «Встраивание на сайт» из файла Widget.md и добавляет её в промпт. Облачная LLM отвечает на основе этой документации — с точными инструкциями и примерами кода.


API-эндпоинты

# Статус и управление
GET  /admin/wiki-rag/stats              # Статистика индекса + список файлов
POST /admin/wiki-rag/reload             # Переиндексация wiki-pages/
POST /admin/wiki-rag/search             # Поиск: query → scored results

# Документы (CRUD)
GET    /admin/wiki-rag/documents            # Список документов (+ автосинхронизация)
POST   /admin/wiki-rag/documents/upload     # Загрузка .md/.txt файла
GET    /admin/wiki-rag/documents/{id}       # Метаданные + превью содержимого
PUT    /admin/wiki-rag/documents/{id}       # Обновить title/content
DELETE /admin/wiki-rag/documents/{id}       # Удалить файл + запись в БД

Структура файлов

wiki-pages/                          # Директория с документами базы знаний
├── Home.md                          # Главная страница документации
├── Installation.md                  # Инструкция по установке
├── Chat.md                          # Документация по чату
├── LLM.md                           # Документация по LLM
├── ...                              # Другие .md файлы
├── _Sidebar.md                      # Навигация (игнорируется при индексации)
└── images/                          # Изображения для документов

app/services/wiki_rag_service.py     # TF-IDF поисковый движок
app/routers/wiki_rag.py              # API-роутер (8 эндпоинтов)
db/models.py → KnowledgeDocument     # SQLAlchemy модель
db/repositories/knowledge_document.py # Репозиторий
modules/knowledge/service.py → KnowledgeDocService  # Доменный сервис (ранее AsyncKnowledgeDocManager в db/integration.py)

Советы по наполнению базы знаний

  1. Один документ — одна тема. Файл pricing.md лучше, чем «всё в одном файле»
  2. Заголовки — это ключ. Слова в заголовках ## весят вдвое больше при поиске
  3. Пишите как FAQ. Секция с вопросом в заголовке и ответом в теле — идеальный формат
  4. Русский и английский. Индекс работает с обоими языками, стоп-слова фильтруются для обоих
  5. Минимум 50 символов. Короткие секции (< 50 символов) пропускаются при индексации
  6. Проверяйте через тестовый поиск. После загрузки нового документа — сразу проверьте, что поиск находит нужные секции по типичным запросам пользователей

Finetune | Cloud-LLM-Providers

Clone this wiki locally