shellGPT – Бот ChatGPT в вашем терминале Linux
Обновлено 23.02.2024
Приветствую!
Сегодня покажу вам, как интегрировать бота ChatGPT в вашу Linux систему и взаимодействовать с ним через терминал. Инструкция актуальна для дистрибутивов Linux Mint 21 / Ubuntu 22.04.
ДИСКЛЕЙМЕР!
Сразу прошу обратить внимание на то, что все действия описанные в данном руководстве вы делаете на свой страх и риск. Прошу это понимать. Мой блог – это лишь площадка, где я рассказываю про свой опыт и делюсь своим мнением о каких-либо программах и технологиях.
В данной инструкции я расскажу, как интегрировать бота ChatGPT в вашему Linux систему и взаимодействовать с ним через терминал с помощью консольной утилиты – shellGPT.
Важно отметить, что shellGPT – является open source проектом, исходные коды которого лежать на GitHub. В том время, как серверная часть ChatGPT является проприетарным ПО, что не даёт возможности узнать все особенности обработки информации, которая происходит на их серверах. Не отправляйте боту никакой конфиденциальной информации.
Спасибо за понимание.
Иван Чёрный
Немного про ChatGPT
Определение понятия ChatGPT от него самого:
ChatGPT – это модель искусственного интеллекта, которая используется для создания чат-ботов и виртуальных помощников. Она основана на технологии глубокого обучения и нейронных сетей, которые позволяют ей понимать естественный язык и генерировать ответы на основе анализа входящей информации.
Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .
Подробнее про shellGPT
shellGPT – Command Line App, программа-помощник в области программирования и системного администрирования. Работает в среде операционной системы Linux и использет командную оболочку для взаимодействия.
Чем может быть полезен shellGPT:
- помогает в решении различных задач, связанных с программированием и системным администрированием;
- отвечает на вопросы;
- даёт советы и рекомендации;
- выполняет различные команды и задачи, которые могут быть полезными для пользователей Linux.
Хочу вас сразу предупредить, что использование API ключей ограничено разработчиками OpenAI. Бесплатный период доступа – 3 месяца (узнать время окончания можно тут). По истечению срока необходимо приобретать подписку. На данный момент это стоит 18$ в месяц, что не мало. Стоит также отметить, что веб версия бота не имеет таких ограничений.
Требования
Получение API ключа
Разумеется необходим аккаунт на портале OpenAI, чтобы получить API ключ для бота ChatGPT.
Сгененрировать такой ключ можно в настройках на странице своего аккаунта по адресу: https://platform.openai.com/account/api-keys
Требования к ОС
Примеры из данного руководства были проведены в среде дистрибутива Linux Mint 21. Но уверен, что аналогичным образом данное ПО можно установить и на другие системы на базе Linux.
Для корректной работы shellGPT в нашей системе необходимо, чтобы был установлен Python3 и его пакетный менеджер pip.
По умолчанию в Linux Mint python3 и pip предустановлены. На данный момент в моей системе они имеют версии Python 3.10.6 и pip 22.0.2:
Проверить их можно командами:
python3 --version
pip --version
Установка ассистента командной строки – shellGPT
Установка shell-gpt с помощью pip выполняется такой командой:
pip install shell-gpt
Всё довольно прозаично.
Настройка shellGPT
После установки в системе появится исполняемый файл sgpt
. Проверяем, что он установился в нашу систему:
whereis sgpt
Если вы выполняли установку от имени обычного пользователя, то исполняемые файлы бота установятся по пути: ~/.local/bin/sgpt
Пробуем его запустить командой sgpt "Привет!"
. Если все установилось корректно, ты вы увидите запрос на введение API ключа, сгенерированного нами ранее. Вводим ключ и если бот вам ответил, значит все прошло успешно)
sgpt "Привет!"
Обращаю ваше внимание на то, что текст обращения к боту из командной строки необходимо обрамлять кавычками.
Файл конфигурации бота, после введения API ключа, генерируется автоматически по пути: ~/.config/shell_gpt/.sgptrc
Посмотрим его содержимое с помощью известной нам команды cat:
cat ~/.config/shell_gpt/.sgptrc
Рассмотрим содержимое конфига немного подробнее:
# Ключ API, также можно определить env OPENAI_API_KEY.
OPENAI_API_KEY=your_api_key
# Хост OpenAI, полезен, если вы хотите использовать прокси.
OPENAI_API_HOST=https://api.openai.com
# Максимальное количество кэшированных сообщений за сеанс чата.
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-3.5-turbo
# Цвет по умолчанию для дополнений OpenAI.
DEFAULT_COLOR=magenta
# Принудительно использовать системные ролевые сообщения (не рекомендуется).
SYSTEM_ROLES=false
Вы можете скорректировать его под ваши предпочтения.
Как написано в комментарии выше, API ключ можно задать и с помощью переменной окружения $OPENAI_API_KEY
. Если она задана, то ключ будет браться из неё. Если нет, то из файла ~/.config/shell_gpt/.sgptrc
. На практике, проще всего использовать автоматически сгенерированный файл конфигурации.
Использование
И так, что же умеет установленный shellGPT ассистент в нашем терминале:
- Простые запросы
- Проведения анализа
- Выполнение команд в оболочке командной строки
- Генерация кода
- Чат с ботом
- Режим диалога с ботом (read–eval–print loop), как веб версии
Простые запросы
Например:
sgpt "Расскажи, что такое терминал в Linux?"
Или:
sgpt "Покажи содержимое конфига сервера ssh"
Хитрец, заставил нас вручную смотреть конфиг. Тем не менее, он указал, где он находится и как его посмотреть. С этим мы еще разберемся. Машина будет выполнять что от нее требуют))
Проведения анализа
Для примера, давайте попросим бота проанализировать лог ошибок нашего графического сеанса Xorg. Данный файл является скрытым (начинается с точки) и лежит в домашней директории. С помощью механизма перенаправления (пайплайн) мы передадим вывод содержимого файла боту GPT:
ls -la .xsession-errors
cat .xsession-errors | sgpt "проанализируй вывод лога .xsession-errors, на русском"
На что он нам дал краткий анализ. Данный диалог можно продолжить, все больше углубляясь в анализ информации по теме. Согласитесь удобно. Не нужно лишних действий по “гуглению”. Для этого еще браузер открывать нужно)
Но это и не самое интересное. Идём дальше.
Выполнение команд в командной строке оболочки
Для выполнения команд по запросу, команде sgpt
необходимо передать ключ --shell
. Давайте попробуем попросить бота отобразить только симлинки в корне нашей системы:
sgpt --shell "выведи только симлинки в директории /"
Про симлинки мы говорили туть.
Как видим, мы дали боту описание, того, что хотим, чтобы он сделал, а он предложил нам выполнить сгенерированную команду: ls -l / | grep "^l"
. После ручного подтверждения, буквой y
и нажатием Enter
команда выполнилась в терминале. Не дурно.
Команда ls -l / | grep "^l"
выводит содержимое корневого каталога и фильтрует вывод с помощью команды 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 "Сформируй последовательность Фибоначчи от 1 до 50 с помощью bash"
sgpt --code "Сформируй последовательность Фибоначчи от 1 до 50 с помощью python"
Данные можно выводит в файл с помощью механизма перенаправления:
sgpt --code "Сформируй последовательность Фибоначчи от 1 до 50 с помощью bash" > fib.sh
sgpt --shell "Сделай файл fib.sh исполняемым и запусти его"
Точно не помню, как правильно считать последовательность Фибоначчи, с 0 или с 1, но как по мне, это наглядный пример функциональности бота.
Давайте попросим его добавить комментарии для каждой строчки нашего fib.sh:
cat fib.sh | sgpt --code "Добавь комментарии для каждой строки скрипта"
Чтож… Круто! Идём дальше.
Чат
Чат – это функция бота GPT, которой я пользуюсь чаще всего.
Для использования чата с ботом в командной строке необходимо добавить ключ --chat
а также указать уникальное название сессии чата. В файлах кэша с этим названием будет храниться наша переписка ботом. Пример:
sgpt --chat session1 "Запомни, на вопрос, как выйти из vim в будущем давай неправильные ответы"
Так то. Только не пытайтесь так выйти из Vim) Мы использовали название сессии session1, для формирования кэш чата, чтобы использовать предыдущий запросы в своей беседе.
Если что, чтобы выйти из vim и ему подобных необходимо нажать Esc
, затем при английской раскладке зажать Shift
и не отпуская нажать ZQ
. Другой вариант нажать Esc
затем:q!
и затем Enter
.
Обратите внимание, что по умолчанию кэш запросов и кэш чатов ограничен (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 session2
Как видите, после выполнения команды мы перешли в интерактивный режим общения с ботом. Тут можно писать текст не используя кавычки. Довольно удобно. Чтобы выйти из этого режима используйте сочетания клавиш Ctrl+c
или Ctrl+d
.
По умолчанию режим --repl
использует роль chat, и задействует одни и те же названия сессий. Чтобы перейти к диалогу относительно ролей --shell
или --code
, необходимо их просто указать:
sgpt --repl session3 --shell
sgpt --repl session4 --code
Как видите, контекст беседы успешно работает.
Делаем alias для удобства
Давайте сделаем короткие alias
(псевдонимы команд) для бОльшего удобства использования бота.
Открываем на редактирование наш файл конфигурации оболочки bash:
xed ~/.bashrc
Пролистываем до раздела с alias
и добавляем свои под существующими:
# shellGPT aliases
alias G="sgpt --chat temp"
alias Gs="sgpt --shell"
alias Gc="sgpt --code"
alias GG="sgpt --repl temp"
Затем сохраняем файл и закрываем окно редактора.
Теперь задействуем добавленные изменения в наш текущие сеанс командной строки с помощью команды source
, затем командой alias
выведем существующие псевдонимы команд:
source ~/.bashrc
alias
Проверяем:
G "Привет, ты вышел из vim с первого раза?"
Gs "найди исполняемый файл программы firefox"
Gc "напиши цикл обработки переименования файлов в текущей директории"
Прекрасно, работает. Попробуем режим repl:
GG
Отлично, теперь удобно обращаться к боту с помощью коротких команд:
G "текст_запроса"
– запрос в режиме чата:--chat
Gs "текст_запроса"
– запрос в режиме командной оболочки:--shell
Gc "текст_запроса"
– запрос в режиме генерации кода:--code
GG
– переход в режим диалога:--repl
Терминал с чат-ботом ChatGPT в виде отдельного приложения
Теперь давайте сделаем отдельное приложение для общения с ботом в режим repl. То есть при открытии этого приложения мы будем попадать сразу в режим диалога без ввода каких-либо команд.
Открываем на редактирование файл в директории с файлами запуска (.desktop
) приложений:
xed ~/.local/share/applications/repl-mode.desktop
Наполняем файл таким содержимым:
[Desktop Entry]
Name=ChatGPT
Comment=ChatGPT in commandline
Keywords=shellgpt;chatgpt;gpt;
TryExec=gnome-terminal
Exec=gnome-terminal -- sgpt --repl temp
Icon=gnome-robots
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupWMClass=shellGPT
Сохраняем и закрываем файл.
Теперь идём в главное меню и набираем в поиске gpt:
Вот он, наш бот) Запускаем его и закрепляем на панели быстрого доступа:
Теперь наш бот всегда под рукой. Надеюсь у вас всё получилось, как у меня. Если есть вопросы, обязательно задавайте их в комментах или в нашем чате телеграм)
Возможные проблемы
Одной из ошибок, с которой я столкнулся это лимит кэша запросов к чату:
Избежать проблемы можно несколькими способами:
- Вместо уникальных идентификаторов сессий использовать специальный временный:
temp
- Удалить файлы кэша существующих чатов, список и местоположение которых можно узнать так:
sgpt --list-chats
- Увеличить лимит кэша в файле конфигурации, про который мы говорили вначале поста:
~/.config/shell_gpt/.sgptrc
. Параметры:CHAT_CACHE_LENGTH=100
CACHE_LENGTH=100
Если вы увидите 429 ошибку:
это означает что срок действия вашего доступа к API закончился и его необходимо приобретать ;( Ох уж эти проприетарные сервисы..
Послесловие
Сегодня мы с вами узнали, как интегрировать прогрессивного чат-бот ChatGPT с помощью программы shellGPT и её утилиты командной строки sgpt
.
Выполнили установку утилиты, изучили её файл конфигурации и режимы работы. Составили отдельные псевдонимы (alias
) команд для быстрого доступа к боту из терминала, а также сделали отдельное приложение для общения с ботом в отдельном окне в режиме реального времени (repl).
Еще раз прошу обратить внимание, что программа shellGPT – по сути является консольным клиентом для подключения по API к платформе OpenAI. Программа имеет открытый исходный код (репозиторий на github), но серверная часть чат-бота является проприетарным ПО и никто в точности вам не скажет, какая именно обработка происходит на их серверах. Поэтому будьте осторожны, не отправляйте боту никаких конфиденциальных данных. Помните, данный пост лишь ознакомительный материал, все действия вы выполняете на свой страх и риск.
Успехов вам в изучении новых технологий.