Компания с большим потоком обращений просила снять с поддержки одинаковые вопросы.
Клиенты спрашивали одно и то же - что входит в тариф, как продлить, почему не пришёл документ, куда писать при возврате.
Ответы существовали, но лежали в разных местах: регламенты в Word, кусок в вики, кусок только в голове у старших операторов.
Новый сотрудник искал ответ по десять минут либо отвечал по-своему, и потом это разгребали.
Бот на готовых сценариях с кнопками у них уже стоял, он спотыкался на любом вопросе, сформулированном своими словами.
Нужен был ассистент, который отвечает по внутренним документам компании и не сочиняет того, чего в них нет.
Собрал ассистента на Python и FastAPI, один движок отвечает и в телеграм-боте, и в виджете на сайте.
Документы грузятся через панель - docx, pdf, простой текст.
Каждый режется на фрагменты по смысловым границам - если резать подряд по числу символов, ответ обрывается на середине пункта регламента.
Фрагменты уходят в векторную базу, на вопрос поднимаются пять ближайших.
Модель подключена через сервис OpenRouter, отвечает строго по поднятым кускам и называет документ и раздел, откуда взяла формулировку.
Подходящего фрагмента нет - ассистент так и пишет, что этого в базе не нашлось, и передаёт диалог оператору вместе с историей переписки.
Тут ассистенты и сыпятся: без жёсткого ограничения модель начинает сочинять условия тарифа, которых не существует.
Поэтому запрет отвечать вне контекста стоит в промпте, а ответ, под которым не оказалось ни одной ссылки на источник, клиенту не показывается вовсе.
При замене документа старые фрагменты удаляются из базы, то-есть переиндексация полная, иначе ассистент месяцами цитирует отменённый регламент.
В панели лежит лог всех вопросов, отдельной вкладкой - те, на которые ответ не нашёлся.
Ограничение на число запросов с одного аккаунта, чтобы лимит модели не выжгли за вечер.
На операторах осталась примерно треть прежнего объёма обращений, остальное ассистент закрывает сам.
Ночные и выходные вопросы больше не ждут до утра понедельника.
Ссылка на источник под ответом сняла споры - клиент видит, из какого документа взято условие, а оператор при передаче диалога не начинает с нуля.
Вкладка с вопросами без ответа за первые недели показала около сорока дыр в регламентах, часть закрыли текстом, часть оказалась настоящими пробелами в процессах.
У заказчика остались панель загрузки документов, исходники и инструкция - как добавить документ и где смотреть, о чём спрашивают чаще всего.
Позже дописали ответы на английском для части клиентов и кнопку позвать человека прямо в чате.