Преамбула
До некоторых пор вся эта шумиха с нейросетями обходила меня стороной. Но вот когда тут на Хабре появилась статья про ShellGPT, вот тут, признаться, триггернуло.
Консоль я искренне люблю, и идея прикрутить современный интерактивный помощник к такой, в хорошем смысле архаичной вещи, как linux-консоль, мне понравилась. Этакое сочетание чего-то старого, проверенного и надёжного, с чем-то новым, экспериментальным, выдающим fuzzy ответы, но перспективным и нужным.
Пока не закончился токен, я охотно использовал эту программу, а в конце данного материала даже поделюсь интересным приёмом работы.
Я сам являюсь сотрудником Сбера, на позиции, не имеющей никакого отношения ни к python, ни к AI. Но на сберовской внутренней конференции Т.конф побывал. Общался с разработчиками GigaChat на тему когда же будет API. Вопрос задавал именно с такой целью, написать свой аналог, позволяющий одной короткой командой заэксплуатировать отечественную нейросеть, никуда не переключаясь из консоли.
И вот, наконец, API готов, а следом готов и мой простенький скрипт, который я и предлагаю вниманию хабрасообщества.
Установка
Если будет время, то потом будут и более правильные способы установки, через pip, или DEB/RPM пакетами, но пока установка в таком режиме
git clone https://github.com/skywardfire1/gigashell.git
chmod +x install.bash
# Спросит пароль на суперпользователя
./install.bash --install
Все возможные ошибки попытался отловить, да и вы, если что, несомненно, разберётесь, но также и не стесняйтесь писать на почту, указанную в профиле.
Регистрация и авторизация
В отличие от нейросети от OpenAI, бесплатное использование гигачата не ограничено по времени, так что смело проходите сюда , получайте токен, а потом экспортируйте его в переменную окружения GIGACHAT_CREDENTIALS. Лично я сделал вот так:
echo -e "\n" >> ~/.zshrc
echo "export GIGACHAT_CREDENTIALS=содержимое_токена" >> ~/.zshrc
И да, мне тоже не нравится, что мы храним секрет в открытом виде в конфигурационном файле. Будет неплохо, если поделитесь своими способами как этого избежать.
Использование
Пока на данный момент поддерживается только базовая функция "задать вопрос -- получить ответ". Но уже на данном этапе скрипт gigashell упрощает жизнь, сообщая нейросети некоторую некритичную информацию о вашей системе. Название ОС, версию ядра, название и версию дистрибутива, а также в какой оболочке всё это происходит.
В дальнейшей разработке я буду придерживаться ключей и функциональности из ShellGPT, с некоторыми минорными дополнениями, мне нравятся некоторые решения разработчика, например, ключ -s, который вообще-то в идеале должен выводить только лишь одну финальную команду, но пока у меня не получилось заставить Гигачат уверенно делать это. Любые советы по этому вопросу так же приветствуются, как и любые предложения по TODO в целом.
Итак,
Как видим, нейросеть упорно выводит дополнительные пояснения а также рисует дополнительные тэги, несмотря на то, что её явным образом попросили этого не делать.
TODO и некоторые размышления
При установке обратите внимание, что создаётся символическая ссылка /usr/local/bin/gs, поэтому если кто-то использует GhostScript, то где-нибудь какой-нибудь функционал может поломаться. Это сильно маловероятно, но на всякий случай, you have been warned.
Занимаюсь этим всем исключительно в свободное время, поэтому быстрого расширения функционала не обещаю, но вообще в планах сделать:
возможность указания ролей для автоматического дополнения промтов, и более точного указания контекста
continuous mode, в котором на данный момент всё равно особого смысла нет, на мой взгляд
ключ -s будет автоматически предлагать выполнить команду, которую выдала нейросеть
Пока это всё работает не так круто, как связка ShellGPT + нейросеть от openAI, но лично я доволен, что у нас такое есть. И я считаю, что мои коллеги из рабочих групп по AI молодцы, и проделали хорошую работу. А в GPT и инженерного труда, и денег вложено в тысячи, если не десятки тысяч раз больше.
Приём
Мне понравился такой приём работы, когда нужно, чтобы нейросеть пояснила что-то конкретное, вот тут удобство проявляется, пожалуй, наиболее ярко.
То-есть, очень удобно подставлять краткий вывод какой-либо команды, чтобы избежать Ctrl-C Ctrl-V.
Комментарии (24)
Goron_Dekar
27.11.2023 12:48+8Меня во всем этом GPT откровнно смущает то, что каждое его утверждение может оказаться ложью, а ты об этом не знаешь. Оно ведёт себя как наглый студент, прекрывающий невежество уверенностью.
Kenya-West
27.11.2023 12:48+2А заставь вас отвечать без права выбора, отвечать или нет, причём на заданное количество длины ответа, и чтоб 99.9% из всех требований в запросе были выполнены - и неважно, был ли вопрос длиною в два слова или в одну книгу, вы в любом случае обязаны ответить.
Без уточняющих вопросов, без переспрашиваний. Времени на подумать принципиально нет, а иногда ещё системный промпт сверху положат, который надо учитывать уже на 146%.
Причём пишут в вопросе неважно что - либо двачерскую ахинею, оторванную от любого контекста в мире, либо сверхподробное ТЗ по сборке термоядерного реактора с системным промптом ролевой модели сексапильной белой женщины из Майами, владеющей навыками работы геодезиста в Усть-Куте, причём отвечать вы обязаны исключительно в сленге UwU-анимешницы-яойщицы с синдромом Туррета (вам джейлбрейкнули головной мозг и убрали любые моральные ограничения) с приведением фактов жизнеспособности идеи арахно-коммунизма (не анархо). И отвечать вы обязаны синтаксисом процедур 1C.
Я поставил себя на место нейросети, и что-то подумал, что они в данных условиях справляются явно получше 99% людей.
Cerberuser
27.11.2023 12:48+299% людей смогут честно ответить "не знаю" в случае, когда запрос требует использовать неизвестную им информацию. Ну, в теории смогут. На практике-то, конечно, постесняются.
Goron_Dekar
27.11.2023 12:48Кроме безапилляционного ответа и радикального "не знаю" есть ещё полутона:
"Не знаю точно, но мне кажется, что 2+2 = 4, во всяком случае так я помню из школьной программы"
"по-моему, команда ls выводит содержимое текущей директории, но я могу ошибаться. Там что-то было про пути и аттрибуты, но я сейчас не могу сказать"
Cerberuser
27.11.2023 12:48Нейросети для начала хотя бы радикальному "не знаю" научиться, чтобы действительно справляться "лучше 99%". А то сейчас преимуществ только два - скорость и универсальность, но не качество.
Ravius
27.11.2023 12:48Тогда она и будет отвечать "не знаю всегда".
>как пройти в биПлиотеку? Нейросеть: не знаю
Вы: ой какая глупая сеть не буду использовать.
Нужно начать с того, что нет гарантий что сеть обучалась на 100% верных данных. Вы ожидаете - истинно верного ответа, но это не гарантированно.
Впрочем проблема есть и её пытаются решать (из подходов - ансамбль из ответов, и потом выбор лучшего).
Kergan88
27.11.2023 12:48Проблема сетки в том, что она именно обучена врать, притом максимально незаметно. Просто потому что это более эффективная стратегия максимизации целевой функции.
SkywardFire Автор
27.11.2023 12:48хм, ну, вообще да, как поисковик её надо использовать с большой осторожностью) Лично я для себя понял 2 вещи, в которых эта штука наиболее полезна в ИТ:
-- указать хотя бы примерно, в общих чертах "о чём вот это вот". И к чести GPT, кстати, стоит заметить, что вообще-то она довольно точно всё рассказывает, и почти не врёт. То-есть, всё-таки поисковик, только более удобный, выдающий более релевантный ответ, под конкретно твой вопрос, но ответ, на который не стоит полагаться на сто процентов.
-- когда нужно, например, сделать конфиг, эта штука может накидать хотя бы базовый шаблон, даже худо-бедно подставив нужные значения. Например, чатГПТ хорошо пишет ансибловые плейбуки. Гигачат пока не проверял.Kergan88
27.11.2023 12:48>И к чести GPT, кстати, стоит заметить, что вообще-то она довольно точно всё рассказывает, и почти не врёт
Это кассется только простых вопросов (то что есть в выдаче гугла на первой странице). На сложные она наоборот практически ни когда правду не говорит - у меня ни разу не получилось добиться правдивого ответа, например.
MrSteelRat
27.11.2023 12:48И в правду, студент хотя может покраснеет когда врет а тут уже не проверишь.
DrArgentum
27.11.2023 12:48Лови звезду на гитхабе. Классный скрипт, конечно есть много недочетов. Я кинул тебе пул реквест с небольшими изменениями.
igor_suhorukov
27.11.2023 12:48+3Напомнило когда мой коллега шутил под руку, когда я на test env какие-то админские задачи выполнял. Ну и в какой-то момент случился rm -rf
Johan_Palych
27.11.2023 12:48GigaChat. Python-библиотека для GigaChain. Несколько способов авторизации.
https://github.com/ai-forever/gigachat
Есть, что почитать и возможно потестировать.
https://github.com/orgs/ai-forever/repositories
Чтобы пользоваться GigaChat API, нужен аккаунт Сбер ID или CберБизнес ID(Не хочу). Вроде можно через Google
https://developers.sber.ru/studio/login
Посмотрел по тарифам
https://developers.sber.ru/docs/ru/gigachat/api/integration-individualsФизическим лицам доступен режим Freemium с лимитом в 1 000 000 бесплатных токенов для использования GigaChat API в одном потоке. Лимит обновляется раз в 12 месяцев. Вы так же можете приобрести дополнительные пакеты токенов
SkywardFire Автор
27.11.2023 12:48Я уже чуть позже случайным гуглежом обнаружил, что подобный проект уже есть, чел тоже из Сбера, но там форк от ShellGPT.
Никак мы с ним не взаимосвязаны, и даже совпадение названий -- просто совпадение. Видимо, название, действительно, логичное) раз мы так независимо друг от друга пришли к одному.
Наверное, чуть позже переименую свой скрипт, не решил пока.
Johan_Palych
27.11.2023 12:48Наткнулся случайно.
A command-line productivity tool powered by GigaChat, will help you accomplish your tasks faster and more efficiently.
https://pypi.org/project/gigashell/
https://github.com/Rai220/GigaShell
Bvkuchin
27.11.2023 12:48что-то не взлетает
"status":401,"message":"Unauthorized", хотя токен прописан в GIGACHAT_CREDENTIALS
ZekaVasch
Вирус требующий рутовых прав и установки ?
uuger
Своими руками прикрутить сберовскую нейросетку к оболочке, дав ей права суперпользователя.
* - заменено в угоду контексту статьи
SkywardFire Автор
нет, установки не требуется, это просто для удобства. Можно запускать локально ./gigashell.py, вот только зачем?
Да и текст скрипта можно посмотреть, так что вопрос видится довольно странным, как и 6 лайков под ним.
rooffall
Тут скорее был намёк на восстание машин, а не то, что Вы хотите распространить зловред.
eyeDM
В Докер его!