Легенький ассистент, который может выполнять пользовательские команды.
Для начала работы установите необходимые библиотеки:
pip install -r requirements.txtЗапустите main.py. Вас встретит ассистент с именем "Джарвис". Имя можно изменить в файле config.py в переменной ASSISTENT_NAME.
Ассистент попросит у вас разрешение на добавление в автозагрузку Windows, чтобы при запуске системы ассистент мог самостоятельно запускаться.
Ассистент работает только на Windows.
Ассистент поддерживает множество встроенных команд, таких как: открыть браузер, сделать запрос в Википедию, установить таймер и т.д. Запустив файл all_commands.py, вы увидите в консоли все возможные команды, которые ассистент сможет понять.
У ассистента есть два важных файла: dataset.py, в котором хранится список слов, которые ассистент сможет понимать, и config.py, в котором строится иерархия команд для их последующего парсинга и выполнения.
Чтобы добавить поддерживаемое слово в датасет, нужно в словаре dataset создать новый ключ, который будет хранить ваши слова. Например, чтобы ассистент понимал слово "машина", создайте ключ "CAR" и добавьте в него список слов:
"CAR": [
"машина",
"тачка",
]Теперь, чтобы когда вы говорите одно из слов из ключа "CAR", и ассистент выполняет команду, вам нужно будет создать в config.py последовательность ключей, после которых выполнится функция. Например:
"CAR": {
ELSE: [tools.tts, "Феррари - классная машина!"]
}Здесь мы вписываем наш ключ как вход в команду, и далее, используя константу ELSE, вписываем в квадратных скобках функцию, которая будет выполнена, и ее аргументы. В нашем случае это встроенная функция tts из модуля tools, которая преобразует текст в речь.
ELSE - это функция, которая выполнится, если парсер не нашел в ключе еще ключа, который бы продолжал иерархию. То есть, имея такую команду:
"HI": {
"HOW MUCH COST": {
"FERRARI":
FUNC: [tools.tts, "Цена варьируется."]
}
ELSE: [tools.tts, "Привет!"]
}В данной команде теперь два варианта пути: если пользователь скажет "привет, сколько стоит феррари", то ассистент скажет "Цена варьируется.", иначе поприветствует пользователя. ELSE позволяет ассистенту реагировать на неполные или неизвестные команды, предоставляя более гибкую и адаптивную систему команд. Это может быть особенно полезно при обработке естественного языка, где пользователи могут выразить одну и ту же команду разными способами.
FUNC используется только с CONTENT или CONTENT_TO_END. В остальных случаях функцию с аргументами указывать в ключе, или ELSE если это корневой ключ. FUNC работает по следующему принципу:
- CONTENT: набор слов (которые не обязательно должны быть в датасете), которые пойдут в аргументы функции. Например:
"SAY": {
CONTENT: None
FUNC: tools.tts
}В данном примере, если пользователь скажет: "скажи привет",то ассистент скажет "Привет". Здесь мы в CONTENT записываем None, говоря парсеру, что дальше не нужно идти, и это конечная точка контента.
- CONTENT_TO_END: передаст один аргумент в функцию, но это будут слова, начиная с ключа, после которого он идет. Например:
"SAY": {
CONTENT_TO_END: None
FUNC: tools.tts
}Теперь, если пользователь скажет "привет скажи ...", то все последующие слова, пока парсер не уткнется в конец, перейдут в один аргумент.
Для примера можно посмотреть на команду, которая реализует выбор случайного числа из двух чисел:
"RANDOM": {
"NUM": {
"FROM": {
CONTENT: {
"BEFORE": CONTENT
}
}
},
FUNC: tools.print_random
}