Тип бота
Ассистент, который показывает источник или признаёт, что его нет
Ассистент в Telegram с поиском по вашим документам отвечает на вопросы, приводя использованный фрагмент, и отказывается отвечать, когда поиск не нашёл ничего подходящего. Поведение при отказе и есть продукт. Он не знает ничего сверх того, что вы ему дали, и не починит документацию, которую никто не ведёт.
ИИ-ассистенты внутри Telegram: цена, сроки и ограничения
- Фиксированная цена
- $9,600 USD
- Срок
- 35 календарных дней с момента старта
- Длина сообщения
- 4096 символов на одно сообщение в Telegram
- Задержка вывода
- Секунды, а не миллисекунды
- Пересчёт эмбеддингов
- Требуется при каждой смене модели эмбеддингов
- Опора на контекст
- Нет механизма декодирования, гарантирующего, что ответ останется внутри контекста
As of 2025-10-01, Telegram Bot API 13.4
Какую задачу это решает
Почти у каждой организации есть корпус знаний, который существует и который никто не читает: свод политик, спецификация продукта, четыре года тикетов поддержки, операционный регламент. Информация там есть. Стоимость извлечения ответа из неё выше стоимости вопроса коллеге — поэтому спрашивают коллегу, и коллега становится поисковым индексом.
Генерация с опорой на поиск решает ровно эту задачу и продаётся заметно громче, чем работает. Хорошо она делает вот что: находит нужный фрагмент в корпусе и излагает его читаемым языком со ссылкой на источник. Плохо она делает одно — отказывается, если разработка не отнеслась к этому всерьёз. Ассистент, уверенно отвечающий, когда поиск не вернул ничего полезного, не просто чуть хуже: он вреден, потому что производит правдоподобные ответы на вопросы, которых ваша документация не покрывает, а читатель не может отличить их от хороших.
Поэтому инженерные усилия уходят в довольно неблагодарное место. Нарезать документы так, чтобы найденный фрагмент был самодостаточным. Оценивать выдачу так, чтобы слабое совпадение распознавалось как слабое. Ограничить генерацию так, чтобы ответ не выходил за пределы источников. И сделать «у меня этого нет, вот кто знает» полноценным исходом, а не аварийной веткой. Команды, пропускающие этот этап, выпускают демо, которое впечатляет на совещании и теряет доверие на третьей неделе.
Как идёт разработка
Документы загружаются и режутся осознанно
Границы фрагментов идут по собственной структуре документа — пункт, раздел, тикет, — а не по фиксированному числу токенов. Фрагмент, разрезанный посреди рассуждения, находится как бессмыслица, какой бы хорошей ни была модель эмбеддингов.
webhookВопрос поднимает кандидатов и оценивает их
Поиск возвращает фрагменты с оценками близости. Ниже порога, подобранного на этапе оценки качества, ассистент не пытается отвечать. Этот единственный порог даёт для доверия больше, чем любой выбор модели.
commandsГенерация ограничена найденным материалом
Модели предписано отвечать только по переданным фрагментам и сообщать, когда их недостаточно. Это не гарантия — именно поэтому источник показывается всегда, а не как необязательное дополнение.
commandsОтвет приходит вместе с источником
Документ, раздел и сам фрагмент. Читатель, усомнившийся в ответе, проверяет его одним нажатием, и со временем именно эта возможность заставляет людей доверять тем ответам, которые они не проверяют.
inline-keyboardОтказ ведёт к человеку, а не обрывает разговор
Не «я не могу с этим помочь», а передача человеку вместе с самим вопросом. Тупик приучает людей больше не спрашивать, и это убивает пользу от ассистента быстрее, чем неверный ответ.
forum-topicsПлохие ответы превращаются в правки корпуса
Любой ответ помечается одним нажатием, а пометки группируются по документам. На выходе — короткий список фрагментов, которые ошибочны, отсутствуют или двусмысленны; это бэклог на документацию, и обычно самый ценный артефакт всего проекта.
inline-keyboard
Что Telegram разрешает, а что нет
Одно сообщение в Telegram ограничено 4096 символами.
Длинный ответ со ссылками на источники приходится делить или сокращать. Разрыв посреди цитаты делает источник непроверяемым, поэтому ответ укладывается в лимит на этапе генерации, а не обрезается после.
Качество поиска ограничено нарезкой, а нарезка ограничена структурой документов.
Корпус из сканированных PDF без заголовков ищется плохо независимо от модели. Оценка корпуса — первый шаг проекта, и иногда честный вывод в том, что корпус надо привести в порядок прежде, чем строить над ним хоть какого-то ассистента.
Вывод языковой модели добавляет задержку, измеряемую в секундах, а не в миллисекундах.
Бот показывает индикатор набора и отдаёт ответ потоком там, где может, но ответ заметно дольше обычного поиска по справочнику. Для вопросов с детерминированным ответом лучше подходит прямой запрос к данным — он и используется.
Построение эмбеддингов для набора документов стоит разово и пропорционально его объёму, а при смене модели требуется пересчёт.
Обновление модели не бесплатно. Конвейер устроен так, что пересчёт — плановая задача, а не пересборка, но затраты реальны и должны стоять в бюджете первого года.
Ничто не удерживает языковую модель строго в пределах переданного контекста.
Показанный источник — предохранитель, а не доказательство. Любое применение, где неверный ответ несёт юридические или клинические последствия, требует человека в контуре, и сборка говорит об этом прямо, а не намекает на обратное.
Когда это не нужно строить
- Ваша документация устарела и за неё никто не отвечает. Ассистент будет выдавать неверный ответ быстрее и увереннее, чем это сделал бы человек.
- У вопросов есть детерминированные ответы, которые отдала бы база данных. Поиск и генерация добавляют задержку, стоимость и неопределённость там, где обычный запрос отвечает точно.
- Неверный ответ несёт клинические, юридические или финансовые последствия, а шага проверки человеком нет. Показанный источник делает проверку возможной; автоматической он её не делает.
- Вы хотите заменить им службу поддержки, а не ускорить её. Путь эскалации здесь несущий, и сборка, за которой никого нет, ломается ровно на тех вопросах, которые были важны.
На чём это работает
| Компонент | Версия | Зачем |
|---|---|---|
| grammY | 1.45 | Фреймворк бота: потоковая выдача ответа и кнопки с источниками. |
| Cloudflare Workers AI | current | Эмбеддинги и вывод модели на периферии, корпус остаётся в вашем аккаунте. |
| Cloudflare Vectorize | current | Векторный индекс для поиска; пороги оценки применяются прямо в запросе. |
| Cloudflare D1 | current | Метаданные документов, журналы разговоров и обратная связь по ответам. |
| TypeScript | 5.9 | Строгий режим; результаты поиска типизированы так, что фрагмент без оценки не дойдёт до генерации. |
О чём спрашивают перед стартом
Что он делает, когда не знает ответа?
Говорит об этом и передаёт вопрос человеку вместе с формулировкой самого вопроса. Этот путь проектируется первым, а не последним, потому что ассистент, уверенно отвечающий из пустоты, разрушает доверие ко всем своим ответам, включая верные.
Как мы поймём, что ответ действительно взят из наших документов?
Каждый ответ показывает использованный фрагмент и его происхождение, проверить можно одним нажатием. Это предохранитель, а не доказательство — ни один приём не удерживает языковую модель в контексте с гарантией, — и ровно поэтому источник всегда на виду.
Должна ли наша документация сначала стать хорошей?
Она должна быть актуальной и достаточно структурированной, чтобы её можно было нарезать. Оценка этого — первый шаг проекта, и там, где корпус действительно плох, честная рекомендация — привести документацию в порядок прежде, чем строить над ней что-либо.
Куда уходят наши данные?
Эмбеддинги и вывод модели работают в вашем аккаунте Cloudflare, а не отправляются стороннему поставщику модели. Для организаций с требованиями к месту хранения данных это обычно решающий фактор, и его стоит сверить с вашими конкретными обязательствами на этапе согласования.
Как это поддерживается в актуальном состоянии при изменении документов?
Повторная загрузка идёт по расписанию или по webhook об изменении там, где исходная система это умеет. Устаревший индекс — самый частый способ для таких систем тихо деградировать, поэтому свежесть отслеживается, а не предполагается.
Будет ли это работать на арабском?
Да, с оговоркой: качество поиска по арабской технической документации разбросано сильнее, чем по английской. Это стоит проверить на вашем собственном корпусе во время согласования, а не полагаться на общий бенчмарк.
Что на выходе даёт контур обратной связи?
Ранжированный список фрагментов, породивших помеченные ответы. Это самый полезный побочный продукт проекта: конкретный, подкреплённый примерами бэклог по документации вместо общего ощущения, что регламент мог бы быть лучше.