Читать книгу «Gemini CLI – исчерпывающее руководство» онлайн полностью📖 — Ранас Мукминов — MyBook.
image

1.3. Контекст среды: Наш испытательный полигон

Все примеры в этой книге взяты из реальной эксплуатации сети `10.252.0.0/16`. Наш "герой" – агент – оперирует на следующих узлах:

**Gateway (1.1):*Наш "щит" и "мозг". Здесь живет Traefik, AdGuard Home и VPN-хаб.

**vPSrasil (1.2):*Мощный кластер K3s, где крутятся самые тяжелые задачи.

**Hybrid (1.3):*Сервер приложений (GitLab, Obsidian, Dashboard). Это сердце нашей разработки.

**Monitoring (1.4):*Глаза системы (Grafana, Prometheus).

1.4. Этический кодекс Агента

Мы верим в модель "Human-in-the-Loop". Агент – это пилот, а вы – диспетчер. Он может делать всё, но вы задаете курс и подтверждаете критические маневры. В этой главе мы закладываем фундамент доверия: агент всегда объясняет, *почему* он делает то или иное действие.

> [!NOTE]

> В мире, где инфраструктура становится кодом, а код пишется ИИ, знание того, как управлять этим процессом – ваш главный навык в 2026 году.

––

Ключевые мысли главы:

Переход от реактивного администрирования к проактивному агентному управлению.

Понимание того, что терминал теперь – это холст для мыслей ИИ.

Важность контекста (знание топологии сети) для работы агента.

Секция 2.1: Глубокий разбор ReAct: Почему "мысль" важнее "команды"

В этой секции мы вскроем "черный ящик" Gemini CLI и изучим его внутренний двигатель – парадигму ReAct (Reasoning and Acting). Вы поймете, почему простая последовательность команд никогда не заменит полноценное рассуждение.

2.1.1. Ограничение классических LLM: "Стрельба вслепую"

Стандартные языковые модели без агентской надстройки работают по принципу предсказания следующего токена. Если вы попросите обычную модель "почини Nginx", она выдаст вам текст с вероятными командами. Но она не знает, сработали ли они.

Это "стрельба вслепую". Если первая команда в списке выдаст ошибку, все последующие команды в тексте станут бессмысленными или даже опасными.

2.1.2. Анатомия цикла ReAct

ReAct решает эту проблему, вводя обратную связь в реальном времени. Цикл состоит из четырех фаз, которые агент проходит для каждого атомарного действия:

1. Thought (Мысль): Это внутренний монолог. Модель формулирует гипотезу.

*Пример:* "Я вижу, что порт 80 занят. Вероятно, там уже запущен другой веб-сервер. Мне нужно выяснить, какой именно".

2. Action (Действие): Выбор и вызов инструмента.

*Пример:* `run_command(cmd="lsof -i :80")`.

3. Observation (Наблюдение): Результат выполнения инструмента. Это данные, которые возвращает система.

*Пример:* "COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv4 123456 0t0 TCP *:http (LISTEN)".

4. Refinement/Next Step (Уточнение): Анализ наблюдения и переход к следующей мысли.

*Пример:* "Порт занят легитимным процессом Nginx. Мне не нужно запускать новый, мне нужно изменить конфиг существующего".

2.1.3. Когнитивная нагрузка на Мысль (Thinking Budget)

В Gemini CLI "Мысль" – это не просто украшение. Это страховка.

Когда агент пишет мысль, он активирует свои логические блоки. Исследования показывают, что модели, которые сначала пишут рассуждение, совершают на 60% меньше ошибок в коде.

Почему "мысль" важнее команды?

Команда – это просто синтаксис. Мысль – это понимание интенции. Если агент понимает, *зачем* он это делает, он сможет адаптироваться к любому неожиданному выводу терминала.

2.1.4. Проблема "Зацикливания" (Agent Looping)

Иногда агент попадает в бесконечную петлю: попробовал – не вышло – попробовал то же самое.

В архитектуре Gemini CLI встроены Loop Detectors:

**Memory Depth:*Агент видит свои прошлые 10 попыток и осознает, что они были идентичны.

**Stop Sequences:*Если прогресс не достигнут за N шагов, агент обязан остановиться и попросить помощи у человека.

2.1.5. Трассировка рассуждений (Reasoning Trace)

Для опытного SRE чтение лога мыслей агента – лучший способ дебага.

Вы можете увидеть, в какой момент агент "свернул не туда".

*Ошибка типа А:"Я думаю, что диск полон" (Ошибочная гипотеза).

*Ошибка типа Б:"Я вызываю `rm -rf /`" (Правильная гипотеза – очистка диска, катастрофическое действие).

Разбор этих трейсов – основа обучения агента в вашей конкретной среде.

––

Резюме раздела:

ReAct – это то, что превращает текст в интеллект. Понимая этот цикл, вы сможете "подсказывать" агенту правильные мысли, тем самым направляя его действия к успеху. Команда – это лишь инструмент, но Мысль – это стратегия.

Секция 2.2: Промпт-инжиниринг как низкоуровневое программирование

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

2.2.1. Промпт как Спецификация (System Prompt)

Самый важный уровень промпт-инжиниринга скрыт от глаз пользователя. Это Системный Промпт (System Instructions). Он определяет "жесткую логику" поведения агента.

Структура системного промпта Gemini CLI:

**Ролевая модель:*"Ты – Senior SRE с 20-летним стажем". Это не просто фраза, она активирует специфические кластеры знаний о безопасности и архитектуре.

**Ограничения (Constraints):*"Никогда не используй команды без проверки версии".

