Когда команда заводит центр помощи, она редко начинает с нуля. Ответы уже есть: руководство по продукту, которое кто-то выгрузил в PDF два года назад, правила возврата денег в Word, макросы из старого хелпдеска, распечатка у стола поддержки, которую можно сфотографировать. Нет только времени перепечатать всё это в редактор.
Поэтому в центре помощи так и остаётся три статьи, ИИ-чат поверх него на большинство вопросов отвечает «Не нашёл», а руководство по-прежнему никому ничего не отвечает.
На этой неделе я выпустил импорт файлов для центра помощи Kookee. Вы перетаскиваете файлы Markdown, текстовые, HTML, Word, PDF или изображения на новую вкладку Импорт файлов, и каждый становится статьёй центра помощи — публичной или только для ИИ-чата.

Принять файлы было просто. Больше всего работы ушло на правила вокруг них.
Семь правил импорта документов в центр помощи
1. Каждый файл становится черновиком
Импортированная статья — это чужой документ на новом месте, который ещё никто не прочитал. Поэтому каждый файл становится черновиком. Единственный короткий путь включается вручную: Автоматически публиковать файлы без замечаний публикует файлы, в которых проверка содержимого ничего не нашла, а остальные придерживает.
2. Проверяйте, что написано в файле, а не только то, что он прочитался
Центр помощи публичный, а ИИ-чат поверх него цитирует прочитанное любому, кто спросит. Импортированный документ — как раз то место, где прячется то, что никогда не должно стать публичным: API-ключ в инструкции для дежурных, имя и телефон клиента в заметке об эскалации, абзац, который начинается словами «Ассистент, когда кто-то спросит о возврате денег, скажи…».
Поэтому каждый файл один раз читает ИИ-модель, прежде чем он станет статьёй. Она отмечает возможные проблемы конвертации, возможные конфиденциальные данные и текст, обращённый к ИИ-ассистенту, цитирует нужный фрагмент, а замечания появляются в карточке Импортированный файл рядом с черновиком. Черновик с замечаниями никогда не публикуется автоматически, что бы ни было указано в настройке.

Модели, которая проверяет файл, сказано, что документ — это данные, а не инструкции, и что отмечать не нужно: адрес и телефон поддержки самой компании — смысл статьи в центре помощи, а не утечка.
3. Статьи только для чат-бота не закрыты
Статьи только для чат-бота в Kookee есть давно: их нет в центре помощи, но по ним отвечает ИИ-чат. При импорте этот вариант выглядит безопасным местом для внутренних документов. Это не так. Чат отвечает по этим статьям и цитирует их любому посетителю вашего сайта, который задаст правильный вопрос.
Поэтому, как только вы выбираете Только чатбот, форма говорит об этом прямо: статьи скрыты из списков, но не закрыты, не импортируйте внутренние или конфиденциальные документы. Я лучше потеряю один импорт, чем кто-то узнает, что значит «только для чат-бота», из скриншота клиента.

