Morix поддерживает возможность расширения функциональности через плагины. Этот документ объясняет, как создать свой собственный плагин с использованием интерфейса PluginInterface.
Плагины позволяют использовать подход tools от openai.
-
Создание нового файла плагина
- Плагины находятся в директории
~/.config/morix/plugins. Создайте новый файл с расширением.pyв этой директории. Например,my_plugin.py.
- Плагины находятся в директории
-
Реализация интерфейса
PluginInterface-
В файле плагина импортируйте
PluginInterface:from morix.plugins.plugin_interface import PluginInterface
-
Создайте класс, который наследует
PluginInterfaceи реализуйте методinitialize. Пример:class MyPlugin(PluginInterface): def initialize(self): # Инициализация плагина pass def my_custom_function(self, param): # Логика вашей функции return f"Hello, {param}"
-
-
Определение функций плагина в YML
-
Плагин должен быть связан с описанием функций в файле
.yml. Эти файлы также находятся в папке~/.config/morix/plugins. -
Создайте файл
my_plugin.ymlи добавьте описание:- type: function function: name: 'my_custom_function' description: 'Пример пользовательской функции' parameters: type: object properties: param: type: string description: 'Пример параметра' required: ['param'] additionalProperties: false
-
название метода в .py файле и в yaml (function.name) должны совпадать и название аргументов функции должно совпадать с yml (function.parameters.properties.{arg}), так же не забудьте поправить function.parameters.required в yml. Результат выполнения функции, в случае его наличия, будет отправлен модели.
-
-
Загрузка и использование плагина
- После написания кода плагина и описания функций в файле
.yml, перезапустите Morix. При запуске плагин автоматически загрузится и станет доступным для использования в рамках системы.
- После написания кода плагина и описания функций в файле
Процесс добавления нового функционала становится простым благодаря этому подходу. Пример использования плагина через promt:
User: вызови функцию "my_custom_function"
Так же можно подробно описать для чего используется эта фукнция в description в файле yml и тогда модель сама будет вызывать функцию когда сочтет нужным.