
ShellGPT — ИИ ассистент в вашем терминале Linux
Приветствую!
В данной инструкции я расскажу, как интегрировать ИИ ассистента на основе ChatGPT/Ollama в вашу Linux систему и взаимодействовать с ним в терминале с помощью консольного приложения — ShellGPT.
Инструкция актуальна для дистрибутивов Linux Mint 22 / Ubuntu 24.04 / Debian 12.
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐. |
⚠️Перед началом важно отметить, что ShellGPT и Ollama — open source проекты, исходные коды которых размещены на GitHub. В том время, как серверная часть бота ChatGPT является проприетарным ПО, что не даёт возможности узнать все особенности обработки информации, которая происходит на их серверах. Не отправляйте сторонним сервисам никакой конфиденциальной информации.
Введение
Немного про ChatGPT
Определение понятия ChatGPT от него самого:
ChatGPT — это модель искусственного интеллекта, которая используется для создания чат-ботов и виртуальных помощников. Она основана на технологии глубокого обучения и нейронных сетей, которые позволяют ей понимать естественный язык и генерировать ответы на основе анализа входящей информации.
Немного про Ollama
Позвольте без лишних слов отправить вас в отдельную статью на сайте🙃: Ollama — Локальный ИИ на вашем Linux ПК🦙.
Отмечу только, что в качестве локальной модели используется deepseek-code-v2.
Немного про ShellGPT
ShellGPT — Command Line App, программа-помощник в области программирования и системного администрирования. Работает в среде операционной системы Linux и использует командную оболочку для взаимодействия: отвечает на вопросы, даёт советы и рекомендации, выполняет различные команды и т.д.
Форматирование вывода ShellGPT ограничено возможностями терминала. Тем не менее вот, как выглядит одна из последних версий программы (да, это терминал🔥):

Подготовка
Примеры в этом руководстве выполнены в дистрибутиве Linux Mint 22. Но уверен, что аналогичным образом данное ПО можно также установить и использовать на других Linux системах.
Программа ShellGPT написана на языке программирования Python3, соответственно для работы первой необходимо, чтобы последний был установлен в системе.
По умолчанию в Linux Mint, Python3 предустановлен. Проверить текущую версию можно командой:
python3 --version
Предпочтительный вариант установки ShellGPT — использование утилиты pipx
.
💡
pipx
— это инструмент для установки и запуска Python-приложений в изолированной среде (venv), которую он автоматически создает и настраивает под каждую программу.
Пакет pipx
есть в стандартных репозиториях Linux Mint. Устанавливается обычным способом:
sudo apt update && sudo apt install -y pipx
💡
pipx
устанавливает Python-приложения в локальную директорию пользователя~/.local/pipx/venvs/
и делает символьные ссылки на исполняемые файлы в~/.local/bin/
. Для корректной работы эта директория должна быть в списке путей системной переменной$PATH
.
Установка и настройка ShellGPT для использования с ChatGPT
Разумеется, для использования ChatGPT необходим аккаунт на портале OpenAI, чтобы получить API ключ для бота ChatGPT.
⚠️Хочу вас сразу предупредить, что использование API ключей ограничено разработчиками OpenAI. Бесплатный период доступа — 3 месяца после регистрации аккаунта (узнать время окончания можно тут). По истечению срока необходимо приобретать подписку. На данный момент это стоит ~20$ в месяц, что не мало. В качестве бесплатной и конфиденциальной альтернативы рекомендуется использовать ShellGPT совместно с Ollama (читайте ниже).
Сгененрировать такой ключ можно в настройках на странице своего аккаунта по адресу: https://platform.openai.com/account/api-keys