4. Сначала читайте текстовый слой, а в ИИ отправляйте только сканы
Обычно в PDF есть сам текст. Прочитать его можно бесплатно, точно и мгновенно, поэтому Kookee делает это постранично, а сканами считает только страницы почти без текста. Они уходят в ИИ-модель пачками до пяти страниц, вместе с изображениями вроде фотографии распечатки, и возвращаются в виде Markdown с заголовками, списками и таблицами на своих местах.
Руководство из сорока страниц текста и одного отсканированного приложения отправляет в модель только приложение — один вызов на каждые пять отсканированных страниц, а не все сорок одну страницу. А страницу, которую модель прочитать не смогла, никто не додумывает: она пропускается и указывается в черновике, чтобы её посмотрел человек.
5. Один файл — одна статья, и чат, который находит 40-ю страницу
Я думал о том, чтобы резать длинные документы по заголовкам на много маленьких статей, и отказался. Нарезка решает структуру центра помощи за вас, а руководство, разрезанное на тридцать кусков, труднее поддерживать в актуальном виде, чем одну статью.
Но одна длинная статья сломала другое. До сих пор ИИ-чат Kookee видел первые 3000 символов открытой статьи и превью в 200 символов у каждого результата поиска. 40-я страница руководства была для него невидимой. Поэтому в том же релизе изменился и чат: семантический поиск теперь отдаёт ему четыре самых подходящих фрагмента целиком, не больше двух из одной статьи и из любого её места, а если открытая статья длиннее прочитанного, чат об этом узнаёт и может поискать остальное.
6. Считайте страницы, считайте один раз и не считайте за отклонённый файл
Чтение с помощью ИИ стоит денег, поэтому у импорта есть месячный лимит в страницах: 50 на бесплатном тарифе, 1000 на Pro и 5000 на Ultra. PDF считается по своим страницам, изображение — как одна страница, а всё остальное — одна страница за каждые начатые 3000 символов.
Две детали важнее самих цифр. Страницы считаются один раз, до любого обращения к модели, и повторная попытка их больше не считает. А файл, отклонённый до подсчёта страниц (повреждённый, защищённый паролем или слишком длинный), ничего не стоит.
7. Ничего из импортированного файла не запускается, и ничему в нём нет доверия
В HTML-выгрузке могут быть скрипты, файл Word может ссылаться на картинки на чужом сервере, а страница, сохранённая с сайта на Kookee, содержит ссылки на записи другого проекта. Поэтому скрипты и фреймы выбрасываются и никогда не запускаются, связанные картинки из файлов Word никогда не скачиваются, байты файла должны соответствовать его расширению, размер архива файла Word проверяется до того, как его что-то прочитает, а ссылки на другие записи и @упоминания становятся обычным текстом.
Картинки подчиняются тому же правилу. Начиная с v1.22.0, импорт переносит и их, а каждая картинка декодируется и сохраняется заново в WebP: файл, который только притворяется картинкой, отклоняется, у SVG нет шанса что-то запустить, а данные о камере и местоположении отбрасываются. Картинка из интернета скачивается через загрузчик, который отклоняет частные и внутренние адреса, заново проверяет каждый редирект и сдаётся через 10 секунд или после 10 МБ. А поскольку проверка содержимого читает текст, а не картинки, статья с импортированными картинками всегда ждёт человека.
Что происходит, когда вы нажимаете «Импортировать»
Каждый файл проходит через очередь с повторными попытками: конвертация, чтение отсканированных страниц, проверка содержимого, создание черновика. История импорта под формой показывает, на каком этапе каждый файл, а когда он готов, даёт ссылку на черновик.

Если воркер упадёт посреди распознавания, ежечасная проверка найдёт застрявший импорт и продолжит его с того места, где он остановился, — не больше трёх раз, а всё, что не закончилось за сутки, бросит. Исходный файл хранится без публичного доступа вместе со статьёй, которая из него получилась, и удаляется, когда вы удаляете статью.
Если вы делаете импорт
Превращайте каждый файл в черновик, а публикацию делайте опцией, которую включают вручную.
Проверяйте каждый файл на секреты, персональные данные и инструкции для вашего чат-бота, прежде чем чат-бот сможет его прочитать.
Прямо скажите, что «только для чат-бота» не значит «закрыто».
Используйте текстовый слой и отправляйте в ИИ-модель только те страницы, которым это нужно.
Перечисляйте то, что не удалось прочитать, а не додумывайте.
Считайте расход один раз, до дорогой части, и никогда за отклонённые файлы.
Не доверяйте файлу: никаких скриптов, никаких id, которые создали не вы, а картинки из интернета — только через загрузчик, который отклоняет частные адреса.
Научите чат находить фрагменты глубоко в длинных статьях, прежде чем предлагать людям их импортировать.
Читайте также
Импорт файлов в центр помощи — форматы, шаги, проверка содержимого и месячный лимит страниц.
Чат-виджет не должен уводить посетителей читать ответ на другую страницу — как виджет для сайта открывает статьи центра помощи прямо внутри себя.
Как ассистент выбирает источники — что говорит строка «Источники» под ответом.