Можно ли вызвать Java-функции из aiml?

Я создаю чат-бота с использованием Java и программы ab. В некоторых местах я не могу ответить на вопросы напрямую, я должен что-то обработать или вызвать веб-сервис и обработать результат, а затем ответить обратно. В таких случаях, как включить результат моей функции Java в ответы в цель.

Сказать,

User: What is the price of the product A?
Bot: The price of product A is $50 

В приведенном выше примере 50 долларов не всегда будут одинаковыми. Я должен принять это во время выполнения. Так как решить эту проблему?

**AIML:**

<category>
    <pattern>WHAT IS THE PRICE OF THE *</pattern>
    <template>The price of <star/> is $<call some function price(productA)> 
    </template>
</category>

**JAVA:**

public int price(String product){
   // gets the product price
   // do the conversion 
   // apply discount
   return price;
}

Пожалуйста, кто-нибудь, помогите мне. Заранее спасибо.

2 ответа

Решение

Обычно расширения AIML реализуются как тег расширения. Таким образом, вы не будете вызывать метод / функцию языка программирования напрямую из сценария AIML. В документации AB вы можете найти более подробную информацию о реализации такого рода функций здесь. Ниже приведен соответствующий текст с обновленной ссылкой на PCAIMLProcessorExtension найден в разветвленном проекте на GitHub. Там можно найти пару практических примеров рабочих расширений.

AIMLProcessorExtension

Программа AB определяет Java-интерфейс под названием AIMLProcessorExtension, который можно использовать для определения новых тегов AIML.

Класс, реализующий AIMLProcessorExtension, должен обеспечивать:

  • Набор имен тегов.
  • функция для рекурсивной оценки дерева разбора XML для каждого узла, связанного с новым тегом.

Источник Program AB включает пример реализации этого интерфейса, который называется PCAIMLProcessorExtension, который определяет коллекцию тегов, имитирующих базу данных контактов.

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

Шаблон AIML будет иметь ключевое слово для работы,

<category>
   <pattern>WHAT IS THE PRICE OF THE *</pattern>
   <template>PRICE,The price of <star/> is,<star/> </template>

И обновите код Java, например:

String response  = aimlResponse(request);
String [] responseComponents = reponse.parse(",");
String method = responseComponents[0];

//Then use switch, also apply size check on array after parsing in case of response with No keywords

Switch method:
{
case PRICE:
//here add the price to response string
String price = price(responseComponents[2]);
response = responseComponents[1]+ price;
break;
}
Другие вопросы по тегам