Когда пациент пишет в медицинский центр, его редко интересует просто общий ответ.
Обычно вопрос конкретный:
«Сколько стоит приём невролога?»
«Кто принимает в Шымкенте?»
«Есть ли врач сегодня?»
«Можно ли записаться вечером?»
«Как подготовиться к обследованию?»
Поэтому для медицинского центра мы разрабатывали не просто чат-бота, который умеет отвечать текстом.
Нам нужен был помощник, который понимает вопрос пациента, использует внутренние данные клиники, находит подходящего врача, получает актуальное расписание и продолжает диалог с учётом уже полученной информации.
Рабочий канал мы подключили через ChatApp, а первые тесты проводили на реальном WhatsApp с использованием библиотеки whatsapp-web.js.
Это позволило проверить не только техническую часть, но и то, как бот ведёт себя в настоящей переписке.
Основная проблема обычных AI-ботов
Подключить языковую модель к WhatsApp технически не так сложно.
Сложнее сделать так, чтобы она не начинала придумывать информацию.
Для медицинского центра это особенно важно.
Если бот ошибётся в расписании врача, покажет неправильную стоимость или назовёт специалиста, который уже не принимает в этом филиале, доверие к такому сервису быстро пропадёт.
Поэтому мы сразу разделили две задачи.
Первая — AI должен понимать человека и нормально вести диалог.
Вторая — факты должны приходить из систем медицинского центра, а не из памяти языковой модели.
На этом принципе построена вся архитектура бота.
Сначала описали правила поведения
До подключения врачей и расписания мы подготовили большую систему правил для чат-бота.
Она определяет, как бот должен разговаривать с пациентом, что он может делать самостоятельно и где должен остановиться.
Например, есть большая разница между вопросами:
«Как подготовиться к УЗИ?»
и
«У меня болит живот, какой у меня диагноз?»
В первом случае бот может найти инструкцию клиники и дать её пациенту.
Во втором он не должен ставить диагноз.
Он может уточнить симптомы в допустимых пределах, объяснить, что необходима консультация специалиста, и помочь найти подходящего врача.
То есть бот не заменяет врача.
Он помогает пациенту быстрее получить нужную информацию и перейти к следующему действию.
Что мы заложили в правила
В правилах описали:
стиль общения;
структуру ответов;
работу с неполными вопросами;
уточняющие вопросы;
правила рекомендации врачей;
работу с филиалами;
работу с ценами;
возрастные ограничения;
работу с расписанием;
использование базы знаний;
обработку медицинских вопросов;
случаи, когда бот не должен делать вывод самостоятельно;
передачу диалога оператору.
Благодаря этому модель работает не просто как универсальный ChatGPT, а как помощник конкретного медицинского центра.
Для постоянной информации использовали RAG
У клиники уже есть большое количество внутренней информации:
описание услуг;
подготовка к обследованиям;
правила;
памятки;
ответы на частые вопросы;
информация о направлениях;
внутренние инструкции.
Хранить всё это непосредственно внутри промпта неудобно.
Промпт становится огромным, данные сложно обновлять, а информация начинает смешиваться.
Поэтому для документов мы использовали RAG — Retrieval-Augmented Generation.
Если говорить проще, перед ответом бот сначала ищет нужную информацию в документах клиники.
Только после этого языковая модель формирует ответ пациенту.
Получается такая схема:
вопрос пациента → поиск в документах → нужная информация → формирование ответа
Например, пациент спрашивает:
«Как подготовиться к обследованию?»
Бот сначала ищет инструкцию медицинского центра, а затем объясняет её пациенту обычным человеческим языком.
Это намного надёжнее, чем позволять AI отвечать только на основе общих знаний.
Но врачей нельзя хранить в обычных документах
С врачами задача сложнее.
Документ с врачами очень быстро устаревает.
Сегодня специалист принимает в одном филиале, через месяц может перейти в другой.
Меняется график.
Появляются новые врачи.
Кто-то уходит в отпуск.
Меняется возраст пациентов, которых принимает специалист.
Поэтому мы не стали просто загружать список врачей в RAG.
Данные о врачах бот получает на лету из базы знаний.
Когда пациент спрашивает о специалисте, система обращается к источнику данных и получает актуальную информацию.
Например:
ФИО врача;
специальность;
филиал;
возраст пациентов;
стоимость;
особенности приёма;
дополнительную информацию.
После этого AI уже формирует ответ.
Главное отличие в том, что языковая модель не должна помнить врачей.
Она должна уметь их правильно найти.
Расписание тоже подгружается в момент запроса
Ещё одна важная часть — расписание.
Недостаточно ответить пациенту:
«Да, у нас есть невролог».
Следующий вопрос почти всегда будет:
«Когда он принимает?»
Поэтому расписание мы также не храним в тексте бота.
Система получает его тогда, когда оно действительно нужно.
Это позволяет отвечать на более конкретные вопросы:
кто принимает сегодня;
кто работает завтра;
какие врачи есть в нужном филиале;
кто принимает утром;
кто работает после определённого времени;
какой ближайший рабочий день врача.
В результате AI отвечает естественным языком, но само расписание получает из актуальных данных.
Как выглядит реальный диалог
Во время тестирования мы использовали обычный WhatsApp.
Пациент написал:
«Здравствуйте. Стоимость приёма врача невропатолога»
Бот определил, что речь идёт о неврологе, получил данные и назвал стоимость.
После этого он уточнил город.
Пациент ответил:
«Шымкент»
Бот уже использовал эту информацию в следующем запросе.
Он нашёл подходящий филиал, стоимость приёма, конкретного специалиста, ближайший рабочий день и время работы врача.
После этого бот уточнил возраст пациента, потому что у выбранного специалиста было возрастное ограничение.