После генерации ключа выполняем установку shell-gpt с помощью pipx:
pipx install shell-gpt
Тут всё довольно прозаично😏.
После установки в системе появится исполняемый файл sgpt
. Проверяем, что он установился в нашу систему:
whereis sgpt
Пробуем запустить ассистента командой sgpt "Привет!"
. Если все установилось корректно, ты вы увидите запрос на введение API ключа, сгенерированного нами ранее. Вводим ключ и если бот вам ответил, значит все прошло успешно👌:
sgpt 'Привет!'
Обращаю ваше внимание на то, что текст обращения к боту из командной строки необходимо обрамлять кавычками.
Файл конфигурации ShellGPT, после введения API ключа, генерируется автоматически по пути: ~/.config/shell_gpt/.sgptrc
Посмотреть его содержимое с помощью известной нам команды cat или консольного редактора nvim:
nvim ~/.config/shell_gpt/.sgptrc
Рассмотрим содержимое конфига немного подробнее:
# ключ API, также можно задать через переменную окружения OPENAI_API_KEY
OPENAI_API_KEY=your_api_key
# базовый URL backend-сервера, если указано "default", он будет определён на основе --model
API_BASE_URL=default
# максимальное количество кэшируемых сообщений на сессию чата
CHAT_CACHE_LENGTH=100
# папка для кэша чата
CHAT_CACHE_PATH=/tmp/shell_gpt/chat_cache
# длина кэша запросов (количество)
CACHE_LENGTH=100
# папка для кэша запросов
CACHE_PATH=/tmp/shell_gpt/cache
# тайм-аут запроса в секундах
REQUEST_TIMEOUT=60
# модель OpenAI по умолчанию
DEFAULT_MODEL=gpt-4o
# цвет по умолчанию для shell-ответов и автодополнений кода
DEFAULT_COLOR=magenta
# при использовании режима --shell по умолчанию выполнять команду без запроса
DEFAULT_EXECUTE_SHELL_CMD=false
# отключить потоковую передачу ответов
DISABLE_STREAMING=false
# тема pygment для отображения markdown (по умолчанию или для описания ролей)
CODE_THEME=default
# путь к директории с функциями
OPENAI_FUNCTIONS_PATH=/Users/user/.config/shell_gpt/functions
# выводить результат функций, если LLM их использует
SHOW_FUNCTIONS_OUTPUT=false
# разрешить LLM использовать функции
OPENAI_USE_FUNCTIONS=true
# принудительно использовать LiteLLM (для локальных моделей)
USE_LITELLM=false
Вы можете скорректировать его под ваши предпочтения.
Как написано в комментарии выше, API ключ можно задать и с помощью переменной окружения $OPENAI_API_KEY
. Если она задана, то ключ будет браться из неё. Если нет, то из файла ~/.config/shell_gpt/.sgptrc
. На практике, проще всего использовать автоматически сгенерированный файл конфигурации.
Установка и настройка ShellGPT для использования с Ollama
Для реализации данной связки требуется установленная платформа Ollama. Описание процесса установки смотрите в отдельной статье.
⚠️Если вы ранее установили стандартный ShellGPT, то его желательно сперва удалить:
pipx uninstall shell-gpt
Обратите внимание, что по заявлению разработчика ShellGPT работа с локальными моделями не оптимизировано, так, как с онлайн сервисом ChatGPT:
❗️Note that ShellGPT is not optimized for local models and may not work as expected.
В случае взаимодействия с Ollama команда установки ShellGPT немного другая:
pipx install "shell-gpt[litellm]"
Здороваемся:
sgpt 'Привет!' 2> /dev/null
На запрос API ключа вводим любую строку, главное чтобы значение не было пустым и нажимаем Enter
:
Первая команда завершиться ошибкой — это ожидаемое поведение при использовании Ollama.
Теперь открываем конфиг:
nvim ~/.config/shell_gpt/.sgptrc
И редактируем/добавляем следующие параметры:
# определение модели по умолчанию
DEFAULT_MODEL=ollama/deepseek-coder-v2
# выбор темы оформления (опционально)
CODE_THEME=nord-darker
# отключение специфики для openai
OPENAI_USE_FUNCTIONS=false
# использование LLM прокси - litellm
USE_LITELLM=true
# любая строка, значение не должно быть пустым
OPENAI_API_KEY=some_random_string
💡Замените
deepseek-coder-v2
на выбранную вами модель.
💡Список всех доступных тем оформления ShellGPT найдёте тут.
Описание всех параметров смотрите в предыдущем пункте статьи☝️.
И все таки давайте заставим ИИ поздороваться:
sgpt 'Привет?'
Использование
И так, что же умеет установленный ShellGPT ассистент в нашем терминале:
- Простые запросы;
- Проведения анализа;
- Выполнение команд оболочки;
- Генерация кода;
- Чат с ботом;
- Режим диалога с ботом (read–eval–print loop), как веб версии.
Простые запросы
Например:
sgpt "Расскажи, что такое терминал в Linux?"
Или:
sgpt "Покажи содержимое конфига сервера ssh"
Хитрец, заставил нас вручную смотреть конфиг. Тем не менее, он указал, где он находится и как его посмотреть. С этим мы еще разберемся🤨. Машина будет выполнять что от нее требуют💪.
Проведения анализа
Для примера, давайте попросим бота проанализировать лог ошибок нашего графического сеанса Xorg. Данный файл является скрытым (начинается с точки) и лежит в домашней директории. С помощью механизма перенаправления (пайплайн) мы передадим вывод содержимого файла боту GPT:
ls -la .xsession-errors
cat .xsession-errors | sgpt "проанализируй вывод лога .xsession-errors"
На что он нам дал подробный анализ. Так можно продолжить, все больше углубляясь в изучение информации по теме. Согласитесь удобно. Не нужно лишних действий по «гуглению». Для этого еще браузер открывать нужно😉.
Но это и не самое интересное. Идём дальше🚶.
Выполнение команд оболочки
Для выполнения команд по запросу, команде sgpt
необходимо передав ключ --shell
. Давайте попробуем попросить бота отобразить только симлинки в директории /etc
:
sgpt --shell "выведи только симлинки в директории /etc"
💡Про симлинки мы говорили туть.
Как видим, мы дали боту описание того, что хотим, чтобы он сделал, а он предложил нам выполнить сгенерированную команду. После ручного подтверждения буквой e
и нажатием Enter
команда выполнилась в терминале. Не дурно🙄.
💡Команда
ls -l / | grep ^l
выводит содержимое каталога /etc и фильтрует вывод с помощью командыgrep
, используя регулярное выражения^
— что означает начало строки, и шаблон фильтра из буквыl
— которая в выводе командыls -l
обозначает файлы-символические ссылки (симлинки).
Давайте всё таки заставим бота вывести серверный конфиг программы SSH (не забываем про ключ --shell
):
sgpt --shell "Покажи содержимое конфига сервера ssh"
Ну вот. Совсем другое дело. Сам придумал, сам выполнил. Главное не увлекаться отдавая под контроль бота свой компьютер. А то еще установит на неё Windows🤷♂️.
Давайте рискнем и попросим бота обновить кэш пакетов и установить нам программу, например консольный редактор кода Neovim:
sgpt --shell "Обнови кэш и установи Neovim"
И запустить его:
sgpt --shell "Запусти Neovim"
Он таки это делает😮.
На самом деле возможности бота по использовании его в качестве ассистента в командной строке ограничиваются лишь вашей фантазией и иногда корректностью генерируемых им команд. Которые обязательно нужно проверять, перед их выполнением.
Аналогичным образом бот может формировать и выполнять команды по запуску docker контейнеров, составлять curl
команды с переданными боту данными в формате json, редактировать видео/аудио файлы с помощью консольной утилиты ffmpeg
, работать с файлами в нашей системе и многое другое.
Генерация кода
Для генерации кода с помощью ShellGPT используется ключ --code
. Давайте попросим его сформировать последовательность Фибоначчи от 1 до 50 с помощью двух способов: Bash и Python. Просим:
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50"
sgpt --code "Python скрипт последовательности Фибоначчи от 1 до 50"
Данные можно выводит в файл с помощью механизма перенаправления:
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50" > fib.sh
sgpt --shell "Сделай файл fib.sh исполняемым и запусти его"
Точно не помню, как правильно считать последовательность Фибоначчи, с 0 или с 1, но как по мне, это наглядный пример функциональности бота.
Давайте попросим его добавить комментарии для каждой строчки нашего fib.sh
:
cat fib.sh | sgpt --code "Добавь комментарии для каждой строки скрипта"
Чтож… Круто! Идём дальше.
Чат
Чат — это функция бота GPT, которой я пользуюсь чаще всего.
Для использования чата с ботом в командной строке необходимо добавить ключ --chat
, а также указать уникальное название сессии чата. В файлах кэша с этим названием будет храниться наша переписка с ботом. Пример:
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 имя_сессии
:
sgpt --list-chats
sgpt --show-chat session1
Вообще у команды sgpt
очень удобная и красивая справка. Получить ее можно передать ключ --help
:
sgpt --help
Стоит упомянуть возможность комбинирования ролей бота. Например, чтобы улучшить генерацию кода, можно использовать историю чата с помощью --chat имя_сессии
и затем --code
для генерации кода и т.д. Такой подход справедлив и для роли --shell
. Пост получается большим, не будем сильно углубляться. В конце поста вы всегда найдете ссылки на источники.
Режим диалога (read–eval–print loop)
У ShellGPT есть режим чата в реальном времени, только в консоли. Называется этот режим repl (read–eval–print loop).
sgpt --repl session_2
Как видите, после выполнения команды мы перешли в интерактивный режим общения с ботом. Тут можно писать текст не используя кавычки. Довольно удобно. Чтобы выйти из этого режима используйте сочетания клавиш Ctrl+c
или Ctrl+d
.
По умолчанию режим --repl
использует роль chat, и задействует одни и те же названия сессий. Чтобы перейти к диалогу относительно ролей --shell
или --code
, необходимо их просто указать:
sgpt --repl session_3 --shell
sgpt --repl session_4 --code
Как видите, контекст беседы успешно работает.
Короткие alias для удобства
Давайте сделаем короткие alias
(псевдонимы команд) для бОльшего удобства использования бота.
Открываем на редактирование файл конфигурации оболочки, в моём случае Zsh:
nvim ~/.zshrc
И добавляем:
# ShellGPT aliases
alias G="sgpt --chat temp"
alias Gs="sgpt --shell"
alias Gc="sgpt --code"
alias GG="sgpt --repl temp"
Затем сохраняем файл и закрываем редактор.
Теперь реинициализируем нашу оболочку и затем командой alias
выведем наши добавления:
exec zsh
alias | grep '^G'
Проверяем:
G 'Как дела?'
Gs 'Найди исполняемый файл программы firefox'
Gc 'Напиши цикл bash для переименования файлов в текущей директории'
Прекрасно, работает. Попробуем режим repl:
GG
Отлично, теперь удобно обращаться к боту с помощью коротких команд:
G "текст_запроса"
— запрос в режиме чата:--chat
Gs "текст_запроса"
— запрос в режиме командной оболочки:--shell
Gc "текст_запроса"
— запрос в режиме генерации кода:--code
GG
— переход в режим диалога:--repl
💡Если вы используете bat для подсветки синтаксиса вывода в терминале, то
alias
генерации кода можно переделать в функцию, с удалением первой и последней строки в режиме кода (разметка markdown в Ollama):Gc() { echo "" sgpt --code "$*" | sed '1d;$d' | batcat --language=sh --paging=never --style=plain echo "" }
Выглядеть это будет примерно так:
Gc bash скрипт периодической проверки доступности порта 8080
Терминал с чат-ботом ChatGPT в виде отдельного приложения
Теперь давайте сделаем отдельное приложение для общения с ботом в режим repl. То есть при открытии этого приложения мы будем попадать сразу в режим диалога без ввода каких-либо команд.
Создаём файл .desktop
в директории приложений:
nvim ~/.local/share/applications/shell-gpt.desktop
И наполняем файл таким содержимым:
[Desktop Entry]
Name=ShellGPT
Comment=AI in commandline
Keywords=shellgpt;chatgpt;ollama;
TryExec=gnome-terminal
Exec=gnome-terminal -- sgpt --repl temp
Icon=gnome-robots
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupWMClass=ShellGPT
Сохраняем и закрываем.
Теперь идём в главное меню и набираем в поиске gpt:
Вот он, наш бот🤖. Запускаем его и закрепляем на панели быстрого доступа:

