Как часть Байесовской работы, я подверг рефакторингу большую часть Kie, чтобы иметь чистые точки расширения. Я хотел убедиться, что все рабочие части для байесовской системы могут быть выполнены без добавления какого-либо кода в существующее ядро.
Так что теперь у каждого типа знаний может быть свой пакет, ассемблер, ткач и среда выполнения. Знания больше не добавляются непосредственно в KiePackage, а вместо этого в инкапсулированный пакет знаний для этого домена, который затем добавляется в KiePackage. Этап ассемблера используется при разборе и сборке определений знаний. Стадия переплетения — это когда эти определения знаний объединяются в существующую KieBase. Наконец, среда выполнения инкапсулирует и предоставляет среду выполнения для знаний.
drools-верования содержат байесовскую интеграцию и хорошую отправную точку, чтобы увидеть, как это работает: https://github.com/droolsjbpm/drools/tree/beliefs/drools-beliefs/
Для этого вам понадобится файл META-INF / kie.conf, который будет обнаружен и доступен: https://github.com/droolsjbpm/drools/blob/beliefs/drools-beliefs/src/main/resources/ META-INF / kie.conf
Файл использует синтаксис MVEL и указывает одну или несколько служб:
1
2
3
4
5
|
[ 'assemblers' : [ new org.drools.beliefs.bayes.assembler.BayesAssemblerService() ], 'weavers' : [ new org.drools.beliefs.bayes.weaver.BayesWeaverService() ], 'runtimes' : [ new org.drools.beliefs.bayes.runtime.BayesRuntimeService() ] ] |
Github ссылается на реализацию пакетов и сервисов:
Байес Пакет
Ассемблер Сервис
Ткач Сервис
Сервис Runtime
Вот быстрый модульный тест, показывающий, как все работает от начала до конца, обратите внимание на то, как можно посмотреть и получить доступ к среде выполнения. Он использует старый API в тесте, но также будет хорошо работать с декларативным материалом kmodule.xml. Единственный бит, который все еще жестко запрограммирован, это ResourceType.Bayes. As ResourceTypes — это перечисление. Мы, вероятно, изменим этот класс на стандартный, чтобы он не был жестко запрограммирован.
Код для поиска времени выполнения:
1
2
|
StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kbase.newStatefulKnowledgeSession(); BayesRuntime bayesRuntime = ksession.getKieRuntime(BayesRuntime. class ); |
Модульный тест:
01
02
03
04
05
06
07
08
09
10
11
|
KnowledgeBuilder kbuilder = new KnowledgeBuilderImpl(); kbuilder.add( ResourceFactory.newClassPathResource( "Garden.xmlbif" , AssemblerTest. class ), ResourceType.BAYES ); KnowledgeBase kbase = getKnowledgeBase(); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kbase.newStatefulKnowledgeSession(); BayesRuntime bayesRuntime = ksession.getKieRuntime(BayesRuntime. class ); BayesInstance instance = bayesRuntime.getInstance( Garden. class ); assertNotNull( instance ); |
jBPM уже переработан из ядра и компилятора, хотя для этого он использует свои собственные интерфейсы. Мы планируем перенести существующий путь jBPM на это, и фактически все вещи Drools будут в конечном итоге выполнены таким же образом. Это создаст чистое ядро KIE и компилятор с правилами, процессами, байесами или любыми другими типами знаний пользователей, которые будут добавлены как плагины.
Сотрудник сообщества также уже работает над новой системой объявления типов, которая будет использовать эти расширения. Вот пример того, как будет выглядеть эта новая система типов: https://github.com/sotty/metaprocessor/blob/master/deklare/src/test/resources/test1.ktd
Ссылка: | Дополнительные знания с помощью пользовательских сборщиков, ткачей и сред выполнения от нашего партнера JCG Джеффри Де Смета в блоге Drools & jBPM . |