2017-04-14 63 views
1

我正在使用Java和程序ab创建chatbot。在很少的地方我不能直接回答问题,我必须处理一些事情或者调用Web服务并处理结果,然后回复。在这种情况下,如何将我的java函数的结果包含在目标中的响应中。是否有可能从aiml调用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文档中,您可以找到有关实现这种功能here的更多详细信息。以下是相关文本,其中链接至PCAIMLProcessorExtension的更新链接位于GitHub的forked project中。有几个关于工作扩展的实例可以找到。

AIMLProcessorExtension

计划AB定义的Java接口称为AIMLProcessorExtension是 你可以用它来定义新的AIML标签。

类实现AIMLProcessorExtension必须提供:

  • 一组标记名称。
  • 递归评估与新标签关联的每个节点的XML解析树的函数。

方案AB源 包括这个接口称为 PCAIMLProcessorExtension,它定义的标签 模拟联系人数据库的集合的样本实现。

+0

谢谢!但是有没有关于如何使用AIMLProcessorExtension的教程或参考资料或任何文档?我找不到任何有用的东西。 – Kavipriya

+0

通过指向您寻求的示例扩展的链接更新了答案。 –

+0

谢谢!你也可以看看这个问题吗? http://stackoverflow.com/questions/43463390/aimlprocessorextension-tag-not-working-in-aiml – Kavipriya

2

有一个简单而通用的选项,您可以保留一个关键字以后用于切换,例如,

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

如果在被调用的函数所依赖的响应中有两个或多个组件,该怎么办?例如:房间X门是否打开?这里的房间很有意义,因为与房间相关的功能必须被调用,但是X也是有意义的,因为它要检查哪个房间也很重要。 –

+0

只需追加由逗号分隔的所有必需元素,并在程序中解析它们即可。就像在上面的例子中,我们知道对于这个响应,responseComponents [0]是方法,你可以在[1]中存储自定义元素,在这种情况下是房间号码。 –

+0

嗨。有谁解决了这个问题? – Jugi

相关问题