Лаборатория архитектуры 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 · Границы

Что сознательно не вошло

ОтложеноВеб-виджетДобавляется новым адаптером канала. Ядро при этом не трогается — шов заложен с первой версии.
ОтложеноПродажи и допродажиТочка расширения заложена, включается с появлением платных продуктов, а не когда захочется добавить функций.
ОтложеноВекторный поискДобавляется внутрь модуля базы, если полнотекстовый начнёт промахиваться. Интерфейс инструмента не меняется.
ОтложеноКонтур персональных данныхВернуться до масштабирования. Сейчас компенсируется выбором провайдеров без обучения на переданных данных.
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
Другие проекты лаборатории
наверх