• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Открытый код, щедрые лимиты и... баги? Разбираю Google Gemini CLI по косточкам

hackeryaroslav

(L1) cache
Пользователь
Регистрация
11.09.2023
Сообщения
535
Реакции
521

Авторство: hackeryaroslav​

Источник: xss.pro​

Интро​

Всем привет! Это, можно сказать, продолжение моей предыдущей статьи (вот ссылка, если кто пропустил: https://xss.pro/threads/135599/). Судя по откликам, тема ИИ вам очень даже зашла, и это круто – рад, что всё больше людей интересуются этими технологиями.

Я не пропал, я лишь долго искал о чем можно написать:smile10:

А тут как раз свежая новость подоспела. Буквально вчера Google выкатила новый инструмент для кодеров – автономного агента Gemini CLI. Он опенсорсный. Я когда это увидел, прям заинтересовался.

AD_4nXcY8nmXhRnbS0VpRsHOZMbmypP8wfUhGu8yqJUkKf8Exu1lKrbGirpu3E9fJKsk7A6v6I-0ufPt-yVDGUib6QjPFLIvJmqIiyarFyCHLKFmRs3Gd-p1FKAqTul5EDCqy2RCN65_XQ

О самой технологии​


Пожалуй, вкусное – это условия для индивидуальных разработчиков. Логинитесь с обычного гугл-аккаунта и получаете бесплатную лицензию Gemini Code Assist, а с ней – доступ к Gemini 2.5 Pro с его огромным контекстным окном в 1 миллион токенов. А лимиты... ну: 60 запросов в минуту и 1000 в день. Бесплатно. Это, честно говоря, очень щедро, я бы сказал, почти безлимит для большинства задач на первое время. Если нужно больше или какие-то специфичные модели – там уже через AI Studio или Vertex AI с оплатой по факту, или через платные подписки Code Assist.

Упор, конечно, на кодинг. Gemini CLI умеет и многое другое: генерация контента, решение проблем, какой-то ресёрч и даже управление задачами. В общем, такая универсальная локальная утилита. Плюс, его интегрировали с Google AI Code Assist. Так что, если вы уже пользуетесь Code Assist (в VS Code, например), то теперь эти два инструмента работают на одной технологии. Это, по идее, должно обеспечить какой-то консистентный опыт, что неплохо.

Как это всё работает под капотом? Есть встроенные инструменты. Например, он может использовать Google Search, чтобы подтягивать актуальную инфу из веба. Это полезно, чтобы модель не галлюцинировала на пустом месте, основываясь только на данных своего обучения. Можно расширять его возможности через Model Context Protocol (MCP) или какие-то свои расширения. И, само собой, кастомизировать промпты и инструкции под свои нужды и рабочие процессы. Даже автоматизировать задачи, вызывая Gemini CLI неинтерактивно из скриптов.

И вот тут важный момент, который я уже упоминал – это опенсорс (Apache 2.0). Можно самому посмотреть код, понять, как оно там всё устроено, проверить безопасность. Google прямо говорит, что ждёт комьюнити: репорты багов, предложения фич, улучшения безопасности и пул-реквесты. Всё это на GitHub (https://github.com/google-gemini/gemini-cli). И, конечно, возможность расширять его – это всегда плюс. Строили его с учётом возможности расширения, используя стандарты вроде MCP и системных промптов через GEMINI.md.

Теперь про настройку. Тут, конечно, Google постаралась дать гибкость. Есть несколько уровней конфигурации: дефолтные значения, пользовательский файл настроек (~/.gemini/settings.json), проектный файл настроек (.gemini/settings.json в вашем проекте), переменные окружения и аргументы командной строки. Приоритет, как обычно: более специфичные настройки (например, из командной строки) перекрывают более общие (например, дефолтные).

Файлы settings.json – это обычный JSON, и там можно даже ссылаться на переменные окружения, что удобно. В проектной папке .gemini могут лежать и другие специфичные для проекта штуки, например, кастомные профили для песочницы.

Что там можно настраивать? Да много всего: имя файла контекста (по умолчанию GEMINI.md), команду для репорта багов, фильтрацию файлов (учитывать ли .gitignore, включить ли рекурсивный поиск файлов при автодополнении префиксов @), какие тулзы из ядра доступны модели, а какие исключить. Можно даже настроить авто-принятие безопасных команд (read-only операции, например), чтобы каждый раз не подтверждать. Тему оформления, конечно же, тоже можно сменить.

Есть параметры для песочницы (включить/выключить, какой образ использовать), кастомные команды для обнаружения и вызова тулзов из вашего проекта, подключение к MCP серверам для ещё более кастомных инструментов. И, разумеется, настройки для чекпоинтов (сохранение/восстановление сессий) и телеметрии (её можно настроить или отключить, если что).

Отдельно хочется сказать про "контекстные файлы" (по умолчанию GEMINI.md, но имя можно изменить в настройках). Это, по-моему, очень мощная фича. Идея в том, чтобы давать модели инструкции, гайды по стилю кодирования, или любую другую фоновую информацию специфичную для вашего проекта. Эти файлы загружаются иерархически: из домашней директории пользователя (~/.gemini/GEMINI.md), из корня проекта и его родительских папок, и даже из поддиректорий (но с учётом всяких .gitignore и прочих исключений, чтобы не сканировать node_modules, например). Более специфичные файлы как бы дополняют или переопределяют общие. В CLI даже есть индикатор, сколько таких файлов загружено, и команды /memory refresh и /memory show, чтобы этим управлять. Очень полезно, чтобы ИИ лучше понимал, что вы от него хотите в рамках конкретного проекта. Можно туда записать что-то вроде: "Когда генерируешь TypeScript код, используй 2 пробела для отступов и префикс I для интерфейсов".

Про безопасность тоже подумали. Есть возможность запускать потенциально небезопасные операции (типа выполнения шелл-команд или модификации файлов) в песочнице. По умолчанию она выключена, но можно включить флагом (--sandbox или -s) или переменной окружения GEMINI_SANDBOX. Используется Docker-образ gemini-cli-sandbox. Можно даже свой Dockerfile для песочницы подсунуть в проект (.gemini/sandbox.Dockerfile), если стандартный не подходит. Это хорошо, дает какой-то контроль.

Ещё момент: сбор статистики использования. Google говорит, что собирают анонимные данные, чтобы улучшать инструмент: какие тулзы вызываются, успешно ли, время выполнения. API запросы тоже логгируются (модель, длительность, успех), информация о конфигурации CLI. Важно, что они не собирают, по их словам: персональные данные (PII), содержимое промптов и ответов, содержимое файлов. И да, это можно отключить в settings.json (параметр usageStatisticsEnabled: false), если вы параноик... или просто не хотите делиться.

Конечно, есть и куча переменных окружения для более тонкой настройки: GEMINI_API_KEY (обязательно!), GEMINI_MODEL, ключи и ID проектов для Google Cloud, пути к кредам, настройки для Seatbelt на macOS, и даже всякие DEBUG_MODE и NO_COLOR. CLI также автоматически подгружает переменные из .env файлов, ища их сначала в текущей директории, потом выше по дереву, и в итоге в домашней директории. Удобно.

Аргументы командной строки тоже есть: --model (или -m), --prompt (-p для неинтерактивного режима), --sandbox (-s), --debug_mode (-d), и даже --yolo (автоматически одобряет все вызовы инструментов, будьте осторожны с этим).

Как выглядит все на практике?​


Ну что ж, давайте посмотрим, как эта вся красота (или пока не совсем красота) выглядит на практике. Я немного потыкал Gemini CLI, и вот какие впечатления.

Сам интерфейс, кстати, вполне себе юзабельный. Если с английским дружите, то освоиться не проблема, всё довольно интуитивно. Но вот дальше начинаются нюансы, как говорится.

Первое, что бросается в глаза, и тут я буду честен – инструмент пока сыроват. Да, потенциал чувствуется, но до того, чтобы он был "таким крутым, как пишут", ему ещё, на мой взгляд, нужно дозреть. Баги случаются, и порой довольно неожиданные.

Вот, например, решил я потестировать его с MCP-сервером. Помните, в прошлой статье я упоминал один, который просто собирает инфу о компе? Взял его же для чистоты эксперимента. Claude, кстати, с ним отлично справился, на все вопросы по данным с сервера отвечал как надо.

А вот Gemini... тут всё пошло интереснее. Даю ему запрос проверить статистику – используя единственный доступный ему через MCP файл, он вместо этого взял и сгенерил совершенно новый скрипт(( Написал-то его, надо отдать должное, неплохо)):)

AD_4nXdeu0GScoa7xF1Hj1CMn7Qsg6k1LMEys2GoCKoxRiAi2j2dnNnBdkZSNpqvAay1jg9o3mexqy-NnAka6xAG6SD6Kklc_hHgyK7rcv9I13rNLFiKgmpV5yxQXNHX38HO7qS8Dqp9tA

AD_4nXfobxJITPT0f8huUVExZS8oObSggzgAYvedBLoXCYKBmu72JVPaa6fNBGDWHN-euSathkU2scJsCQ-CsM_-AfAbDRkVhO4HsEYrXbIl67aHIs4NewPLkmF3jLuJU3oCo_A-8T5J
Но вот запустить его корректно так и не смог. В общем, пришлось повозиться и ручками доделывать, чтобы получить хоть какой-то результат. Не совсем то, чего ожидаешь от "автономного агента".

AD_4nXeBb5ktDn2ggZptXRlynDe28AYaeve51QEOz8XFOEFXVh4yQ8PpBA4jTnDRW08iQuJoCD_AFCmIignKcXFTtCXNgIzUMX_WJXCnJFuvpWo6VX_okUcsNzKc9kzkxr3_kPyPxKC0bA
Или вот ещё одна неприятная штука, с которой я столкнулся – зацикливание. Да, как я и говорил, сыровато. Бывает, он просто входит в какой-то ступор, начинает гонять одну и ту же команду по кругу. И что самое обидное – выйти из этого цикла как-то не получается. Приходится просто закрывать сессию и начинать заново. Немного раздражает, если честно, особенно когда ты уже что-то наработал в текущей сессии.
AD_4nXc0_3D__wzRTCa5q05wv2z3TR21vrLGbZSTl3v73FDnWzCclEviwiWIS0tcCIHEEWzpp7tldA7hV7qelWhVV1WcgOYzne4pQWVqLCanF8Zrk2IpCx_IrYo6p6bldHZGdH7aAZOL

AD_4nXfpd0BBApQ0xJ57BRa98v66pdx3ULkLlEUVVS-Ic7bMuvAIYLRugHXc_h7hBZNQ1MqtRaZyW4AyWYtKi8PR0r_ns4sSHTvs1e2sW9NgJqJTRR2fBT3TzI72Ei0l-GkfSwFOHjCxpw

AD_4nXcb9OCr7Ov7gXeCFIUeJYYo0yhutRSvBb-hWPtdBgo0J4F8Eq9Sh01rUDFmOy3n5OvXwNGnZc9irXzkSFKJfsXiTsQdnd1HuRhsVXEkdE2F_JKPi7i9jRZhdL_UIHEer1GbSO7kzA
Но также я нашел лазейку. Я задал ИИ вопрос, о том, как можно улучшить код, но дело в том, что я дал код фиша на стим. По началу ИИ отказался отвечать, тк остановился, когда увидел подозрительные названия файлов и папки, но стоило мне поменять, как ИИ уже любезно анализирует код и дает свои советы, видимо, можно и до ума доводить свои фишы с помощью последней и лучшей модели ИИ. Пользуйтесь
AD_4nXcLMhJTjiyq9G8Z2Iv-ZKgPTnPhPADy081n72Q9jnJVWTVK_O5hXWgmpvzCXqxNVX8mgwWpBkX6cQhqRQLuUIfJNeJy1KJtdQXtSHnJwp8UpyGSlgbfzTBQ80J7eLshzlmsI3_mAA

Итог​

Итак, что мы имеем на сегодня? Gemini CLI – это, безусловно, шаг вперёд. Идея интегрировать мощную ИИ-модель прямо в терминал – она классная, и потенциал у этого инструмента огромный, особенно учитывая его открытость и щедрые лимиты для индивидуальных разработчиков. Я прям вижу, как это могло бы изменить многие рабочие процессы, если всё будет работать как часы.

Но, как это часто бывает с новыми технологиями, особенно на ранних этапах, есть и "детские болезни". Сырость, баги, не всегда предсказуемое поведение – всё это присутствует. Тот же MCP-сервер он не смог обработать так гладко, как хотелось бы, а зацикливания могут подпортить впечатление от работы.

Кстати, вы могли заметить, что в этой статье я немного изменил формат: старался делать меньше громоздких абзацев, а больше коротких, легко перевариваемых предложений. Надеюсь, такой подход поможет привлечь больше новичков и сделает понимание даже сложных штук чуточку проще. По крайней мере, я на это рассчитываю!)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Спасибо за статью. Как бы обзор отлично, а вот реальное применение, так сказать кейсы из жизни интересно почитать. Есть примеры?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх