ShellGPT — ИИ ассистент в вашем терминале Linux

ShellGPT — ИИ ассистент в вашем терминале Linux

Обновлено 04.08.2025

Приветствую!

В данной инструкции я расскажу, как интегрировать ИИ ассистента на основе ChatGPT/Gemini/Ollama в вашу Linux систему и взаимодействовать с ним в терминале с помощью консольного приложения — ShellGPT.

Инструкция актуальна для дистрибутивов Linux Mint 22 / Ubuntu 24.04 / Debian 12.

Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.

⚠️Перед началом важно отметить, что ShellGPT и Ollamaopen source проекты, исходные коды которых размещены на GitHub. В том время, как серверная часть бота ChatGPT/Gemini являются проприетарным ПО, что не даёт возможности узнать все особенности обработки информации, которая происходит на их серверах. Не отправляйте сторонним сервисам никакой конфиденциальной информации.

TLDR для Ollama

Подготовка:

# установка необходимых утилит
sudo apt update && sudo apt install -y curl pipx

# установка Ollama
curl -fsSL https://ollama.com/install.sh | sh

# загрузка модели ~10 гб
ollama pull deepseek-coder-v2:latest

# установка ShellGPT
pipx install 'shell-gpt[litellm]'

Далее инициализируем ShellGPT:

sgpt "ping" 2> /dev/null

На запрос API ключа вводим любую строку, главное чтобы значение не было пустым и нажимаем Enter.
Команда завершится ошибкой — это ожидаемое поведение при использовании Ollama.

Затем открываем на редактирование конфиг ShellGPT:

nvim ~/.config/shell_gpt/.sgptrc

Редактируем следующие параметры:

# любая строка, значение не должно быть пустым
OPENAI_API_KEY=some_random_string
# отключение специфики для openai
OPENAI_USE_FUNCTIONS=false
# использование LLM прокси - litellm
USE_LITELLM=true
# определение модели по умолчанию
DEFAULT_MODEL=ollama/deepseek-coder-v2
# выбор темы оформления (по умолчанию dracula)
CODE_THEME=nord-darker

Запускаем диалог с моделью:

sgpt --repl test_session

Это интерактивный режим, где происходит общение с ботом в формате чата с сохранением контекста.

Опционально: при наличии свободных ресурсов для ускорения отклика модели можно добавить автозагрузку её параметров в память (без выгрузки по таймауту):

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. Про настройку такого прокси будет ниже.

Немного про Ollama

Позвольте без лишних слов отправить вас в отдельную статью на сайте🙃: Ollama — Локальный ИИ на вашем Linux ПК🦙.

Отмечу только, что в качестве локальной модели используется deepseek-code-v2.

Немного про ShellGPT

ShellGPT — Command Line App, программа-помощник в области программирования и системного администрирования. Работает в среде операционной системы Linux и использует командную оболочку для взаимодействия: отвечает на вопросы, даёт советы и рекомендации, выполняет различные команды и т.д.

Форматирование вывода ShellGPT ограничено возможностями терминала. Тем не менее вот, как выглядит одна из последних версий программы (да, это терминал🔥):

Работа ShellGPT с Ollama, модель deepseek-coder-v2.

Подготовка

Примеры в этом руководстве выполнены в дистрибутиве 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.

Если используется Gemini

Как уже говорил ранее, для использования ShellGPT в связке с Gemini необходимо доустановить прокси, который будет обрабатывать запросы в формате OpenAI и перенаправлять их Google Gemini.

Прокси устанавливается с помощью npm и запускается от в контексте обычного пользователя на порту 8080:

# установка npm
sudo 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.

Об успешном запуске будет свидетельствовать вывод:

> start
> node node.mjs

Listening on: { address: '::', family: 'IPv6', port: 8080 }

В соседнем терминале проверяем работу сервиса:

curl -I http://localhost:8080

ss -tlnap | grep 8080

В ответ должны получить:

HTTP/1.1 404 Not Found
access-control-allow-origin: *
content-type: text/plain;charset=UTF-8
Date: Mon, 04 Aug 2025 09:47:09 GMT
Connection: keep-alive
Keep-Alive: timeout=5

---

LISTEN   0   511    *:8080   *:*   users:(("node",pid=15990,fd=21))

Сервис работает 👍. Настраиваем автозапуск прокси с помощью Systemd:

systemctl --user edit --full --force openai-gemini.service

Наполняем пользовательский юнит:

[Unit]
Description=Openai-gemini proxy service
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/%u/.local/node_modules/openai-gemini
ExecStart=/usr/bin/npm run start
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

Активируем автозапуск при входе на рабочий стол и проверяем статус:

systemctl --user enable --now openai-gemini

systemctl --user status openai-gemini

journalctl --user -fu openai-gemini

Установка и настройка ShellGPT для использования с ChatGPT/Gemini

Получение API токена для ChatGPT

Разумеется, для использования ChatGPT необходим аккаунт на портале OpenAI, чтобы получить API ключ для бота ChatGPT.

⚠️Хочу вас сразу предупредить, что использование API ключей ограничено разработчиками OpenAI. Бесплатный период доступа — 3 месяца после регистрации аккаунта (узнать время окончания можно тут). По истечению срока необходимо приобретать подписку. На данный момент это стоит ~20$ в месяц, что не мало. В качестве бесплатной и конфиденциальной альтернативы рекомендуется использовать ShellGPT совместно с Ollama (читайте ниже).

Сгененрировать такой ключ можно в настройках на странице своего аккаунта по адресу: https://platform.openai.com/account/api-keys

Получение API токена для Gemini

В отличие от ChatGPT у сервиса Gemini бесплатный API хоть и с ограничениями по количеству запросов, но для личного использования или небольшого пет-проекта — этого более, чем достаточно.

Получить API токен Gemibi можно в соответствующем разделе Google AI Studio: https://aistudio.google.com/apikey:

Установка ShellGPT

После генерации ключа выполняем установку shell-gpt с помощью pipx:

pipx install shell-gpt

Тут всё довольно прозаично😏.

После установки в системе появится исполняемый файл sgpt. Проверяем, что он установился в нашу систему:

whereis sgpt

Пробуем запустить ассистента командой sgpt "Привет!". Если все установилось корректно, ты вы увидите запрос на введение API ключа, сгенерированного нами ранее. Вводим ключ и если бот вам ответил, значит все прошло успешно👌:

sgpt 'Привет!'

💡Обращаю ваше внимание на то, что текст обращения к боту из командной строки необходимо обрамлять кавычками..

При первом использовании ShellGPT попросит вас ввести API ключ. Вводим ключ от нужного сервиса: ChatGPT или Gemini.

☝️В случае Gemini команда звершится ошибкой. Это ожидаемое поведение, ведь нужно перенаправить данные в прокси. Это далее.

Файл конфигурации 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
# 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, то его желательно сперва удалить:

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.

Успехов вам в изучении новых технологий!

Не забывайте про нашу телегу📱и чат💬
Всех благ✌️

That should be it. If not, check the logs 🙂

Полезные источники

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии