В данной инструкции я расскажу, как интегрировать ИИ ассистента на основе ChatGPT / Gemini / Ollama в вашу Linux систему и взаимодействовать с ним в терминале с помощью консольного приложения — ShellGPT.
Инструкция актуальна для дистрибутивов Linux Mint 22 / Ubuntu 24.04 / Debian 12.
🖐️Эй!
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.
⚠️Предупреждение
⚠️ Перед началом важно отметить, что ShellGPT и Ollama — open source проекты, исходные коды которых размещены на GitHub. В том время, как серверная часть бота ChatGPT / Gemini являются проприетарным ПО, что не даёт возможности узнать все особенности обработки информации, которая происходит на их серверах. Не отправляйте сторонним сервисам никакой конфиденциальной информации.
TLDR для Ollama
Подготовка:
BASH
# установка необходимых утилитsudo apt update && sudo apt install -y curl pipx
# установка Ollamacurl -fsSL https://ollama.com/install.sh | sh
# загрузка модели ~10 гбollama pull deepseek-coder-v2:latest
# установка ShellGPTpipx install 'shell-gpt[litellm]'
Нажмите, чтобы развернуть и увидеть больше
Далее инициализируем ShellGPT:
BASH
sgpt "ping" 2> /dev/null
Нажмите, чтобы развернуть и увидеть больше
На запрос API ключа вводим любую строку, главное чтобы значение не было пустым и нажимаем Enter. Команда завершится ошибкой — это ожидаемое поведение при использовании Ollama.
Затем открываем на редактирование конфиг ShellGPT:
BASH
nvim ~/.config/shell_gpt/.sgptrc
Нажмите, чтобы развернуть и увидеть больше
Редактируем следующие параметры:
BASH
# любая строка, значение не должно быть пустымOPENAI_API_KEY=some_random_string
# отключение специфики для openaiOPENAI_USE_FUNCTIONS=false# использование LLM прокси - litellmUSE_LITELLM=true# определение модели по умолчаниюDEFAULT_MODEL=ollama/deepseek-coder-v2
# выбор темы оформления (по умолчанию dracula)CODE_THEME=nord-darker
Нажмите, чтобы развернуть и увидеть больше
Запускаем диалог с моделью:
BASH
sgpt --repl test_session
Нажмите, чтобы развернуть и увидеть больше
Это интерактивный режим, где происходит общение с ботом в формате чата с сохранением контекста.
Опционально: при наличии свободных ресурсов для ускорения отклика модели можно добавить автозагрузку её параметров в память (без выгрузки по таймауту):
BASH
cat << EOF > ~/.config/autostart/ollama.desktop
[Desktop Entry]
Type=Application
Name=Ollama
Comment=Запуск ollama при старте системы
Exec=env OLLAMA_KEEP_ALIVE="-1" bash -c 'ollama run deepseek-coder-v2 ping &> /dev/null'
Terminal=false
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=60
EOF
Нажмите, чтобы развернуть и увидеть больше
Введение
Немного про ChatGPT
Определение понятия ChatGPT от него самого:
ChatGPT — это модель искусственного интеллекта, которая используется для создания чат-ботов и виртуальных помощников. Она основана на технологии глубокого обучения и нейронных сетей, которые позволяют ей понимать естественный язык и генерировать ответы на основе анализа входящей информации.
Немного про Gemini
Gemini — это также ИИ модель, только от Google с бесплатным API. Т.к. по умолчанию ShellGPT рассчитан на использование API совместимого с OpenAI, то для его использования в связке с Gemini необходимо настроить специальный прокси на базе node.js, который будет обрабатывать запросы в формате OpenAI от ShellGPT и перенаправлять их Google Gemini. Про настройку такого прокси будет ниже.
Отмечу только, что в качестве локальной модели используется deepseek-code-v2.
Немного про ShellGPT
ShellGPT — Command Line App, программа-помощник в области программирования и системного администрирования. Работает в среде операционной системы Linux и использует командную оболочку для взаимодействия: отвечает на вопросы, даёт советы и рекомендации, выполняет различные команды и т.д.
Форматирование вывода ShellGPT ограничено возможностями терминала. Тем не менее вот, как выглядит одна из последних версий программы (да, это терминал🔥):
Работа ShellGPT с Ollama, модель deepseek-coder-v2.
Подготовка
Примеры в этом руководстве выполнены в дистрибутиве Linux Mint 22. Но уверен, что аналогичным образом данное ПО можно также установить и использовать на других Linux системах.
Программа ShellGPT написана на языке программирования Python3, соответственно для работы первой необходимо, чтобы последний был установлен в системе.
По умолчанию в Linux Mint, Python3 предустановлен. Проверить текущую версию можно командой:
BASH
python3 --version
Нажмите, чтобы развернуть и увидеть больше
Предпочтительный вариант установки ShellGPT — использование утилиты pipx.
💡 pipx — это инструмент для установки и запуска Python-приложений в изолированной среде (venv), которую он автоматически создает и настраивает под каждую программу.
Пакет pipx есть в стандартных репозиториях Linux Mint. Устанавливается обычным способом:
BASH
sudo apt update && sudo apt install -y pipx
Нажмите, чтобы развернуть и увидеть больше
💡 pipx устанавливает Python-приложения в локальную директорию пользователя ~/.local/pipx/venvs/ и делает символьные ссылки на исполняемые файлы в ~/.local/bin/. Для корректной работы эта директория должна быть в списке путей системной переменной $PATH.
Если используется Gemini
Как уже говорил ранее, для использования ShellGPT в связке с Gemini необходимо доустановить прокси, который будет обрабатывать запросы в формате OpenAI и перенаправлять их Google Gemini.
Прокси устанавливается с помощью npm и запускается от в контексте обычного пользователя на порту 8080:
BASH
# установка npmsudo apt install -y npm git
# создание директории с файлами проксиmkdir -p ~/.local/node_modules/openai-gemini
# клонирование репозитория проксиgit clone https://github.com/PublicAffairs/openai-gemini ~/.local/node_modules/openai-gemini
# переход в рабочую директориюcd ~/.local/node_modules/openai-gemini
# установка зависимостейnpm install
# запуск проксиnpm run start
Нажмите, чтобы развернуть и увидеть больше
💡 Для остановки сервиса используйте клавиши Ctrl+c.
Об успешном запуске будет свидетельствовать вывод:
Установка и настройка ShellGPT для использования с ChatGPT/Gemini
Получение API токена для ChatGPT
Разумеется, для использования ChatGPT необходим аккаунт на портале OpenAI, чтобы получить API ключ для бота ChatGPT.
⚠️Хочу вас сразу предупредить, что использование API ключей ограничено разработчиками OpenAI. Бесплатный период доступа — 3 месяца после регистрации аккаунта (узнать время окончания можно тут). По истечению срока необходимо приобретать подписку. На данный момент это стоит ~20$ в месяц, что не мало. В качестве бесплатной и конфиденциальной альтернативы рекомендуется использовать ShellGPT совместнос Ollama (читайте ниже).
В отличие от ChatGPT у сервиса Gemini бесплатный API хоть и с ограничениями по количеству запросов, но для личного использования или небольшого пет-проекта — этого более, чем достаточно.
После генерации ключа выполняем установку shell-gpt с помощью pipx:
BASH
pipx install shell-gpt
Нажмите, чтобы развернуть и увидеть больше
Тут всё довольно прозаично😏.
После установки в системе появится исполняемый файл sgpt. Проверяем, что он установился в нашу систему:
BASH
whereis sgpt
Нажмите, чтобы развернуть и увидеть больше
Пробуем запустить ассистента командой sgpt "Привет!":
BASH
sgpt 'Привет!'
Нажмите, чтобы развернуть и увидеть больше
💡Обращаю ваше внимание на то, что текст обращения к боту из командной строки необходимо обрамлять кавычками..
При первом использовании ShellGPT попросит вас ввести API ключ. Вводим ключ от нужного сервиса: ChatGPT или Gemini.
☝️В случае Gemini команда звершится ошибкой. Это ожидаемое поведение, ведь нужно перенаправить данные в прокси. Это далее.
Файл конфигурации ShellGPT, после введения API ключа, генерируется автоматически по пути: ~/.config/shell_gpt/.sgptrc
Посмотреть его содержимое с помощью известной нам команды cat или консольного редактора nvim:
BASH
nvim ~/.config/shell_gpt/.sgptrc
Нажмите, чтобы развернуть и увидеть больше
Рассмотрим содержимое конфига немного подробнее:
BASH
# ключ API, также можно задать через переменную окружения OPENAI_API_KEYOPENAI_API_KEY=your_api_key
# базовый URL backend-сервера, если указано "default", он будет определён на основе --modelAPI_BASE_URL=default
# API_BASE_URL=http://localhost:8080/v1# максимальное количество кэшируемых сообщений на сессию чатаCHAT_CACHE_LENGTH=100# папка для кэша чатаCHAT_CACHE_PATH=/tmp/chat_cache
# длина кэша запросов (количество)CACHE_LENGTH=100# папка для кэша запросовCACHE_PATH=/tmp/cache
# тайм-аут запроса в секундахREQUEST_TIMEOUT=60# модель OpenAI по умолчаниюDEFAULT_MODEL=gpt-4o
# DEFAULT_MODEL=gemini-2.5-flash# цвет по умолчанию для shell-ответов и автодополнений кодаDEFAULT_COLOR=magenta
# при использовании режима --shell по умолчанию выполнять команду без запросаDEFAULT_EXECUTE_SHELL_CMD=false# отключить потоковую передачу ответовDISABLE_STREAMING=false# тема pygment для отображения markdown (по умолчанию или для описания ролей)CODE_THEME=default
# путь к директории с функциямиOPENAI_FUNCTIONS_PATH=/home/user/.config/shell_gpt/functions
# выводить результат функций, если LLM их используетSHOW_FUNCTIONS_OUTPUT=false# разрешить LLM использовать функцииOPENAI_USE_FUNCTIONS=true# принудительно использовать LiteLLM (для локальных моделей)USE_LITELLM=false
Нажмите, чтобы развернуть и увидеть больше
В случае использования Gemini в параметре API_BASE_URL укажите адрес к прокси openai-gemini, который мы настроили на этапе подготовки. По умолчанию он такой: http://localhost:8080/v1. А в качестве модели — Gemini, например: DEFAULT_MODEL=gemini-2.5-flash.
Остальные параметры вы можете скорректировать под ваши предпочтения.
💡API ключ можно задать и с помощью переменной окружения $OPENAI_API_KEY. Если она задана, то ключ будет браться из неё. Если нет, то из файла ~/.config/shell_gpt/.sgptrc. На практике, проще всего использовать автоматически сгенерированный файл конфигурации.
Установка и настройка ShellGPT для использования с Ollama
Для реализации данной связки требуется установленная платформа Ollama. Описание процесса установки смотрите в отдельной статье.
⚠️Если вы ранее установили стандартный ShellGPT, то его желательно сперва удалить:
BASH
pipx uninstall shell-gpt
Нажмите, чтобы развернуть и увидеть больше
Обратите внимание, что по заявлению разработчика ShellGPT работа с локальными моделями не оптимизировано, так, как с онлайн сервисом ChatGPT:
❗️Note that ShellGPT is not optimized for local models and may not work as expected.
В случае взаимодействия с Ollama команда установки ShellGPT немного другая:
BASH
pipx install "shell-gpt[litellm]"
Нажмите, чтобы развернуть и увидеть больше
Здороваемся:
BASH
sgpt 'Привет!' 2> /dev/null
Нажмите, чтобы развернуть и увидеть больше
На запрос API ключа вводим любую строку, главное чтобы значение не было пустым и нажимаем Enter:
Первая команда завершиться ошибкой — это ожидаемое поведение при использовании Ollama.
Теперь открываем конфиг:
BASH
nvim ~/.config/shell_gpt/.sgptrc
Нажмите, чтобы развернуть и увидеть больше
И редактируем/добавляем следующие параметры:
BASH
# определение модели по умолчаниюDEFAULT_MODEL=ollama/deepseek-coder-v2
# выбор темы оформления (опционально)CODE_THEME=nord-darker
# отключение специфики для openaiOPENAI_USE_FUNCTIONS=false# использование LLM прокси - litellmUSE_LITELLM=true# любая строка, значение не должно быть пустымOPENAI_API_KEY=some_random_string
Нажмите, чтобы развернуть и увидеть больше
💡Замените deepseek-coder-v2 на выбранную вами модель. 💡Список всех доступных тем оформления ShellGPT найдёте тут.
Описание всех параметров смотрите в предыдущем пункте статьи☝️.
И все таки давайте заставим ИИ поздороваться:
BASH
sgpt 'Привет?'
Нажмите, чтобы развернуть и увидеть больше
Отвечает вопросом на вопрос🤔
Использование
И так, что же умеет установленный ShellGPT ассистент в нашем терминале:
Простые запросы;
Проведения анализа;
Выполнение команд оболочки;
Генерация кода;
Чат с ботом;
Режим диалога с ботом (read–eval–print loop), как веб версии.
Простые запросы
Например:
BASH
sgpt "Расскажи, что такое терминал в Linux?"
Нажмите, чтобы развернуть и увидеть больше
Или:
BASH
sgpt "Покажи содержимое конфига сервера ssh"
Нажмите, чтобы развернуть и увидеть больше
Хитрец, заставил нас вручную смотреть конфиг. Тем не менее, он указал, где он находится и как его посмотреть. С этим мы еще разберемся🤨. Машина будет выполнять что от нее требуют💪.
Проведения анализа
Для примера, давайте попросим бота проанализировать лог ошибок нашего графического сеанса Xorg. Данный файл является скрытым (начинается с точки) и лежит в домашней директории. С помощью механизма перенаправления (пайплайн) мы передадим вывод содержимого файла боту GPT:
На что он нам дал подробный анализ. Так можно продолжить, все больше углубляясь в изучение информации по теме. Согласитесь удобно. Не нужно лишних действий по «гуглению». Для этого еще браузер открывать нужно😉.
Но это и не самое интересное. Идём дальше🚶.
Выполнение команд оболочки
Для выполнения команд по запросу, команде sgpt необходимо передав ключ --shell. Давайте попробуем попросить бота отобразить только симлинки в директории /etc:
BASH
sgpt --shell "выведи только симлинки в директории /etc"
Как видим, мы дали боту описание того, что хотим, чтобы он сделал, а он предложил нам выполнить сгенерированную команду. После ручного подтверждения буквой e и нажатием Enter команда выполнилась в терминале. Не дурно🙄.
💡Команда ls -l / | grep ^l выводит содержимое каталога /etc и фильтрует вывод с помощью команды grep, используя регулярное выражения ^ — что означает начало строки, и шаблон фильтра из буквы l — которая в выводе команды ls -l обозначает файлы-символические ссылки (симлинки).
Давайте всё таки заставим бота вывести серверный конфиг программы (не забываем про ключ --shell):
Ну вот. Совсем другое дело. Сам придумал, сам выполнил. Главное не увлекаться отдавая под контроль бота свой компьютер. А то еще установит на неё Windows🤷♂️.
Давайте рискнем и попросим бота обновить кэш пакетов и установить нам программу, например консольный редактор кода Neovim:
BASH
sgpt --shell "Обнови кэш и установи Neovim"
Нажмите, чтобы развернуть и увидеть больше
И запустить его:
BASH
sgpt --shell "Запусти Neovim"
Нажмите, чтобы развернуть и увидеть больше
Он таки это делает😮.
На самом деле возможности бота по использовании его в качестве ассистента в командной строке ограничиваются лишь вашей фантазией и иногда корректностью генерируемых им команд. Которые обязательно нужно проверять, перед их выполнением.
Аналогичным образом бот может формировать и выполнять команды по запуску docker контейнеров, составлять curl команды с переданными боту данными в формате json, редактировать видео/аудио файлы с помощью консольной утилиты ffmpeg, работать с файлами в нашей системе и многое другое.
Генерация кода
Для генерации кода с помощью ShellGPT используется ключ --code. Давайте попросим его сформировать последовательность Фибоначчи от 1 до 50 с помощью двух способов: Bash и Python. Просим:
BASH
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50"sgpt --code "Python скрипт последовательности Фибоначчи от 1 до 50"
Нажмите, чтобы развернуть и увидеть больше
Данные можно выводит в файл с помощью механизма перенаправления:
BASH
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50" > fib.sh
sgpt --shell "Сделай файл fib.sh исполняемым и запусти его"
Нажмите, чтобы развернуть и увидеть больше
Точно не помню, как правильно считать последовательность Фибоначчи, с 0 или с 1, но как по мне, это наглядный пример функциональности бота.
Давайте попросим его добавить комментарии для каждой строчки нашего fib.sh:
BASH
cat fib.sh | sgpt --code "Добавь комментарии для каждой строки скрипта"
Нажмите, чтобы развернуть и увидеть больше
Чтож… Круто! Идём дальше.
Чат
Чат — это функция бота GPT, которой я пользуюсь чаще всего.
Для использования чата с ботом в командной строке необходимо добавить ключ --chat, а также указать уникальное название сессии чата. В файлах кэша с этим названием будет храниться наша переписка с ботом. Пример:
BASH
sgpt --chat session_1 'Коротко: как выйти из vim?'sgpt --chat session_1 'Про что этот диалог?'
Нажмите, чтобы развернуть и увидеть больше
Мы использовали название сессии session_1, для формирования кэша чата, чтобы использовать предыдущий запросы в своей беседе.
Обратите внимание, что по умолчанию кэш запросов и кэш чатов ограничен (100 единиц) в файле ~/.config/shell_gpt/.sgptrc параметры: CHAT_CACHE_LENGTH=100 и CACHE_LENGTH=100.
При достижении лимита программа может выдавать 400-ю ошибку клиента. При необходимости увеличьте данные параметры или используйте другое уникальное название сессии для создания нового чата.
Также можно использовать специальный идентификатор сессии: temp для создания временной сессии. При указания этого идентификатора, каждая сессия будет новой.
Посмотреть список сессий чата можно командой sgpt --list-chats, а посмотреть содержимое сессии sgpt --show-chat имя_сессии:
BASH
sgpt --list-chats
sgpt --show-chat session1
Нажмите, чтобы развернуть и увидеть больше
Вообще у команды sgpt очень удобная и красивая справка. Получить ее можно передать ключ --help:
BASH
sgpt --help
Нажмите, чтобы развернуть и увидеть больше
Стоит упомянуть возможность комбинирования ролей бота. Например, чтобы улучшить генерацию кода, можно использовать историю чата с помощью --chat имя_сессии и затем --code для генерации кода и т.д. Такой подход справедлив и для роли --shell. Пост получается большим, не будем сильно углубляться. В конце поста вы всегда найдете ссылки на источники.
Режим диалога (read–eval–print loop)
У ShellGPT есть режим чата в реальном времени, только в консоли. Называется этот режим repl (read–eval–print loop).
BASH
sgpt --repl session_2
Нажмите, чтобы развернуть и увидеть больше
Как видите, после выполнения команды мы перешли в интерактивный режим общения с ботом. Тут можно писать текст не используя кавычки. Довольно удобно. Чтобы выйти из этого режима используйте сочетания клавиш Ctrl+c или Ctrl+d.
По умолчанию режим --repl использует роль chat, и задействует одни и те же названия сессий. Чтобы перейти к диалогу относительно ролей --shell или --code, необходимо их просто указать:
BASH
sgpt --repl session_3 --shell
Нажмите, чтобы развернуть и увидеть больше
BASH
sgpt --repl session_4 --code
Нажмите, чтобы развернуть и увидеть больше
Как видите, контекст беседы успешно работает.
Короткие alias для удобства
Давайте сделаем короткие alias (псевдонимы команд) для бОльшего удобства использования бота.
Открываем на редактирование файл конфигурации оболочки, в моём случае Zsh:
Теперь реинициализируем нашу оболочку и затем командой alias выведем наши добавления:
BASH
exec zsh
alias| grep '^G'
Нажмите, чтобы развернуть и увидеть больше
Проверяем:
BASH
G 'Как дела?'Gs 'Найди исполняемый файл программы firefox'Gc 'Напиши цикл bash для переименования файлов в текущей директории'
Нажмите, чтобы развернуть и увидеть больше
Прекрасно, работает. Попробуем режим repl:
BASH
GG
Нажмите, чтобы развернуть и увидеть больше
Отлично, теперь удобно обращаться к боту с помощью коротких команд:
G "текст_запроса" — запрос в режиме чата: --chat
Gs "текст_запроса" — запрос в режиме командной оболочки: --shell
Gc "текст_запроса" — запрос в режиме генерации кода: --code
GG — переход в режим диалога: --repl
💡 Совет
💡Если вы используете bat для подсветки синтаксиса вывода в терминале, то alias генерации кода можно переделать в функцию, с удалением первой и последней строки в режиме кода (разметка markdown в Ollama):
Терминал с чат-ботом ChatGPT в виде отдельного приложения
Теперь давайте сделаем отдельное приложение для общения с ботом в режим repl. То есть при открытии этого приложения мы будем попадать сразу в режим диалога без ввода каких-либо команд.
Сегодня мы с вами узнали, как интегрировать прогрессивного ИИ ассистента ChatGPT / Ollama с помощью программы ShellGPT и её утилиты командной строки sgpt.
Выполнили установку утилиты, изучили её файл конфигурации и режимы работы. Составили отдельные псевдонимы (alias) команд для быстрого доступа к боту из терминала, а также сделали отдельное приложение для общения с ботом в отдельном окне в режиме реального времени (repl).
Еще раз прошу обратить внимание, что программа ShellGPT — по сути является консольным клиентом для подключения по API онлайн платформе OpenAI или локальной Ollama.