А давайте встроим ии в powershell. Часть вторая. Поисковик спецификаций
В прошлый раз мы увидели, как с помощью powershell можем взаимодействовать с моделью Gemini через интерфейс командной строки. В этой статье я покажу как извлечь пользу из наших знаний. Сегодня мы соберем интерактивный справочник, который на вход будет принимать параметры компонента (марка, модель, категория, артикул и т. п.), а возвращать интерактивную таблицу с характеристиками, полученную от модели Gemini.
Что нам понадобится:
Gemini-CLI
OutConsoleGridView
Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно, смотрите код на гитхабе.
Инженеры, разработчики и другие специалисты сталкиваются с тем, что нужно узнать точные параметры, например материнской платы, автомата в электрощитке или сетевого коммутатора. Наш справочник всегда будет под рукой и по запросу соберет информацию, уточнит параметры в интернете и вернет искомую таблицу. В таблице можно выбрать необходимый параметр/ы и по необходимости продолжить углубленный поиск. В дальнейшем мы научимся передавать результат по конвейеру для дальнейшей обработки: экспорта в таблицу Excel, Google таблицу, хранения в базе данных или передачи в другую программу В случае неудачи модель посоветует, какие параметры надо уточнить. Впрочем, смотрите сами:
Шаг 1: Настройка
Назначение строк:
$env:GEMINI_API_KEY = "..." — устанавливает API ключ для доступа к Gemini AI
if (-not $env:GEMINI_API_KEY) — проверяет наличие ключа, завершает работу если его нет
$scriptRoot = Get-Location — получает текущую рабочую директорию
$HistoryDir = Join-Path... — формирует путь к папке для хранения истории диалогов (.gemini/.chat_history)
$timestamp = Get-Date... — создает временную метку в формате 2025-08-26_14-30-15
$historyFileName = "ai_session_$timestamp.jsonl" — генерирует уникальное имя файла сессии
$historyFilePath = Join-Path... — создает полный путь к файлу истории текущей сессии
Проверка окружения — что должно быть установлено.
Что проверяется:
Наличие Gemini CLI в системе — без него скрипт не работает
Файл GEMINI.md — содержит системный промпт (инструкции для AI)
Файл ShowHelp.md — справка для пользователя (команда ?)
Основная функция взаимодействия с AI.
Задачи функции:
Вызывает Gemini CLI с указанной моделью и промптом
Захватывает все выводы (включая ошибки)
Очищает результат от служебных сообщений CLI
Возвращает чистый ответ AI или $null при ошибке
Функции управления историей.
Назначение:
Add-History — сохраняет пары «вопрос-ответ» в JSONL формате
Show-History — показывает содержимое файла истории
Clear-History — удаляет файл истории текущей сессии
Функция отображения выбранных данных
Задача функции: После выбора элементов в Out-ConsoleGridView показывает их в консоли в виде аккуратной таблицы, чтобы пользователь видел, что именно выбрал.
Основной рабочий цикл.
Ключевые особенности:
Индикатор [Выборка активна] показывает, что есть данные для анализа
Каждый запрос включает всю историю диалога для поддержания контекста
AI получает и историю, и выбранные пользователем данные
Результат пытается отобразиться как интерактивная таблица
При неудаче парсинга JSON показывается обычный текст
Структура рабочей директории.
Проследим весь жизненный цикл нашего скрипта - что происходит с момента запуска и до получения результатов.
Инициализация: подготовка к работе
При запуске скрипт первым делом настраивает рабочее окружение. Он устанавливает API ключ для доступа к Gemini AI, определяет текущую папку как базовую директорию и создает структуру для хранения файлов. Особое внимание уделяется истории диалогов - для каждой сессии создается уникальный файл с временной меткой, например ai_session_2025-08-26_14-30-15.jsonl.
Затем система проверяет, что все необходимые инструменты установлены. Она ищет Gemini CLI в системе, проверяет наличие файлов конфигурации (системный промпт и справка). Если что-то критично важное отсутствует, скрипт предупреждает пользователя или завершает работу.
Запуск интерактивного режима
После успешной инициализации скрипт переходит в интерактивный режим - показывает приветственное сообщение и ждет ввода от пользователя. Приглашение выглядит как 🤖AI :) > и меняется на 🤖AI [Выборка активна] :) > когда у системы есть данные для анализа.
Обработка пользовательского ввода
Каждый ввод пользователя сначала проверяется на служебные команды через функцию Command-Handler. Эта функция распознает команды ? (справка из файла ShowHelp.md), history (показать историю сессии), clear и clear-history (очистить файл истории), gemini help (справка по CLI), exit и quit (выход). Если это служебная команда, она выполняется немедленно без обращения к AI, и цикл продолжается.
Если это обычный запрос, система начинает формировать контекст для отправки в Gemini. Она читает всю историю текущей сессии из JSONL файла (если он существует), добавляет блок с данными из предыдущей выборки (если есть активная выборка), и объединяет все это с новым запросом пользователя в структурированный промпт с разделами "ИСТОРИЯ ДИАЛОГА", "ДАННЫЕ ИЗ ВЫБОРКИ" и "НОВАЯ ЗАДАЧА". После использования данные выборки обнуляются.
Взаимодействие с искусственным интеллектом
Сформированный промпт отправляется в Gemini через командную строку. Система вызывает gemini -m модель -p промпт, захватывает весь вывод и очищает его от служебных сообщений CLI. Если происходит ошибка на этом этапе, пользователь получает предупреждение, но скрипт продолжает работать.
Обработка ответа AI
Полученный от AI ответ система пытается интерпретировать как JSON. Сначала она ищет блок кода в формате json..., извлекает содержимое и пытается его распарсить. Если такого блока нет, парсит весь ответ целиком. При успешном парсинге данные отображаются в интерактивной таблице Out-ConsoleGridView с заголовком "Выберите строки для следующего запроса (OK) или закройте (Cancel)" и множественным выбором. Если JSON не распознается (ошибка парсинга), ответ показывается как обычный текст в голубом цвете.
Работа с выборкой данных
Когда пользователь выбирает строки в таблице и нажимает OK, система выполняет несколько действий. Сначала вызывается функция Show-SelectionTable, которая анализирует структуру выбранных данных: если это объекты с свойствами, она определяет все уникальные поля и показывает данные через Format-Table с автоподбором размера и переносом. Если это простые значения, отображает их как нумерованный список. Затем выводит счетчик выбранных элементов и сообщение "Выборка сохранена. Добавьте ваш следующий запрос (например, 'сравни их')".
Выбранные данные преобразуются в сжатый JSON с глубиной вложенности 10 уровней и сохраняются в переменной $selectionContextJson для использования в следующих запросах к AI.
Ведение истории
Каждая пара "запрос пользователя - ответ AI" сохраняется в файл истории в формате JSONL. Это обеспечивает непрерывность диалога - AI "помнит" весь предыдущий разговор и может ссылаться на ранее обсуждавшиеся темы.
Цикл продолжается
После обработки запроса система возвращается к ожиданию нового ввода. Если у пользователя есть активная выборка, это отражается в приглашении командной строки. Цикл продолжается до тех пор, пока пользователь не введет команду выхода.
Практический пример работы
Представим, что пользователь запускает скрипт и вводит "RTX 4070 Ti Super":
Подготовка контекста: Система берет системный промпт из файла, добавляет историю (пока пустую) и новый запрос
Обращение к AI: Полный промпт отправляется в Gemini с просьбой найти характеристики видеокарт
Получение данных: AI возвращает JSON с массивом объектов, содержащих информацию о различных моделях RTX 4070 Ti Super
Интерактивная таблица: Пользователь видит таблицу с производителями, характеристиками, ценами и выбирает 2-3 интересующие модели
Отображение выборки: В консоли появляется таблица с выбранными моделями, приглашение меняется на [Выборка активна]
Уточняющий запрос: Пользователь пишет "сравни производительность в играх"
Контекстный анализ: AI получает и исходный запрос, и выбранные модели, и новый вопрос - дает детальное сравнение именно этих карт
Завершение работы
При вводе exit или quit скрипт корректно завершается, сохранив всю историю сессии в файл. Пользователь может в любой момент вернуться к этому диалогу, просмотрев содержимое соответствующего файла в папке .chat_history.
Вся эта сложная логика скрыта от пользователя за простым интерфейсом командной строки. Человек просто задает вопросы и получает структурированные ответы, а система берет на себя всю работу по поддержанию контекста, парсингу данных и управлению состоянием диалога.
Серия «Философия PowerShell»
Серия «gemini-cli»
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