На скриншоте хорошо видно главное преимущество такой архитектуры.
Это не заранее написанный сценарий:
вопрос → стандартный ответ
Контекст постепенно собирается во время разговора:
невролог → Шымкент → нужный филиал → врач → расписание → возраст пациента
И каждый следующий ответ учитывает предыдущие сообщения.
Зачем боту уточнять возраст
На первый взгляд вопрос:
«Подскажите возраст пациента?»
может показаться обычным продолжением диалога.
Но именно такие детали показывают разницу между простым чат-ботом и системой, которая действительно работает с данными.
В карточке врача указано, с какого возраста он ведёт приём.
Поэтому бот не должен рекомендовать специалиста всем подряд.
Он сначала получает ограничения врача, а затем уточняет информацию у пациента.
После ответа бот уже может продолжить поиск и предложить подходящего специалиста.
Такой подход можно использовать не только для возраста.
В дальнейшем логика может учитывать:
город;
филиал;
специальность;
пол врача;
возраст пациента;
детский или взрослый приём;
время;
дату;
стоимость;
конкретную услугу;
другие параметры.
AI не хранит факты — он работает с ними
Для этого проекта для нас был важен один принцип:
не нужно учить AI расписанию, ценам и врачам. Нужно научить его получать эти данные в момент разговора.
Это значительно надёжнее.
Например, если завтра у врача изменится расписание, не нужно переписывать промпт или загружать новый документ.
Бот просто получит новые данные при следующем запросе.
То же самое касается стоимости, филиалов и списка специалистов.
Почему разделили RAG и динамические данные
В итоге получилось два типа информации.
Документы
Через RAG удобно получать относительно стабильную информацию:
правила;
инструкции;
подготовку;
описание процедур;
ответы на частые вопросы;
информацию о клинике.
Актуальные данные
Во время диалога отдельно загружаются:
врачи;
филиалы;
расписание;
цены;
возрастные ограничения;
другие изменяемые параметры.
Так система понимает, где можно использовать документы, а где нужно обязательно обратиться к актуальному источнику.
Это снижает риск того, что бот покажет пациенту устаревшие данные.
Тестирование через whatsapp-web.js
Перед подключением рабочего канала через ChatApp мы тестировали бота с помощью whatsapp-web.js.
Нам было важно посмотреть, как система ведёт себя не в тестовой форме разработчика, а в обычной переписке WhatsApp.
Во время тестов проверяли:
короткие запросы;
длинные сообщения;
опечатки;
разные названия одной специальности;
несколько вопросов подряд;
смену города;
уточнение филиала;
поиск врача;
получение расписания;
продолжение диалога после нескольких сообщений.
Например, пациент может написать не «невролог», а «невропатолог».
Бот должен понять, что речь идёт об одной специальности, и продолжить поиск.
Именно реальные переписки позволяют быстро увидеть такие нюансы.
Рабочий WhatsApp подключили через ChatApp
После тестирования рабочий канал связали с системой через ChatApp.
В результате архитектура выглядит примерно так:
Пациент → WhatsApp → ChatApp → AI-бот → база знаний / RAG / врачи / расписание → ответ пациенту
При этом логика самого бота не находится внутри WhatsApp.
WhatsApp — только один из каналов общения.
Это даёт возможность в дальнейшем подключать к той же логике другие каналы, не разрабатывая всю систему заново.
Что происходит внутри после сообщения пациента
Представим, что человек пишет:
«Мне нужен невролог в Шымкенте»
Бот сначала определяет намерение пользователя.
Он понимает:
нужна специальность «невролог»;
город — Шымкент.
После этого обращается к базе и получает подходящих специалистов.
Если пациент спрашивает время, система дополнительно получает расписание.
Если у врача есть возрастное ограничение, бот проверяет его.
После этого языковая модель получает уже подготовленные данные и формирует нормальный ответ.
То есть модель используется там, где она действительно сильна:
понимание языка и формирование диалога.
А поиск фактов выполняют другие части системы.
Почему не сделали обычного сценарного бота
Можно было создать классическое меню:
1. Записаться к врачу
2. Узнать цены
3. Адреса филиалов
4. Расписание
Но реальные пациенты редко разговаривают с клиникой как с меню.
Они пишут:
«Есть сегодня детский невролог после пяти?»
или:
«Нужен врач по спине, Шымкент»
или:
«Сколько стоит невропатолог и где принимает?»
Сценарному боту приходится создавать отдельную ветку практически под каждую ситуацию.
AI позволяет сначала понять смысл сообщения, а уже потом вызвать нужные функции и данные.
В этом и заключается основная ценность языковой модели в таком проекте.
Когда нужен живой оператор
При этом мы не ставили задачу полностью заменить сотрудников клиники.
Есть ситуации, когда диалог должен перейти человеку.
Например:
бот не нашёл нужную информацию;
данные противоречат друг другу;
пациент сам просит оператора;
ситуация выходит за рамки сценария;
вопрос требует решения медицинского специалиста;
модель не уверена, что правильно поняла запрос.
Лучше вовремя передать разговор сотруднику, чем пытаться автоматически ответить на любой вопрос.
Что можно автоматизировать дальше
Текущая архитектура позволяет постепенно расширять возможности бота.
Следующие шаги могут включать:
полноценную запись на приём;
выбор свободного временного слота;
перенос записи;
отмену записи;
напоминание о приёме;
отправку подготовки к обследованию;
поиск ближайшего филиала;
автоматическую передачу заявки в CRM;
получение истории обращения;
подключение других мессенджеров.
При этом основную систему правил и работу с базой знаний не нужно строить заново.
Что получили в результате
Для медицинского центра мы построили AI-чат-бота, который работает в WhatsApp через ChatApp и использует несколько источников информации.
Документы клиники подключены через RAG.
Данные о врачах получаются из базы знаний в момент запроса.
Расписание и другие изменяемые данные также подтягиваются на лету.
Большая система правил определяет, как бот должен использовать эту информацию и как вести разговор с пациентом.
В результате пациент получает не просто автоматический ответ.
Он может спросить стоимость, уточнить город, получить конкретного врача, узнать ближайший рабочий день и продолжить разговор без повторного объяснения своей ситуации.
А главное — AI формирует ответ, но не придумывает факты.
Фактические данные приходят из систем медицинского центра.
Именно поэтому такой чат-бот можно использовать не как демонстрацию искусственного интеллекта, а как полноценный рабочий инструмент для автоматизации общения с пациентами.

