首页 > 解决方案 > 有人有使用 PyKE 进行规则继承的示例吗?

问题描述

我试图弄清楚 PyKE 的继承是如何工作的。我找到的关于它是如何工作的唯一信息在这里

扩展子句 可选的扩展子句(如果使用)是文件的第一行。这定义了此规则库继承自的父规则库。它还可以指定从该继承中排除的反向链接目标名称列表。

奇怪的是似乎没有例子,所以我想我错过了一些明显的东西。所以现在我遇到了这个问题:我有一个父规则库bc_rules_fields_abstract_base.krb和一个从该bc_rules_fields_problem_report.krb继承的规则库。所有规则都在父规则库中,另外 1 条规则在bc_rules_fields_problem_report.krb中。

无论我做什么,派克总是声称

File "C:...\Python38\lib\site-packages\pyke\knowledge_engine.py", line 244, in get_kb
else: raise KeyError("knowledge_base %s not found" % kb_name)
KeyError: 'knowledge_base bc_rules_fields_problem_report not found'

虽然它似乎检测到它进行编译:

writing [compiled_krb]/compiler_bc.py
writing [compiled_krb]/allowed_states.fbc
writing [compiled_krb]/bc_rules_fields_abstract_base_bc.py
writing [compiled_krb]/bc_rules_fields_problem_report_bc.py
writing [compiled_krb]/compiled_pyke_files.py

bc_rules_fields_problem_report.krb的第一行如文档中所述:

extending bc_rules_fields_abstract_base

如果我写一些像“扩展 non_existent_rule_base_jib​​berish_bla_bla”这样的乱码,我会收到以下错误(这表明至少语法似乎是正确的):

KeyError: 'rule_base bc_rules_fields_problem_report: parent non_existent_rule_base_jibberish_bla_bla not found'

为了开始我写的评估:

# Compile and load .krb files in same directory that I'm in (recursively).
self.engine = knowledge_engine.engine(__file__)
self.engine.activate('bc_rules_fields_problem_report')

# Routine to populate the factbase
self._add_facts_actual_state_fields()

goal_string = 'bc_rules_fields_problem_report.ticketcheck_field_ok($field, $comment)'
with self.engine.prove_goal(goal_string, args={}) as gen: # <- This is where the error occurs.
    for vars, plan in gen:
        raw_check_results[vars['field']] = vars['comment']

基本上,我希望始终应用 bc_rules_fields_abstract_base .krb 中的规则以及一些特定规则,例如 bc_rules_fields_problem_report .krb 中的规则。有没有人有关于如何做到这一点的线索或至少一个例子?

标签: python-3.xexpert-systempyke

解决方案


推荐阅读