Это старая версия документа!
Содержание
JS chatbot eva.v2
Введение
Чат-бот Eva v2, — это пример самообучающейся системы на связке JavaScript + PHP, которая хранит свои знания в обычном текстовом файле base.json.
Особенностью версии v2 является поддержка древовидной структуры диалогов, позволяющая боту удерживать контекст беседы и создавать вложенные ветки ответов через массив sub.
Благодаря интеграции Web Speech API, система способна не только анализировать текстовые команды, но и воспринимать живую речь, превращаясь в полноценного голосового ассистента.
В отличие от жестко запрограммированных скриптов, Ева динамически расширяет свой кругозор: если ответ на вопрос отсутствует, она переходит в режим активного обучения, запоминая реакцию пользователя и мгновенно применяя её в будущих диалогах.
Вся архитектура построена на принципе максимальной автономности, где PHP-сервер выступает лишь в роли надежного хранилища, гарантируя сохранность накопленного опыта между сессиями.
Основные характеристики «Евы»:
Архитектура системы
- Front-end (JS): Работает в браузере. Отвечает за распознавание речи, логику поиска ответа в ОЗУ и озвучку.
- Back-end (PHP): Нужен только для того, чтобы сохранять изменения из памяти браузера обратно в файл на сервере (через save.php).
- База данных (base.json): Простой JSON-массив, где хранятся объекты с вопросами, ответами и ветками диалогов.
Как она «думает» (Логика поиска)
Ева не просто ищет точное совпадение строки. В коде используется функция normalize(), которая убирает лишние символы и приводит текст к одному регистру.
* Она ищет ваш вопрос в массиве questions. * Если находит — выбирает случайный вариант из массива answers (чтобы общение не было однообразным).
Режим обучения (Self-Learning)
Это главная «фишка» кода. Если Ева не находит ответ в базе:
- Она переходит в состояние isLearning = true (режим обучения).
- Спрашивает пользователя: «Как мне ответить на это?».
- Следующую фраза пользователя она не обрабатывает как вопрос, а записывает как ответ для предыдущей фразы.
- Новая пара «вопрос-ответ» добавляется в общую базу в памяти.
Контекст и вложенность (sub)
Вчерашний пример кода показал, что Ева умеет работать с контекстом. У каждой записи есть массив sub. Это позволяет создавать древовидные диалоги:
- Вы: «Давай поиграем».
- Ева: «Окей, во что?». (Здесь Ева запоминает контекст)
- Вы: «В города».
- Ева поймет, что «В города» — это ответ на её вопрос про игру, а не просто случайная фраза.
Слабые места (Исправлено 07.05.2026)
- Кэширование: Браузер часто «подсовывал» Еве старую базу из памяти, поэтому мы добавили ?v=Date.now() к запросу.
- Потеря данных: При сохранении файл мог затереться, если в коде была ошибка или база была пуста. Мы добавили проверку if (responses.length === 0).
- Синтаксис JSON: Ручное редактирование часто ломало базу из-за лишних запятых, что приводило к ошибке JSON CORRUPT.
Планы
- Дописать интеграцию нейросетей.
- Обработку данных в оперативной памяти браузера.
