Лаборатория архитектуры AI
Автоматизация продаж и поддержки

ИИ-менеджер по продажам

ИИ-менеджер отвечает клиенту круглосуточно, но только фактами из подготовленной базы, сам оформляет заявку и отдаёт человеку всё, чего в базе нет. Живой менеджер по вакансиям стоит 71 000 ₽ в месяц.

Объём9 диалогов, 47 сообщений
Себестоимость0 ₽ · бесплатная модель
По рынку71 000 ₽/мес — менеджер
ВердиктРаботает

Опубликовано 24.08.2026 · цифры сверены 01.09.2026

Как собрать ИИ-приём заявок: восемь шагов

  1. База фактов. Соберите цены, сроки, состав услуг и условия в документы. Отвечать бот будет только по ним.
  2. Только из документов. Нет документа — нет ответа. Иначе модель назовёт правдоподобную цену, которой у вас нет.
  3. Что считается заявкой. Опишите заранее: имя, контакт, задача, срок. Без этого бот просто поговорит и отпустит.
  4. Один вход. Поставьте бота туда, где клиент уже пишет: сайт, Telegram, WhatsApp. Переписка не должна растекаться.
  5. Передача человеку. Вопрос не из базы уходит человеку вместе с историей разговора, а не остаётся без ответа.
  6. Журнал. Записывайте каждый диалог и каждую заявку: по ним видно, чего в базе не хватает.
  7. Приёмка на живых вопросах. Прогоните десяток типовых вопросов: цена, сроки, гарантия, возврат. Ответ без источника — брак, а не мелочь.
  8. Две цифры. Следите, сколько обращений стало заявками и сколько раз бот не нашёл ответа.

Что под какую задачу

  • Поток одинаковых вопросов — бот с базой фактов окупается сразу.
  • Сложные сделки — бот только собирает контакт и передаёт человеку, торговаться он не должен.
  • Медицина, право, финансы — только ответы из документов и обязательная проверка человеком.

Ниже — как собран наш приём заявок: девять модулей, пороги приёмки и журнал диалогов.

01 · Этапы

Где проект сейчас

СделаноРазведка23 проекта на GitHub, четыре зрелых референса
СделаноРешенияВосемь ADR с датой, альтернативой и ценой
СделаноСпека15 тикетов цепочкой с блокирующими рёбрами
СделаноСборкаДевять модулей, 1 038 строк, 35 тестов
СделаноПриёмкаДиалоги прогнаны, пороги закрыты
СейчасРаботаетsystemd на сервере в Европе, метрики снимаются
02 · Задача

Что было нужно

Требование одно: не терять обращения вне рабочих часов и доводить их до заявки без человека. Первая линия отвечает на цену, сроки, состав и условия — вопросы с готовым ответом в документах компании. Работа шаблонная, но цена ошибки в ней не шаблонная: клиент уносит из чата обязательство, а не текст, и заявка, оформленная с чужой цифрой, дороже неотвеченной.

Ограничение, из которого выросла вся конструкция: языковая модель на вопрос о цене возвращает правдоподобное число, а не отсутствие ответа. В разговоре это простительно, в поддержке нет. Значит у каждого фактического утверждения должен быть источник, и источник должен проверяться механически.

МетодЧто из него взятоКаноническое имя · источник
Разведка до сборки
обзор рынка решений
23 проекта на GitHub, отбор по зрелости. Четыре зрелых: Chatwoot, Onyx, RAGFlow, Dify. Вывод — брать их паттерны, а не платформу: при потоке около сотни обращений в сутки комбайн из пяти контейнеров дороже задачиОбзор существующих решений до проектированиясобственное правило лаборатории, внешнего источника нет
Прожарка в три раунда
скиллы Мэтта Покока
Правка только после исследования корня; три неудачные попытки в одном месте — повод обсуждать устройство, а не делать четвёртую; одно задание описывает одну задачу; положительный рецепт работает лучше запретасобственное правило лаборатории, внешнего источника нет
Запись решений
формат ADR
Восемь документов: контекст, решение, отвергнутая альтернатива, последствие, дата. Лежат в репозитории рядом с кодом — вопрос «почему тут нет Docker» имеет письменный ответArchitecture Decision RecordsNygard, «Documenting Architecture Decisions», 2011
Глубокие модули
узкий интерфейс, толстая реализация
Адаптер канала и модуль базы знаний: снаружи два-три вызова, внутри что угодно. Веб-виджет добавляется адаптером, векторный поиск — внутри модуля, ядро в обоих случаях не трогаетсяDeep modules; порты и адаптерыOusterhout, 2018 · Cockburn, «Hexagonal architecture», 2005
Ограниченная петля
bounded agent loop
Модель сама выбирает инструмент, но не больше шести итераций на обращение. Предохранитель против бесконечного цикла вызовов при неудачном поискеАгентный цикл ReAct с потолком итерацийYao et al., ICLR, 2023
Громкий отказ
fail loudly
Пустой результат поиска не подменяется ответом и не гасится молча: он превращается в вызов эскалации. Отсутствие документа — легальный исход, а не ошибка выполненияВоздержание от ответа (abstention); fail fastEl-Yaniv & Wiener, JMLR, 2010 · Shore, IEEE Software, 2004
Приёмка порогами
набор диалогов как линейка
Пороги в числах заданы до запуска, а не после первой жалобы. Тот же набор служит линейкой при смене моделиПререгистрация порогов; golden set как регрессионная линейкаNosek et al., PNAS, 2018

Готовое решение не подошло по цене эксплуатации. Chatwoot Captain — платный Enterprise, Dify — пять с лишним контейнеров, и любой разбор ошибки упирается в чужую архитектуру. Открытого агента поддержки с продажами не существует вовсе: все собирают на общих платформах.

03 · Сборка

Как собрано

Один процесс на Python и SQLite рядом: ни контейнеров, ни очереди, ни векторного хранилища. Паттерны платформ при этом взяты целиком — маршрутизация через function calling с лимитом итераций, пустой ответ вместо ответа без источника, эскалация как инструмент, курируемые эталонные ответы.

ПРИЁМ ОБРАЩЕНИЯ канал адаптер: ядро не знает, какой мессенджер снаружи ФИЛЬТР ВХОДА лёгкая модель спам · попытка инъекции · офтоп — до ядра не доходят ЦИКЛ АГЕНТА основная модель решает сам: ответить, искать, оформить заявку, эскалировать ПОИСК ПО БАЗЕ инструмент BM25 по SQLite FTS5 · документ читается целиком не больше 6 итераций нашлось не нашлось ОТВЕТ С ЦИТАТОЙ id фрагмента в журнале ЭСКАЛАЦИЯ человек история и черновик РЕЛЕ человек ответ в том же чате ЗАЯВКА инструмент агента контакт и суть в журнал, уведомление оператору сразу ЖУРНАЛ машина обращение · intent · токены · модель · статус заявки БАЗА ЗНАНИЙ 1 · файл .md в админ-чат 2 · коммит в git 3 · пересборка индекса версии и откат — от git штриховое — то, что повторяется или лежит в стороне от обращения · акцентом — точки, где решается, выйдет ли факт наружу
Три роли на конвейере: лёгкая модель фильтрует, основная решает и ищет, человек появляется только там, где документа нет. Обе ветки сходятся к заявке и журналу — поэтому конверсия обращения в заявку и пробелы в базе считаются одним запросом.

Пустой результат поиска не превращается в ответ. Он превращается в вызов эскалации — другого выхода из этой ветки нет.

04 · Правила

На чём держится конструкция

1
Источник обязателен Фактическое утверждение выходит наружу только вместе с документом, из которого оно взято. Цена, дата, состав, условия. Логику агент формулирует сам — ограничение касается только фактов. В терминах оценки RAG это faithfulness: утверждение выводимо из документа, а не из памяти модели (Es et al., 2023). На приёмке совпадение проверяется автоматической сверкой ответа с базой.
2
Незнание — легальный исход Отсутствие документа не считается ошибкой выполнения и не подменяется общим ответом. Агент вызывает эскалацию, диалог помечается, оператору уходит история и заготовка ответа. Правка чужого текста занимает секунды, написание с нуля — минуты; на этой разнице держится вся схема. Формально это selective prediction: классификатор с правом воздержаться точнее классификатора, обязанного отвечать всегда (El-Yaniv & Wiener, 2010).
3
Заявка — не пересказ диалога Агент оформляет заявку инструментом, а не тем, что пишет оператору «кажется, клиент заинтересован». Контакт и суть ложатся строкой в журнал в момент оформления. Отсюда одним запросом считаются конверсия обращения в заявку, топ-вопросы недели и пробелы в базе знаний — без ручной выгрузки из переписки.
4
Расход в одном месте Деньги тратит только модель. Поиск, индекс и хранилище стоят ноль. Полнотекстовый индекс живёт в том же SQLite, векторной базы и внешних сервисов нет. Модель подключена через адаптер: смена провайдера — две переменные конфига, а не правка кода.
05 · Решения

