“问题库”是为程序客户准备的。这些“问题”可以类型不同,如 “是/否?”、“选择第几个?”等等。问题可能带有变量参数,在向客户询问时,以参数值替代问题中的文字内容。不同的参数值构成不同的问题。
对问题的回答,全部自动记录下来。如果有几个规则询问同样的问题,客户只需回答一次。推理引擎重启时,这些回答全部清除。
“问题”可以附带些评审意见等信息。这是事先预备的,并有变量参数配合。根据客户的回答,自动显示这些附带信息。
这些问题,在 .kqb 文件中定义。问题库的名称,是扩展名为 .kqb 的文件名称。问题库名称必须是合法的 Python 标识符。
在你创建 knowledge_engine.engine 对象时,.kqb 文件自动编译并装入内存。
.kqb 文件中的信息,全部是需要向客户询问的问题,以及对回答的检验,和要显示的评审信息。
.kqb 文件指定哪个参数包含问题的答案。在提出询问之前,除了答案,其他参数必须约束成具体值。
你写了个汽车故障诊断程序,可以用到名叫 user_question 的问题库,其中的问题像是这样:
engine_starts($ans) Can you start the engine? --- $ans = yn mileage($ans) How many miles are on the car? --- $ans = integer(1-999999) 200000- ! Wow, that's a lot of miles! noise_from($location, $ans) Do you hear a noise from $location? --- $ans = yn
这些问题,貌似下列规则中的事实:
user_question.engine_starts(True) user_question.mileage($mileage) user_question.noise_from('under the hood', False)
Pyke 有两个模块,负责向你程序的用户提问:
你可以自己写个模块,向客户询问。参看 Pyke 用户指南中的示例。
Pyke 回答问题时,要查找 ask_module (“答复模块”)属性:
下面是设置 ask_module 属性的示例:
>>> from pyke import knowledge_engine >>> from pyke import ask_wx >>> engine = knowledge_engine.engine(__file__) >>> engine.ask_module = ask_wx