В этом уроке Java AIML мы научимся создавать простую программу чат-бота на Java. Чат-бот — это приложение, разработанное для имитации разговора с пользователями-людьми, особенно через Интернет. Внутри себя он использует любую систему NLP(Natural Language Processing) для интерпретации человеческого взаимодействия и ответа со значимой информацией.
В 2024 году(и далее) лучшим подходом будет использование предварительно обученной модели LLM и наполнение ее предметно-ориентированной базой знаний с помощью RAG.
Использование библиотеки AIML для создания чат-ботов на основе правил — устаревшая технология, и лучшим решением будет использование более продвинутого решения NLP, такого как OpenAI GPT, Google Dialogflow, Rasa или IBM Watson.
AIML(Artificial Intelligence Markup Language) — это диалект XML для создания программных агентов на естественном языке. Он содержит основные правила, которые использует внутри себя блок Natural Language Understanding(NLU). Его можно считать сердцем движка. Чем больше правил мы добавим в AIML, тем умнее будет наш чат-бот.
Важно знать разницу между НЛП и НЛУ.
- NLP относится ко всем системам, которые работают вместе для обработки сквозного взаимодействия между машинами и людьми на предпочитаемом языке человека. Другими словами, NLP позволяет людям и машинам общаться друг с другом «естественно».
- NLU на самом деле является подмножеством более широкого мира NLP. Он помогает в разборе неструктурированных входных данных, например, неправильного произношения, переставленных слов, сокращений, разговорных выражений и других странностей.
1. Предпосылки
- Реализация эталонного AIML – Для начала мы будем использовать уже работающее эталонное приложение. Существует одна такая реализация на основе Java, которая называется program-ab, размещенная в репозитории google-code. Загрузите последнюю версию program-ab из репозитория maven code.
- Eclipse и Maven – для кодирования и разработки.
2. Пример чат-бота Java AIML
Следуйте этим простым шагам для создания нашего первого приложения чат-бота.
2.1. Загрузите и распакуйте программу-ab Distribution
Сначала нам нужно распаковать дистрибутив program-ab в удобную папку. Из него нам нужно будет взять Ab.jar и имеющиеся правила AIML.
2.2. Создать проект Eclipse
Создайте проект eclipse maven, чтобы начать разработку. Он включает в себя довольно стандартные шаги, поэтому я предполагаю, что вы сможете сделать это самостоятельно.
2.3 Импорт библиотеки AIML
После того, как мы создали проект maven для начала разработки, давайте выберем упаковку jar и координаты maven по вашему выбору и импортируем в eclipse.
Теперь создайте в базовой папке папку lib и скопируйте в нее Ab.jar из дистрибутива program-ab.
2.4. Добавить AIML в Classpath
Чтобы добавить AIML в classpath, добавьте Ab.jar в сборку развертывания в eclipse. В качестве альтернативы вы можете установить этот jar в свой локальный репозиторий maven и затем использовать его.
Для локальной установки поместите jar в любую папку и укажите это местоположение в теге systemPath. Теперь добавьте ниже зависимость AIML maven в pom.xml. Теперь соберите проект maven командой mvn clean install.
<dependencies><dependency><artifactId>com.google</artifactId><groupId>Ab</groupId><version>0.0.4.3</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/Ab.jar</systemPath></dependency></dependencies>
2.5 Копировать правила AIML по умолчанию
Скопируйте папку bots из каталога program-ab в папку resources вашего проекта maven. Эта папка содержит наборы AIML по умолчанию, которые мы будем использовать изначально. Позже мы увидим, как можно добавить наши собственные правила в нашего чат-бота.

