И от LLM будет польза
В прошлой статье было описано как поднять свой собственный сервис с LLM на базе ollama и моделью DeepSeek. Но в таком случае это получался банальный чатбот, которых в сети полным полно, этот разве что полностью под собственным контролем. Попробуем сделать из этого болтливого бота полезный инструмент.
А поможет нам в это проект ShellOracle. К СУБД Oracle не имеет ни малейшего отношения, а Oracle — это оракул, то есть предсказатель.
На сайте проекта https://github.com/djcopley/ShellOracle указана поддержка множества различных моделей и API, в том числе и ollama, на нем и остановимся, благо инстанс у нас уже есть.
Установка ShellOracle
Для установки будем использовать ВМ с развёрнутым openScaler 24.03 SP1, сама конфигурация ВМ довольно стандартна: 4 ядра и 4 Gb RAM, диск на 20 Gb.
Для установки будет использован инструмент pipx, который будет установлен через pip.
pip install pipx
Теперь можно установить и сам ShellOracle
pipx install shellorcale
Установка успешно завершена, но нам советуют поставить выполнить команду pipx ensurepath, которая автоматически дополнит переменную PATH, и нет нужды править это вручную.
pipx ensurepath
Чтобы изменения произошли необходимо перезайти в систему или перечитать файл .bashrc, пойдет по первому пути, перезайдем в систему.
После входа необходимо настроить shelloracle на работу с нашим сервисом ollama, для этого запустим конфигуратор shor:
shor configure
Необходимо указать адрес сервера, а так же наверно порт, если с адресом проблем нет, то вот с портом — надо узнать, на каком порту нас ждут. Для этого подключаемся к серверу с ollama:
lsof -i -n -P | grep ollama
Как видно выше порт для доступа по API — 11434, но проблема в том, что сервис слушает только loopback интерфейс, необходимо это исправить.
Узнав номер порта сразу настроим фаервол, что бы сетевой доступ сразу появился:
firewall-cmd –permanent –add-port=11434/tcp
firewall-cmd –reload
Фаервол настроен и теперь можно заняться настройкой ollama. Из документации к ollama следует, что адрес, на котором необходимо принимать запросы по API можно указать через переменную окружения OLLAMA_HOST. Останавливаем системную службу и пробуем запустить в консоли:
systemctl stop ollama
OLLAMA_HOST=183.16.4.148 ollama serve
Ждём несколько секунд пока сервис запустится:
Сервис запущен и рапортует о наличии двух GPU с 16 Gb VRAM каждый. Теперь загрузим модель deepseek-r1:32b, для этого в соседней консоли запустим команду:
OLLAMA_HOST=183.16.4.148 ollama run deepseek-r1:32b
Модель успешно запустилась и даже ответила на тестовый запрос.
Проверим ещё раз, что именно порт 11434 готов принимать запросы:
lsof -i -n -P | grep ollama
Теперь можно вернутся к настройке oracleshell:
Указываем сервер, где работает ollama и имя запущенной модели deepseek-r1:32b, порт по умолчанию 11434, на этом настройка завершена. Необходимо перезайти в систему для перечитывания файла .bashrc.
Для выполнения запросов к модели необходимо нажать комбинацию клавиш CTRL+F, появится приглашение > для ввода запроса, что ж попробуем:
Как видно запрос вполне успешно выполнился и в конце, после размышлений, указана верная команда who.
Попробуем попросить не выводить своим размышления, а сразу давать команду:
Машина упорно сопротивляется, думаю тут проблема в самой модели deepseek, которая в первую очередь заточена на такой формат общения. Попробуем сменить модель на что-то попроще, например на qwen.
Для этого возвращаемся в консоль с запущенной deepseek и выходим командой /bye и запустим qwen:
OLLAMA_HOST=183.16.4.148 ollama run qwen:14b
Теперь необходимо указать новую модель в shellorcale, для этого опять запустим конфигуратор:
shor configure
Указываем новые вводные и выполняем перезаход в систему. Так же жмем CTRL+F и делаем запрос:
Получилось не сильно лучше, но попробуем попросить не делать размышления.
Уже лучше, но сама команда так себе. Попробуем что-то другое:
А этот запрос отработан на ура.
Таким образом уже можно попробовать использовать LLM для чего-то более осмысленного. Но и качество ответа так же напрямую зависит от используемой модели, чем больше модель тем лучше ответ.
В дополнение можно сказать, так как сервер теперь принимает запросы по сети, то можно к нему подключить несколько таких консолей и работать параллельно, а при наличии доступа к коммерческим моделями сразу настроить shelloracle на работу с ними.