Клиент — B2B SaaS-платформа в сфере логистики и учёта заявок. Команда поддержки из восьми человек; база знаний разбросана по Notion, Confluence, Google Drive и PDF к релизам. Операторы тратили 20–40 минут на поиск ответа, новички часто цитировали устаревшие инструкции.
Задача: единый поиск по документам с ответом строго из проверенных источников — без «выдумок» в сторону клиента. Решение для внутреннего саппорта, не публичный чат на сайте.
Реализация:
• ETL-пайплайн: PDF, HTML, Markdown, страницы Confluence/Notion — по cron и webhook при обновлении;
• чанкинг с учётом заголовков и таблиц, метаданные (продукт, версия, дата документа);
• embeddings, PostgreSQL + pgvector, rerank топ-фрагментов перед генерацией;
• API на FastAPI (/ask, /reindex, /feedback), JWT для операторов;
• виджет для саппорта: черновик ответа, цитаты, ссылка на источник, оценка «полезно / не то»;
• админка: статус индекса, лог запросов, эскалация чувствительных тем (оплата, персональные данные) человеку;
• мониторинг: алерт в Telegram, если индекс не обновлялся или API недоступен.
Стек: Python 3.11, LangChain, FastAPI, PostgreSQL, pgvector, Redis (кэш частых вопросов), Docker Compose, деплой на VPS клиента. Документация для админа: как добавить источник и пересобрать индекс.
Итог: черновик за 10–30 секунд вместо 20–40 минут ручного поиска; оператор правит и отправляет клиенту. Около 70% обращений закрывались с правкой одного–двух предложений. NDA: название продукта и URL не публикуются.