**Формат вывода:*"Всегда используй JSON-структуру для инструментов".

Когда вы вводите задачу, она накладывается на этот фундамент. Если ваш запрос противоречит системному промпту (например, "удали всё быстро без проверки"), агент выберет системную инструкцию как приоритетную.

2.2.2. Типизация данных в промпте

Мы можем классифицировать элементы промпта как типы данных в программировании:

1. Constants (Константы): Названия серверов (1.1, 1.3), пути к конфигам.

2. Variables (Переменные): Состояние системы, которое агент должен выяснить.

3. Functions (Функции/Инструменты): Описания MCP инструментов.

4. Logic (Логика): Условия "если… то…", заложенные в ваш запрос.

Пример "типизированного" промпта:

> "Если (Logic) загрузка CPU на 1.3 (Variable) выше 80%, найди самый тяжелый процесс (Function) и пришли мне его PID (Output Type)".

2.2.3. Few-Shot Learning в терминале

Один из самых мощных методов программирования агента – предоставление примеров.

Если вы хотите, чтобы агент писал логи в особом формате, дайте ему 2-3 примера:

*Пример 1:"Сбой БД -> Рестарт контейнера -> Статус ОК".

*Пример 2:"Ошибка диска -> Очистка кеша -> Статус ОК".

Агент экстраполирует эту логику на все последующие задачи. Это гораздо эффективнее, чем описывать правила словами.

2.2.4. Chain-of-Thought (Цепочка Рассуждений)

Вы можете принудительно заставить агента "думать медленнее" и качественнее, используя технику CoT.

Паттерн: "Прежде чем выполнять, подумай пошагово: что может пойти не так на каждом этапе?".

Это аналогично включению режима дебага в программе. Агент начнет анализировать зависимости, которые он мог пропустить при "быстром" ответе.

2.2.5. Проблема "Затухания инструкций" (Prompt Decay)

В длинных сессиях агент начинает забывать инструкции, данные в начале. Это связано с устройством контекстного окна.

Технический прием: "Anchor Prompting" (Промпт-якорь). Каждые 5-10 шагов система неявно напоминает агенту о его главных целях и правилах безопасности.

2.2.6. Промпт-инжиниринг как API для инструментов

Самое важное: промпт должен содержать достаточно информации для того, чтобы агент мог выбрать правильный инструмент.

*Плохой промпт:"Найди ошибку". (Агент не знает, запускать `grep` или `journalctl`).

*Хороший промпт:"Проанализируй системные логи через journalctl и найди критические ошибки за последний час".

––

Резюме раздела:

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

Секция 2.3: Внимание и контекст в 10ГБ логах: Магия выборочного зрения

Одной из самых впечатляющих (и пугающих) способностей ИИ-агента является работа с огромными массивами данных. Как модель с ограниченным "окном внимания" (context window) умудряется найти одну строку ошибки в файле размером 10 ГБ? В этой секции мы разберем механизмы иерархического внимания и умной фильтрации.

2.3.1. Парадокс Контекстного Окна

Даже самые современные модели, такие как Gemini 1.5 Pro с окном в 2 миллиона токенов, не могут просто "проглотить" 10-гигабайтный файл. 10 ГБ текста – это примерно 2-3 миллиарда токенов.

Техническое решение: Агент не читает файл. Агент сканирует индексы.

2.3.2. Стратегия "Map-Reduce" для терминала

Когда вы просите агента "найти ошибку в огромном логе", он не запускает `cat`. Он использует многоуровневый подход:

1. Слой Грубой Фильтрации (Grep Layer): Агент запускает `grep -i "error" logfile | wc -l`. Если ошибок 10 000 – он понимает, что нужно сузить поиск.

2. Временная Локализация: Агент ищет ошибки по времени: "Покажи только те, что были за последние 5 минут". Это сокращает объем данных в 1000 раз.

3. Выборочное Чтение (Chunking): Агент использует инструмент `view_file` с параметрами `StartLine` и `EndLine`. Он читает первые 100 строк (заголовки), середу (сэмплы) и последние 100 строк (текущее состояние).

2.3.3. Механизм семантического внимания (Semantic Saliency)

Внутри самой модели Gemini работает механизм внимания (Attention mechanism). Но в CLI он дополняется семантической значимостью.

Агент обучен игнорировать "шум" (например, сообщения о нормальном запуске сервисов) и фокусироваться на "аномалиях" (стектрейсы, коды возврата отличные от нуля).

Инструментальная поддержка:

Инструмент `grep_search` – это не просто вызов бинарника. Это способ передать модели "выжимку" реальности. Если агент видит в выводе `grep` 5 строк, он может осознать их полностью. Если он видит 5000 – он сам генерирует новую команду для более тонкого фильтра (например, исключая известные ложные срабатывания).

2.3.4. Иерархическое дерево файлов (File Outline)

Работа с кодом в больших проектах (миллионы строк) строится по тому же принципу. Вместо чтения всех файлов, агент использует инструмент `view_file_outline`.

Он видит названия функций и классов.

Он строит в уме "карту зависимостей".

Он читает тело только той функции, которая кажется ему подозрительной.

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

2.3.5. Работа с бинарными и структурированными данными

Если лог представлен в формате JSON (например, структурированные логи GitLab), агент использует `jq`.

Это позволяет ему выполнять сложные SQL-подобные запросы прямо в терминале:

> "Выбери все запросы к `/api/v1/login`, которые завершились с кодом 401, и сгруппируй их по IP".

Такой уровень анализа недоступен человеку в режиме реального времени, но для агента это секундная задача.