Теперь наш ИИ всегда под рукой. Также к ИИ удобно обращаться с помощью DropDown терминала, например — Guake.
Надеюсь у вас всё получилось, как у меня. Если есть вопросы, обязательно задавайте их в комментах статьи или в нашем чате телеграм😎.
Возможные проблемы
№ 1
Одной из ошибок, с которой я столкнулся это лимит кэша запросов к чату:

Избежать проблемы можно несколькими способами:
- Вместо уникальных идентификаторов сессий использовать специальный временный:
temp
- Удалить файлы кэша существующих чатов, список и местоположение которых можно узнать так:
sgpt --list-chats
- Увеличить лимит кэша в файле конфигурации, про который мы говорили вначале поста:
~/.config/shell_gpt/.sgptrc
. Параметры:CHAT_CACHE_LENGTH=100
CACHE_LENGTH=100
Если вы увидите 429 ошибку:
это означает что срок действия вашего доступа к API закончился и его необходимо приобретать 😔. Ох уж эти проприетарные сервисы..
№2
Назойливое уведомление после каждого запуска ShellGPT:
Оно появляется при использовании локальных моделей.
Убрать его можно изменив уровень логирования прокси litellm с помощью системной переменной. Например так:
echo 'export LITELLM_LOG="ERROR"' >> ~/.zshrc
source ~/.zshrc
Послесловие
Сегодня мы с вами узнали, как интегрировать прогрессивного ИИ ассистента ChatGPT/Ollama с помощью программы ShellGPT и её утилиты командной строки sgpt
.
Выполнили установку утилиты, изучили её файл конфигурации и режимы работы. Составили отдельные псевдонимы (alias
) команд для быстрого доступа к боту из терминала, а также сделали отдельное приложение для общения с ботом в отдельном окне в режиме реального времени (repl).
Еще раз прошу обратить внимание, что программа ShellGPT — по сути является консольным клиентом для подключения по API онлайн платформе OpenAI или локальной Ollama.
Успехов вам в изучении новых технологий!