是否可以从 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中使用,例如
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;
}
我正在使用 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中使用,例如
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;
}