Я впервые знакомлюсь с CLIPS и пытаюсь понять, является ли это лучшим способом реализовать чат-бота.Насколько я понимаю до сих пор, он широко используется для создания экспертных систем и полностью основан на правилах.Я пытался использовать NN для создания диалогового механизма, но он с треском проваливается даже для простых вариаций обучающих данных, которые очень легко обрабатываются с помощью правил.
Теперь правила могут быть написаны на любом языке.Каковы преимущества CLIPS над любым другим языком?
РЕДАКТИРОВАТЬ 1: Ответы показывают, что CLIPS является хорошим выбором, поскольку он использует алгоритм сопоставления с образцом.Однако, немного поэкспериментировав с CLIPS, я не смог понять, почему объявление правил, которые запускаются, когда активирован факт правила LHS, является лучшим подходом.Позвольте мне привести пример:
Предположим, я хочу создать чат-бота, который отвечает на результаты ученика.
BOT: What are you looking for?
1. grade
2. subjects
USER: grade
BOT: Enter stream name.
USER: electrical
BOT: Enter student name
USER: john
BOT: grade in electrical for john is 56%
Это сценарий CLIPS, который я написал для этого:
(defrule main-intent
(initial-fact)
=>
(printout t"What are you looking for?
1. grade
2. subjects
")
(assert(why))
(assert(intent (read)))
)
;;;======================================================
(defrule grade-intent
(intent grade)
=>
(printout t"Enter stream name."crlf)
(bind ?stream (read))
(assert (stream-name ?stream))) ;;;There should be stream name validator here
;;;======================================================
(defrule stream-name
(stream-name ?stream)
=>
(printout t "Enter student name "crlf)
(bind ?user (read))
(assert (user-name ?stream ?user))) ;;;There should be student name validator here
;;;======================================================
(defrule user-name-rule
(user-name ?stream ?user)
=>
(printout t"grade in " ?stream " for " ?user " is 56%" crlf)
(bind ?grade 60)
(assert(grade-is ?grade)))
;;;======================================================
(defrule explanation
(why)
=>
(printout t "==============================" crlf)
(retract 0)
(facts)
(printout t "==============================" crlf)
)
С другой стороны, у меня в Python есть диалоговый движок, основанный на правилах, где я обучил модель NLP извлекать намерение и сущность из пользовательского запроса.Я использую файл конфигурации, как показано ниже, для определения потока диалога:
ask_stream:
call_python_fn: "validate_stream" # python routine that check against DB if stream exist. Returns value valid/invalid
properties:
prompt: "Enter stream name"
transitions:
valid: "ask_user" # if return value is valid, goto next state, ask_user
invalid: "ask_stream" # else again ask for correct stream name
ask_user:
component: "validate_user" # python routine that check against DB if student exist. Returns value valid/invalid
properties:
prompt: "Enter student name"
transitions:
valid: "hit_grade_api" # if return value is valid, goto next state
invalid: "ask_user" # else again ask user
hit_grade_api:
component: "grade_api" # python routine that hits an API to fetch grades
properties:
variable: "grade"
prompt: "grade in"+%stream+"for"+%user+" is "+%grade
Итак, если мой поток изменяется, скажем, боту нужен номер рулона студента, я должен добавить дополнительный узел в моем файле конфигурации Python дляпопросите номер ролла, и аналогичным образом я должен добавить новое правило в CLIPS.Так в чем же преимущество CLIPS?