Как он отвечает: три шага
Главное, что стоит знать: модель не учили на ваших документах и не загружали их в неё целиком. На каждый вопрос ассистент заново находит несколько подходящих кусков текста и просит модель ответить только по ним. Поэтому, если поменяли регламент, достаточно загрузить новую версию, и ассистент сразу отвечает по ней.
Сравнивает вопрос по смыслу со всеми кусками всех документов и берёт шесть самых похожих. Ищет по смыслу, а не по словам: «работать из дома» находит раздел «Удалённая работа».
Отдаёт языковой модели эти шесть кусков и короткие правила: отвечать только по ним, ставить ссылки, не выдумывать цифры.
Модель пишет короткий ответ со ссылками. По клику на ссылку сотрудник видит исходный пункт и может проверить сам.
Выберите вопрос в строке сверху и посмотрите, что ассистент находит и что отвечает.
- Используй только факты из найденных кусков. Если ответа нет, так и скажи и подскажи, к кому обратиться.
- После каждого факта ставь ссылку на кусок: [1], [2].
- Отвечай по-русски, коротко и по делу.
- Не придумывай цифры, даты, имена и сроки.
Где он ошибается и как это ловится
Ассистент ошибается, как и любой сотрудник. Важно, чтобы ошибку было видно и её можно было исправить, а не надеяться на «умную модель». Два настоящих случая из демо.
Поэтому любой пилот я начинаю с вашего набора вопросов: 20–30 штук, которые сотрудники или клиенты задают на самом деле. На них проверяется каждая настройка: нашёл ли ассистент нужный пункт и правильно ли его пересказал. Так «вроде отвечает нормально» превращается в число, которое можно улучшать.
Ваши данные остаются у вас
И поиск, и языковая модель работают на одном сервере компании. Документы и вопросы не уходят ни в OpenAI, ни куда-либо ещё. Для многих это главный довод: регламенты, договоры и персональные данные нельзя отправлять в чужое облако.
Демо работает на обычном компьютере с игровой видеокартой RTX 5060 Ti на 16 ГБ. Короткий ответ появляется за 2–3 секунды. Сколько людей одновременно потянет такой сервер, зависит от того, как часто спрашивают. Это я оцениваю под вашу нагрузку, а если свой сервер не нужен, подбираю облако в РФ.
| Ассистент на вашем сервере | Загрузить документы в ChatGPT | |
|---|---|---|
| Где данные | у вас | на серверах OpenAI за рубежом |
| Откуда ответ | только из ваших документов, со ссылкой на пункт | из документов вперемешку с общими знаниями модели |
| Кто пользуется | все сотрудники через чат или Telegram, без отдельных аккаунтов | у каждого свой аккаунт и своя копия файлов |
| Связь с системами | можно подключить к 1С, CRM, почте | нет |
| Общий интеллект | слабее: модель меньше | сильнее |
Пилот: что нужно от вас и сколько стоит
Начинаю с одной задачи, а не со «всей компании». Пилот показывает, работает ли это на ваших документах и вопросах, до того как вы вложитесь в масштабирование.
- Вы присылаете документы и вопросыРегламенты в любом виде (PDF, Word, таблицы) и 20–30 реальных вопросов. Нужен один человек на связи, который знает, какой ответ правильный.
- Я оцениваю железоПодойдёт ли ваш сервер, что докупить или какое облако в РФ взять.
- Собираю и проверяю на ваших вопросахНастраиваю поиск и правила, пока ассистент не начнёт стабильно находить нужные пункты. Показываю результат по каждому вопросу.
- ЗапускаюВеб-чат или Telegram-бот, инструкция для сотрудников, документация для вашего айтишника. Дальше поддержка, если нужна.
Где ещё работает та же схема
Хотите такого ассистента на своих документах?
Напишите пару абзацев: какие документы и кто будет задавать вопросы. В ответ пришлю план пилота со сроками и ценой.
Под капотом: для вашего айтишника
То же самое с терминами и на живых схемах. Данные настоящие: 5 документов демо, 34 фрагмента, модели qwen3-embedding:0.6b для поиска и qwen3.6:35b-a3b для ответов, всё запущено через Ollama.
Нарезка документов на фрагментыпо разделам, до ~700 символов, с повтором абзаца на стыке
Текст из PDF достаётся библиотекой unpdf, из DOCX — mammoth. Потом он режется по заголовкам: один раздел — одна тема. Длинный раздел дробится по абзацам до ~700 символов, а последний короткий абзац куска повторяется в начале следующего, чтобы мысль на стыке не терялась. Ниже тот же алгоритм, что в демо. На 700 символах он даёт ровно столько фрагментов, сколько в настоящем индексе.
Эмбеддинги и карта смысловкаждый фрагмент — 1024 числа; похожие тексты лежат рядом
Модель эмбеддингов превращает фрагмент в вектор из 1024 чисел. Отдельные числа ничего не значат, но у текстов про похожее похожие векторы, даже если общих слов нет.
Если сжать 1024 измерения до двух методом главных компонент, получится карта. Расстояния на ней приблизительные, но видно, что фрагменты одного документа кучкуются, а регламент возвратов (он про клиентов) стоит особняком. Звезда — выбранный вопрос.
Поиск: косинусное сходство, топ-6, порог 0,35и зачем к вопросу дописывать инструкцию
Вопрос прогоняется через ту же модель, затем считается косинусное сходство со всеми фрагментами. В промпт идут шесть лучших, если их сходство не ниже 0,35. Qwen3-Embedding обучена с инструкцией у запроса, поэтому демо дописывает к вопросу «Найди фрагменты внутренних документов компании, которые отвечают на вопрос сотрудника». Ещё в поиск подмешивается предыдущий вопрос диалога, иначе уточнение вроде «а если на поезде?» само по себе ничего не найдёт.
Трюк с заголовкомодна строка кода решает, найдётся ли ответ
Фрагмент, вырезанный из середины раздела, теряет контекст. В куске ниже нет ни слова «деньги», ни слова «вернуть»: про это говорит только заголовок раздела. Поэтому демо считает вектор от строки «документ — раздел + текст». В промпт уходит обычный текст, а в поиске фрагмент «помнит», откуда он.
Промпт целиком и скорость моделичто именно видит модель для выбранного вопроса
Системный промпт — это правила плюс найденные фрагменты, пронумерованные [1]…[6]. Температура 0,2, режим рассуждений выключен, контекст 16 384 токена. qwen3.6:35b-a3b — «смесь экспертов»: из 35 млрд параметров на каждый токен работает около 3 млрд. Поэтому на RTX 5060 Ti 16 ГБ получается 54–67 токенов в секунду, а первый токен у прогретой модели появляется через ~1,5 с. Холодный старт с загрузкой модели — около 30 с.
В демо индекс хранится в JSON-файле. В проде на этом месте PostgreSQL с расширением pgvector.