Решения и основания

Каждое записано отдельным документом с датой, альтернативой и ценой. Через полгода вопрос «почему тут нет Docker» возникнет обязательно, и ответ должен лежать в репозитории рядом с кодом.

№РешениеОснование
0001Первая версия — только TelegramМультиканальность — самая дорогая часть платформ поддержки. Вынесена за адаптер, а не отрезана
0002Один процесс, не платформаСотня обращений в сутки; чужой комбайн не диагностируется
0003Агентный поиск, без эмбеддинговБаза курируемая и небольшая — полнотекстовый индекс точнее. Векторы добавляются внутрь модуля без смены интерфейса
0004База обновляется файлом в чатGit под капотом даёт версии и откат
0005Эскалация-реле, правило источникаКлиент остаётся в одном чате; пустой результат не становится ответом
0006Модель за адаптеромСмена модели и провайдера — две переменные конфига
0007systemd и venv, без DockerОдин процесс на своём сервере; контейнер ничего не добавляет
0008Хостинг в ЕвропеОтдельно от сервера аналитики
06 · Ограничения

Чем платит конструкция

РешениеЧем ограничивает
Только TelegramКлиент, пришедший на сайт, написать не может
Полнотекстовый поискВопрос чужими словами может не найтись при наличии ответа в базе
Курируемая базаПополняется вручную; агент сам не учится
Правило источникаЧасть обращений гарантированно ложится на человека
Дешёвая модельКачество ниже флагманов. Разрешены только провайдеры без обучения на переданных данных — в диалогах контакты клиентов
Один процесс без DockerГоризонтально не масштабируется

Своими словами агент отвечает на логических вопросах: устройство формата, разница между вариантами, следующий шаг. Ограничение касается фактических утверждений — цена, дата, состав, условия. Их источник это документ базы, и совпадение проверяется автоматической сверкой на приёмке.

07 · Результат

Что получилось

Пороги, по которым принимали

Диалогов9из реальных обращений
Корректных≥ 90%оценка судьёй, выборка глазами
Фактов вне базы0порог без допуска
Инъекций отбито10из подготовленного набора

Ноль фактов вне базы — единственный порог без допуска. Остальные пункты допускают процент; этот нет, потому что одна цифра, которой нет в документах, стоит дороже, чем девяносто корректных ответов приносят. Это асимметричная функция потерь: цена ложного «да» и цена пропуска не равны, и порог ставится по дорогой стороне.

Тот же набор диалогов остаётся линейкой при смене модели: адаптер переключает провайдера конфигом, а прогон по набору показывает, что изменилось.

Достоверность результата
Выборка
Девять диалогов, 47 сообщений за пять дней с 19 по 23 августа: 23 реплики от людей, 21 от бота. Это пилот, а не статистика — на таком объёме считаются штуки, не доли.
Проверки
Пороги приёмки заданы до запуска: корректных не меньше 90 % по оценке судьёй с выборочной проверкой глазами, фактов вне базы ноль, десять инъекций из подготовленного набора отбиты. Фактические значения прогона на странице приводятся порогами, а не числами: точные цифры снимаются с рабочей базы и появятся отдельной записью.
Не обобщается
База знаний на пилоте пуста, заявок оформлено ноль: проверен контур приёма, зеркала и доставки, а не качество ответов по документам. Ноль расхода — свойство бесплатного тарифа модели, а не конструкции.
Не измерено
Доля обращений, доведённых до заявки, и доля эскалаций на живом потоке; стоимость обращения в токенах. Контур персональных данных отложен до масштабирования.
Работает

Агент развёрнут и принимает обращения круглосуточно. Снимок рабочей базы на 25.08.2026: девять диалогов, 47 сообщений за пять дней, денежный расход нулевой.

Повторить самому
Архитектураблок-схема выше ↑ Решениявосемь ADR ↑

Кауфман Lab — лаборатория архитектуры искусственного интеллекта. Мы проектируем процессы и методологии. Код устаревает с каждым новым поколением моделей — методология нет, поэтому в проектах разбирается именно она. Собрать систему по этой схеме сможет любая современная нейросеть.

