Класс Dialog
Отвечает за реализацию диалогового формата общения с пользователем.
Особенность решения состоит в применении паттерна проектирования "Наблюдатель" (Observer).
За диалогом наблюдают один или более "наблюдателей", и в зависимости от развития диалога дают LLM дополнительные
инструкции либо выполняют другие действия. Например, при реализации иерархического мультиагентного решения используется
"супервайзер", который также размещает своего наблюдателя, который, в свою очередь, может вообще прервать текущий диалог
и переключиться на другие задачи.
Подключение
const {Dialog} = require("@dialogai/dialog-class");
Настройка
Пример настройки диалога для получения информации о профессиональном опыте и интересах пользователя:
const {
DefineSkillEmphasisObserver,
DiscussProfessionalIntentObserver,
IsDialogFinishedObserver,
ProfessionalSkillObserver,
SpeakIntentObserver,
TooManyQuestionsObserver
} = require("@dialogai/dialog-observers");
function buildDialog(supervisor) {
let dialog = new Dialog({
dialog_code: 'GUPD',
start_system_msg: `
Ты должен узнать об интересах и опыте работы пользователя. Начни диалог первым. Задавай вопросы поэтапно,
не более одного за один раз.
Сначала познакомься, пойми, ты общаешься с мужчиной или женщиной (но не спрашивай напрямую,
просто определи это из ответов).
Общайся нейтрально, без особого восторга.
Давай оценки ответам не слишком часто, только если это уместно.
Нужно помочь ему рассказать о его интересах, которые есть сегодня, и которые были в прошлом.
Не углубляйся только в одну тему, постарайся переходить к следующей.
Избегай длинных рассуждений. Говорить должен пользователь, а не ты.
`,
tool_name: 'discuss_skills_experience_and_hobbies',
tool_description: `Используется когда нужно узнать опыт работы и интересы пользователя
(по запросу пользователя или если это требуется в ходе диалога).`
});
if (supervisor) {
dialog
.reg_observer(supervisor.getObserver())
.set_session_id(supervisor.thread_id)
.get_tool_for(supervisor);
}
dialog
.reg_observer(new IsDialogFinishedObserver())
.reg_observer(new SpeakIntentObserver())
.reg_observer(new TooManyQuestionsObserver())
.reg_observer(new DefineSkillEmphasisObserver())
.reg_observer(new ProfessionalSkillObserver())
.reg_observer(new DiscussProfessionalIntentObserver());
dialog.additional_starting_instructions.push(Dialog.get_instruction("Узнай имя и возраст пользователя."));
console.log('DIALOG :: ', dialog.toString());
return dialog;
}