我正在使用Java和程序ab创建一个聊天机器人。在一些地方我无法直接回答问题,我必须处理某些事情或调用Web服务并处理结果然后回复。在这种情况下,如何将我的java函数的结果包含在aiml中的响应中。
说,
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;
}
请有人帮助我。提前谢谢。
答案 0 :(得分:2)
通常,AIML扩展程序实现为扩展标记。因此,您无法直接从AIML脚本调用编程语言方法/函数。在AB文档中,您可以找到有关实现此类功能的更多详细信息here。以下是相关文字,其中包含在GitHub上的forked project中找到的PCAIMLProcessorExtension
的更新链接。可以找到一些关于工作扩展的实际例子。
<强> AIMLProcessorExtension 强>
程序AB定义了一个名为AIMLProcessorExtension的Java接口 您可以使用它来定义新的AIML标签。
实现AIMLProcessorExtension的类必须提供:
- 一组标签名称。
- 用于递归评估与新标记关联的每个节点的XML分析树的函数。
程序AB源 包括一个名为的接口的示例实现 PCAIMLProcessorExtension,定义了一组标签 模拟联系人数据库。
答案 1 :(得分: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;
}