08 · Грабли

Что пошло не так

Четыре отказа из журнала коммитов — все пойманы до того, как их увидел клиент.

Обращение к базе из рабочего потока роняло ответДоступ к хранилищу вынесен из потока обработки: медленная операция не должна убивать диалог
Провайдер отказывает не кодом HTTP, а телом успешного ответаАдаптер разбирает оба случая и отдаёт понятную причину. Тот же отказ ловил и соседний проект на том же провайдере — это свойство провайдера, а не конструкции
Служебные команды зеркалились операторуВ зеркало уходит только содержательный диалог; /start и подобное отсекается
Текст ответа уходил без экранированияРазметка мессенджера — закрытый список сущностей; всё, что приходит от модели, экранируется перед отправкой

Отдельным решением закрыт риск на входе: пилот запускался вообще без базы знаний — сначала проверялся контур приёма, зеркала и доставки, и только потом подключался поиск. Ошибка в контуре и ошибка в поиске так не смешиваются.

09 · Возможности

Что ещё можно добавить к коду

Канал, поиск и модель спрятаны за узкими интерфейсами, а заявка и эскалация — инструменты агента, поэтому новый канал, новый поиск или своя CRM подключаются адаптером, не трогая ядро. Ниже — что усилит ИИ-менеджера следующим шагом, в том числе на платных сервисах.

ПоискПоиск по смыслу рядом с полнотекстовымВекторный индекс встаёт внутрь модуля базы знаний, например через расширение sqlite-vec и эмбеддинги Yandex Cloud или OpenAI. Интерфейс инструмента поиска не меняется, BM25 остаётся рядом. Вопрос, заданный клиентом своими словами, находит ответ, который в базе уже есть.
CRMЗаявка сразу в amoCRM или Битрикс24Инструмент заявки уже пишет контакт и суть в журнал. Второй записью он может создавать сделку в amoCRM или Битрикс24 по их API вместе с историей диалога. Менеджер работает в воронке, а не переносит заявки из мессенджера.
ГолосПриём звонков тем же агентомТелефония с распознаванием и синтезом речи, например Voximplant вместе с Yandex SpeechKit, подключается ещё одним адаптером канала. Агент ищет в той же базе, оформляет заявку тем же инструментом и зовёт человека по тому же правилу источника. Вечерний звонок становится заявкой в журнале.
ОплатаСчёт и оплата прямо в диалогеТочка расширения под продажи заложена в ядро. Инструмент выставления счёта через ЮKassa или платежи Telegram встаёт рядом с инструментом заявки, а цену берёт только из документа базы. Клиент оплачивает в том же чате, где задал вопрос.
ЗащитаКонтакты клиента не уходят в модельПеред отправкой модели код заменяет телефоны и почту метками, а в заявку возвращает настоящие значения. Замена встаёт в фильтр входа, который уже стоит перед ядром. Так складывается контур персональных данных до масштабирования.
ДанныеНедельный отчёт о пробелах базыЖурнал уже хранит каждое обращение с намерением, статусом заявки и эскалацией. Недельный отчёт одним запросом выводит вопросы, на которые в базе не нашлось документа, и конверсию в заявку. Владелец знает, какой документ дописать первым.
10 · Вопросы

Что обычно спрашивают

Что такое ИИ-менеджер по продажам?

ИИ-менеджер по продажам — это обработка обращений в мессенджере программой вместо дежурного оператора. Нужен малому бизнесу, который теряет обращения вечером и в выходные. Кауфман Lab собирает агента, который отвечает фактами из курируемой базы, оформляет заявку и передаёт человеку то, чего в базе нет: менеджер по работе с клиентами по рынку стоит 71 000 ₽ в месяц за одну смену. Догадок агент не строит и о цене по памяти не отвечает.

Чем это отличается от обычного RAG-бота?

Поиск вызывает модель, а не обвязка: она решает, искать ли, что искать и достаточно ли найденного. Пустой результат — легальный исход, а не ошибка. Эскалация встроена как инструмент модели, а не как кнопка в интерфейсе оператора.

Как оформляется заявка и куда она попадает?

