Об its_QuestionGen

its_QuestionGen - компонент системы, служащий для построения структуры наводящих вопросов на основе деревьев решений, а также для реализации текстового взаимодействия с пользователем на основе этой структуры

Функционал в этом модуле

  • Построение структуры (последовательностей) наводящих вопросов на основе графа мыслительных процессов.
  • Генерация текстовых формулировок наводящих вопросов (а также ответов и объяснений для них) для данной структуры в конкретной ситуации.
    • Введение выражений в стороннюю систему текстовых шаблонов (см. JavaStringTemplating) для построения формулировок на основе данных о предметной области.
    • Динамическое построение формулировок на основе структуры выражений в конкретных узлах ГМП.

Подробнее о функционале этого модуля читайте в других статьях данного раздела.

Примеры использования

Примеры использования описаны на Java, т.к. я думаю, что вы с большей вероятностью будете использовать именно ее (использование на Kotlin в принципе аналогично, и более просто).

Данные примеры также полагаются на код из its_DomainModel, подробнее см. их примеры использования.

Построение автомата наводящих вопросов

DomainSolvingModel model = ... ;
    
QuestionAutomata questionAutomata = FullBranchStrategy.INSTANCE.buildAndFinalize(  
    model.getDecisionTree().getMainBranch(),  
    new EndQuestionState()  
);

Построение диалоговой ситуации

DomainModel situationModel = ... ;

String localizationCode = "RU";
QuestioningSituation questioningSituation = new QuestioningSituation(situationModel, localizationCode)

Ведение диалога в конкретной ситуации

QuestionAutomata questionAutomata = ... ;
QuestioningSituation = ... ;

QuestionState currentState = questionAutomata.getInitState();  
while (currentState != null) {  
    QuestionStateResult stateResult = currentState.getQuestion(questioningSituation);  
    //Если переход к следующему вопросу  
    if(stateResult instanceof QuestionStateChange stateChange){  
        //<Как-то обрабатываем объяснение о переходе к след. вопросу>  
        handleExplanation(stateChange.getExplanation());  
        currentState = stateChange.getNextState();  
    }  
    //Иначе если вопрос  
    else if (stateResult instanceof Question question) {  
        //<Как-то получаем ответы пользователя на вопрос>  
        //например, question.ask()List<Integer> answers = handleQuestion(question);  
        QuestionStateChange stateChange = currentState.proceedWithAnswer(questioningSituation, answers);  
        //<Как-то обрабатываем объяснение о переходе к след. вопросу>  
        handleExplanation(stateChange.getExplanation());  
        currentState = stateChange.getNextState();  
    }  
}