2.6. Создание программы чат-бота Hello World
Теперь создайте простую программу Java, например Chatbot.java. Ее метод main() будет вызывать программу чата, которая будет запущена в командной строке.
Базовая структура этой программы будет заключаться в создании бесконечного цикла, в каждом цикле мы будем принимать пользовательский ввод из командной строки, а затем запрашивать у API program-ab ответ на ввод, предоставленный пользователем.
Более подробная информация о взаимодействии API программы и ab приведена в вики- ссылке.
package com.howtodoinjava.demo.chatbot;import java.io.File;import org.alicebot.ab.Bot;import org.alicebot.ab.Chat;import org.alicebot.ab.History;import org.alicebot.ab.MagicBooleans;import org.alicebot.ab.MagicStrings;import org.alicebot.ab.utils.IOUtils;public class Chatbot {private static final boolean TRACE_MODE = false;static String botName = "super";public static void main(String[] args) {try {String resourcesPath = getResourcesPath();System.out.println(resourcesPath);MagicBooleans.trace_mode = TRACE_MODE;Bot bot = new Bot("super", resourcesPath);Chat chatSession = new Chat(bot);bot.brain.nodeStats();String textLine = "";while(true) {System.out.print("Human : ");textLine = IOUtils.readInputTextLine();if((textLine == null) ||(textLine.length() < 1))textLine = MagicStrings.null_input;if(textLine.equals("q")) {System.exit(0);} else if(textLine.equals("wq")) {bot.writeQuit();System.exit(0);} else {String request = textLine;if(MagicBooleans.trace_mode)System.out.println("STATE=" + request + ":THAT=" +((History) chatSession.thatHistory.get(0)).get(0)+ ":TOPIC=" + chatSession.predicates.get("topic"));String response = chatSession.multisentenceRespond(request);while(response.contains("<"))response = response.replace("<", "<");while(response.contains(">"))response = response.replace(">", ">");System.out.println("Robot : " + response);}}} catch(Exception e) {e.printStackTrace();}}private static String getResourcesPath() {File currDir = new File(".");String path = currDir.getAbsolutePath();path = path.substring(0, path.length() - 2);System.out.println(path);String resourcesPath = path + File.separator + "src" + File.separator + "main" + File.separator + "resources";return resourcesPath;}}
2.7 Тестирование взаимодействия с чат-ботом
Теперь наша программа готова и мы можем начать разговор с чатом. Для этого просто запустите программу как java-приложение. Для выхода наберите q или wq.
Human : HiRobot : Hi! It's delightful to see you.Human : How are youRobot : Feeling really joyful today.Human : My name is sajalRobot : Glad to see you, SajalHuman : what is my nameRobot : SajalHuman : tell me my nameRobot : Sajal
Таким образом, вы можете вести базовый разговор с чат-ботом.
3. Добавьте пользовательские шаблоны в чат-бот
3.1 Добавление пользовательских шаблонов
Теперь мы можем добавить наши пользовательские шаблоны в бота, чтобы добавить больше интеллекта к взаимодействиям. Для этого создайте новый файл .aiml в каталоге aiml вашего бота(src\main\resources\bots\super\aiml).
Добавьте столько категорий в этот файл, сколько захотите. Здесь категория относится к вопросам человека, а шаблон относится к ответу чат-бота. Я создал файл под названием a-custom-entry.aiml и добавил три вопроса, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?><aiml><category><pattern>WHAT IS JAVA</pattern><template>Java is a programming language.</template></category><category><pattern>WHAT IS CHAT BOT</pattern><template>Chatbot is a computer program designed to simulate conversation with human users, especially over the Internet.</template></category><category><pattern>WHAT IS INDIA</pattern><template>wonderful country.</template></category></aiml>
Теперь мы можем задать оба эти вопроса.
Как только наш пользовательский файл aiml будет готов, нам нужно сгенерировать соответствующие записи для других папок параллельно aiml. Чтобы сделать это, нам нужно вызвать bot.writeAIMLFiles().
Я создал еще одну программу java под названием AddAiml.java для этой цели. После того, как вы закончите с редактированием aiml, просто запустите эту программу один раз перед запуском бота. Она добавит эти пользовательские записи в мозг бота.
package com.howtodoinjava.demo.chatbot;import java.io.File;import org.alicebot.ab.Bot;import org.alicebot.ab.MagicBooleans;public class AddAiml {private static final boolean TRACE_MODE = false;static String botName = "super";public static void main(String[] args) {try {String resourcesPath = getResourcesPath();System.out.println(resourcesPath);MagicBooleans.trace_mode = TRACE_MODE;Bot bot = new Bot("super", resourcesPath);bot.writeAIMLFiles();} catch(Exception e) {e.printStackTrace();}}private static String getResourcesPath() {File currDir = new File(".");String path = currDir.getAbsolutePath();path = path.substring(0, path.length() - 2);System.out.println(path);String resourcesPath = path + File.separator + "src"+ File.separator + "main" + File.separator + "resources";return resourcesPath;}}
3.2 Тестирование пользовательских шаблонов
После запуска AddAiml, как только вы добавили новые записи в AIML, снова запустите программу чат-бота и задайте новые вопросы. Она должна дать правильный ответ.
В моем случае вот что получилось.
Человек: Что такое Java?Робот: Java — это язык программирования.Человек: что такое чат-ботРобот: Чат-бот — это компьютерная программа, предназначенная для имитацииобщение с пользователями-людьми, особенно через Интернет.Человек: что такое ИндияРобот: чудесная страна.
4. Заключение
В этом руководстве AIML Java мы научились создавать простую программу чат-бота на основе командной строки с помощью справочного приложения program-ab. В следующий раз, когда у вас возникнет такая потребность, вы можете подумать о чат-боте на основе AIML. Он способен легко делать умеренные вещи.
Чтобы расширить свои знания, вы можете попробовать –
- Поиграйте с AIML и создайте более интересные разговоры. AIML имеет много тегов, которые вы можете использовать, он также дает некоторые возможности для настройки Sraix для вызова внешних веб-сервисов на основе REST.
- Добавьте свой собственный пользовательский заполнитель в раздел шаблона и проанализируйте его из ответа AIML, а затем выполните дополнительные действия на основе вашего идентификатора в ответе, например: «Вы можете вызвать свой собственный веб-сервис, чтобы получить дополнительную информацию».
- Преобразуйте эту программу чата командной строки в веб-чат. В настоящее время я работаю над этим и опубликую следующую публикацию на эту тему.
- Вы можете добавить свой собственный механизм правил поверх ответа AIML, чтобы сделать больше.
AIML может делать многое, но в настоящее время доступны гораздо более сложные методы, особенно в области машинного обучения. Постарайтесь изучить и их.