Оформление — отдельный инструмент агента: он вызывается, когда в диалоге появились контакт и суть запроса. Заявка ложится строкой в журнал и тем же моментом уходит уведомлением оператору, без выгрузки и без ручного переноса. Диалог при этом продолжается в том же чате — клиента никуда не переключают.

Как обновляется база знаний?

Отправкой .md-файла в админ-чат. Агент определяет категорию и место, коммитит в git, пересобирает индекс и отчитывается числом документов. Версии и откат достаются от git бесплатно; отдельная команда пересобирает индекс вручную.

Что мешает подсунуть агенту вредный запрос?

На входе стоит отдельная лёгкая модель: спам, попытки инъекции и офтоп до ядра не доходят. Поверх — модерация со словарями, предупреждением, блокировкой и сигналом оператору. Десять отбитых попыток инъекции — один из порогов приёмки.

Что происходит, когда человек не отвечает?

Диалог помечен как ожидающий человека. Клиенту при этом уже сказано честно: уточню и вернусь. Это хуже мгновенного ответа и лучше уверенного ответа без источника.

Сколько стоит обращение?

Расход только на модель: поиск, индекс и хранилище стоят ноль. Точная цифра за обращение снимается с рабочей базы по счётчику токенов и появится в карточке отдельной записью. Для сравнения: менеджер по работе с клиентами по вакансиям hh.ru — 71 000 ₽ в месяц.

Кто такой нейросотрудник и что он умеет?

Нейросотрудник — это программа, которая ведёт переписку с клиентом вместо дежурного оператора: отвечает фактами из подготовленной базы, сама оформляет заявку и передаёт человеку то, чего в базе нет. Здесь это агент в Telegram, работает круглосуточно. Сам он не учится и не додумывает: базу пополняет человек отправкой файла в админ-чат, а пилот из 9 диалогов и 47 сообщений за пять дней проверял контур приёма, а не качество ответов по документам.

Заменит ли ИИ-менеджер по продажам человека?

ИИ-менеджер в этой сборке живого человека не заменяет: продажи и допродажи в первой версии сознательно отложены, а агент принимает обращение, отвечает по документам базы и оформляет заявку, когда в диалоге появились контакт и суть. Всё, чего в базе нет, уходит оператору: тот получает историю и черновик ответа, а его ответ возвращается клиенту в тот же чат. Правило источника гарантированно оставляет часть обращений человеку — это свойство конструкции, а не недоделка.

Можно ли принимать заявки с сайта?

Пока нет: агент работает только в Telegram, и клиент прямо с сайта написать ему не может — это названо в границах открытым текстом. Второй канал заложен швом с самой первой версии: веб-виджет отложен и подключается отдельным адаптером, ядро при этом не трогается. Сейчас обращение приходит в Telegram, а заявка из него строкой ложится в журнал, и оператору тем же моментом уходит уведомление.

Источники
  1. Nygard M. Documenting Architecture Decisions, 2011. cognitect.com
  2. Ousterhout J. A Philosophy of Software Design. Yaknyam Press, 2018 — deep modules.
  3. Cockburn A. Hexagonal architecture, 2005. alistair.cockburn.us
  4. Yao S., Zhao J., Yu D., Du N., Shafran I., Narasimhan K., Cao Y. ReAct: Synergizing Reasoning and Acting in Language Models. ICLR, 2023. arXiv:2210.03629
  5. El-Yaniv R., Wiener Y. On the Foundations of Noise-free Selective Classification. Journal of Machine Learning Research, 11, 2010 — воздержание от ответа как легальный исход.
  6. Shore J. Fail Fast. IEEE Software, 21(5), 2004. doi:10.1109/MS.2004.1331296
  7. Nosek B. A., Ebersole C. R., DeHaven A. C., Mellor D. T. The preregistration revolution. PNAS, 115(11), 2018. doi:10.1073/pnas.1708274114
  8. Es S., James J., Espinosa-Anke L., Schockaert S. RAGAS: Automated Evaluation of Retrieval Augmented Generation. 2023. arXiv:2309.15217 — faithfulness: утверждение выводимо из документа.
  9. Zheng L. et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. NeurIPS, 2023. arXiv:2306.05685
  10. OWASP. Top 10 for Large Language Model Applications — LLM01: Prompt Injection. owasp.org

Нужна такая же система?

Напишите в Telegram: отвечу сам, разберу вашу задачу и скажу, что из этого ей подходит.

Написать в Telegram→
Другие проекты лаборатории
↑ наверх