是否可以从 aiml 调用 Java 函数?

is it possible to call Java functions from aiml?

我正在使用 Java 和程序 ab 创建一个聊天机器人。在少数地方我不能直接回答问题,我必须处理一些东西或调用网络服务并处理结果然后回复。在这种情况下,如何将我的 java 函数的结果包含到 aiml 中的响应中。

说,

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

在上面的例子中,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;
}

请有人帮助我。提前致谢。

AIML 扩展通常作为扩展标签实现。因此,您不会直接从 AIML 脚本调用编程语言 method/function。在 AB 文档中,您可以找到有关在 GitHub 上实现此类功能的更多详细信息 here. Below is the relevant text with an updated link to PCAIMLProcessorExtension found in a forked project。可以找到一些关于工作扩展的实际示例。

AIMLProcessorExtension

Program AB defines a Java Interface called AIMLProcessorExtension that you can use to define new AIML tags.

A class implementing AIMLProcessorExtension must provide:

  • a Set of tag names.
  • a function to recursively evaluate the XML parse tree for each node associated with a new tag.

The Program AB source includes a sample implementation of this interface called PCAIMLProcessorExtension, which defines a collection of tags simulating a contacts database.

有一个简单通用的选项,你可以保留一个关键字,以后在switch中使用,例如

A​​IML模板会有一个关键字用于操作,

<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;
}